Publish:

ํƒœ๊ทธ: , ,

์นดํ…Œ๊ณ ๋ฆฌ:

๐Ÿ“Œ ์œ ๋‹ˆํ‹ฐ ์‰์ด๋” (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 ํ•จ์ˆ˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด ์ž‘๋™ํ•˜๊ธฐ์— ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

๋ฐฉ๋ฌธํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!๐Ÿ˜Š

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ