Posts 멀티패스 쉐이더 코드 깔끔하게 작성하기
Post
Cancel

멀티패스 쉐이더 코드 깔끔하게 작성하기

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Shader "A/B"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }

    CGINCLUDE
    #include "UnityCG.cginc"

    /* Structs */
    struct appdata
    {
        float4 vertex : POSITION;
        float2 uv : TEXCOORD0;
    };
    struct v2f
    {
        float4 pos:SV_POSITION;
        float2 uv:TEXCOORD0;
    };

    sampler2D _MainTex;

    /* Pass 1 Shader Functions */
    v2f vert1 (appdata v)
    {
        v2f o;
        o.pos = UnityObjectToClipPos(v.vertex);
        o.uv = v.uv;
        // ...
        return o;
    }

    fixed4 frag1 (v2f i) : SV_Target
    {
        fixed4 col = fixed4(0,0,0,0);
        // ...
        return col;
    }     

    /* Pass 2 Shader Functions */
    v2f vert2 (appdata v)
    {
        v2f o;
        o.pos = UnityObjectToClipPos(v.vertex);
        o.uv = v.uv;
        // ...
        return o;
    }

    fixed4 frag2 (v2f i) : SV_Target
    {
        fixed4 col = fixed4(0,0,0,0);
        // ...
        return col;
    } 
    ENDCG

    SubShader
    {
        Tags { "RenderType"="Opaque" }
        //Cull Off ZWrite Off ZTest Always

        Pass // 1
        {
            CGPROGRAM
            #pragma vertex vert1    
            #pragma fragment frag1
            ENDCG
        }
        Pass // 2
        {
            CGPROGRAM
            #pragma vertex vert2
            #pragma fragment frag2
            ENDCG
        }
    }
}
This post is licensed under CC BY 4.0 by the author.