Unity Shader
์นดํ ๊ณ ๋ฆฌ: UnityStudy
๐ ์ ๋ํฐ ์์ด๋ (Vertex & Fragment)
๐ Shader ๊ธฐ๋ณธ ๊ตฌ์กฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Shader "MyCustomShader"
{
Properties
{
// ์ฌ์ฉ์ ์ธํฐํ์ด์ค
// Inspector ์ฐฝ์์ ์
๋ ฅ๊ฐ์ ์กฐ์ ํ ์ ์๋ค.
}
// ๊ณ ์ฑ๋ฅ ๋๋ฐ์ด์ค์์๋ ์์์ ์
ฐ์ด๋๊ฐ ์ฐ์ ์ ์ฉ
SubShader
{
Pass
{
// GPU ์๊ฒ ๋๊ฒจ์ค ์์
์ ๊ธฐ์
// ๋๊ฐ ์ด์์ด๋ฉด ๋ฉํฐ ํจ์ค๋ผ๊ณ ํ๋ฉฐ, ํ๋์ ๋ฌผ์ฒด์ Pass ์๋งํผ ์
ฐ์ด๋ ์์
์ ์ํ
}
}
SubShader
{
Pass
{
// ... //
}
}
Fallback "Diffuse" // ๊ฐ์ฅ ๋ฎ์ ํ์ง์ ์
ฐ์ด๋
}
์ ๋ํฐ๋ ๋ ๋๋ง ํ ๋ ๊ฐ์ฅ ์์ SubShader(์ต์ํ์ง)๋ถํฐ ํ์ธํ์ฌ ์ ํฉํ ์คํ์ ๊ณ ๋ฅธ๋ค.
๋ง์ฝ ์ ํฉํ ์คํ์ด ์๋ค๋ฉด Fallback ์ ์ ํ์๋ ์ ฐ์ด๋๋ฅผ ์ฌ์ฉํ๋ค.
๐ Vertex/Fragment Shader ๊ตฌ์กฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
Shader "MyCustomShader"
{
Properties { }
SubShader
{
Pass
{
CGPROGRAM
// CG Code
ENDCG
}
}
}
๊ธฐ๋ณธ ๊ตฌ์กฐ์ ๋ค๋ฅธ ์ ์ CGPROGRAM-ENDCG ๊ฐ ์ถ๊ฐ๋์๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ถ๋ถ์ด vertex/fragment program ์ ๋ํ ๊ฒ์ด๋ค.
๐
1
2
3
4
5
CGPROGRAM
#pragma vertex vert
#pragma fragment freg
// CG Code
ENDCG
#pragma ๋ ์ปดํ์ผ ์ง์์๋ฅผ ๋ปํ๋ค.
vert ๋ ๋ฒํ ์ค, frag ๋ ํ๋๊ทธ๋จผํธ ํ๋ก๊ทธ๋จ(ํจ์)์ด๋ค.
์ง์์๋ฅผ ํตํด ์ด ํจ์๋ค์ CG ์ฝ๋๋ก ์์ฑํ ๊ฒ์ด๋ผ ์ง์ํ๋ค.
vert, frag ๋ฑ ํจ์์ ์ด๋ฆ์ ๋ด ๋ง๋๋ก ๋ฐ๊ฟ ์ ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CGPROGRAM
#pragma vertex vert
#pragma fragment freg
// CG Code
struct appdata { }
struct v2f { }
v2f vert(appdata v)
{
// ... //
}
fixed4 frag(v2f i) : SV_Target
{
// ... //
}
ENDCG
๋ค์๊ณผ ๊ฐ์ด ์ง์์์ ์ ์ธํ ํจ์๋ช ์ผ๋ก ํจ์๋ฅผ ์์ฑํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Vertex Shader ๊ฐ ๊ทธ๋ ค์ง ์์น๋ฅผ ๊ฒฐ์ ํ๊ณ Fragment Shader ๊ฐ ์น ํ ์์ ๊ฒฐ์ ํ๋ค.
์ง์์๋ก ์ ์ธํ vert / frag ํจ์๋ ์ฐ๋ฆฌ๊ฐ ํธ์ถํ๋ ๊ฒ์ด ์๋๋ผ
์๋์ผ๋ก ํธ์ถ๋์ด ์๋ํ๊ธฐ์ ์ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด ๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ