kingBook

导航

Unity Shader 顶点/片元着色器的基本结构

Shader "MyShaderName"{
    Properties{
        //属性
    }
    SubShader{
        //针对显卡A的SubShader
        Pass{
            //设置渲染状态和标签
            
            //开始CG代码片段
            CGPROGRAM
            //该代码片段的编译指令,例如:
            #pragma vertex vert
            #pragma fragment frag
            
            //CG代码写在这里
            
            ENDCG
            
            //其他设置
        }
        //其它需要的Pass
    }
    SubShader{
        //针对显卡B的SubShader
    }
    
    //上述SubShader都失败后用于回调的Unity Shader
    Fallback "VertexLit"
}

一个简单的顶点/片元着色器代码:

Shader "Custom/SimpleWhiteShader"{
    SubShader{
        Pass{
            CGPROGRAM
            #pragma vertex vert //指定vert函数是顶点着色器代码
            #pragma fragment frag //指定frag函数是片元着色器代码
            float4 vert(float4 v:POSITION):SV_POSITION{
                return UnityObjectToClipPos(v);
            }
            fixed4 frag():SV_Target{
                return fixed4(1.0,1.0,1.0,1.0);
            }
            ENDCG
        }
    }
    Fallback "VertexLit"
}

传递法线、纹理坐标给片元着色器:

Shader "Custom/SimpleStructShader"{
    SubShader{
        Pass{
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            
            struct a2v{
                float4 vertex:POSITION;		//模型空间顶点坐标
                float3 normal:NORMAL;		//模型空间顶点的法线
                float4 texcoord:TEXCOORD0;	//模型空间顶点的纹理0坐标
            };
            
            struct v2f{
                float4 pos:SV_POSITION;
                float3 color:COLOR0;
            };
            
            v2f vert(a2v v){
                v2f o;
                //v.normal包含了顶点的法线方向,其分量范围在[-1.0,1.0]
                //下面的代码把分量范围映射到了[0.0,1.0]
                //存储到o.color中传递给片元着色器
                o.pos=UnityObjectToClipPos(v.vertex);
                o.color=v.normal*0.5+fixed3(0.5,0.5,0.5);
                return o;
            }
            fixed4 frag(v2f i):SV_Target{
                //将插值后的i.color显示到屏幕上
                return fixed4(i.color,1.0);
            }
            ENDCG
        }
    }
    Fallback "VertexLit"
}

posted on 2020-04-14 16:41  kingBook  阅读(180)  评论(0编辑  收藏  举报