天天看點

Shader基礎《九》 基本的頂點片元着色器

 歡迎加入Unity業内qq交流群:956187480

一個簡單的頂點/片元着色器 

Shader基礎《九》 基本的頂點片元着色器
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'


Shader "a幻世界/頂點片元着色器"
{
    //暴露在外面的屬性欄
    Properties{
    //聲明一個color屬性
    _Color("Color",Color) = (1,1,1,1)
    }
    //針對顯示卡a的shubshader
    SubShader{
                Pass{
                    //設定渲染狀态和标簽
                    
                    //開始CG代碼片段
                    CGPROGRAM
                    #pragma vertex vert
                    #pragma fragment frag
                    //為了在cg代碼段通路_Color屬性,我們必須在這裡定義一個跟Properties裡面相對應的變量,名稱和類型必須一緻
                    float4 _Color;
                    //使用一個結構體來定義頂點着色器的輸入
                    struct a2v {
                            float4 pos:POSITION;//用模型空間的頂點填充pos變量
                            float4 color:COLOR0;//用模型空間的顔色填充color
                            float4 normal:NORMAL;//用模型的法線方向填充normal變量
                            float4 texcoord:TEXCOORD0;//用模型的第一套紋理坐标填充texcoord變量

                        };
                    //使用一個結構體來定義頂點着色器的輸出,在頂點着色器跟片元着色器之間傳遞資訊
                    struct v2f {
                            float4 pos:SV_POSITION;//SV_POSITION語義告訴unity,pos裡面包含了頂點在裁剪空間裡的位置資訊
                            float4 color:COLOR0;//COLOR0語義存儲顔色資訊
                        };
                    //寫一個輸出模型空間資訊輸出裁剪空間資訊的函數
                    v2f vert(a2v v) {
                        v2f o;//建立一個頂點着色器輸出的結構體
                        o.pos = UnityObjectToClipPos(v.pos);//把模型空間的頂點位置轉換到裁剪空間的位置
                        o.color = v.normal*0.5f + fixed4(0.5, 0.5, 0.5,0.5);//把模型空間的法線方向分量[-1,1]映射到裁剪空間傳遞給片元着色器
                        return o;
                    }
                    //片元着色器接收到頂點資訊後通過插值把顔色渲染到螢幕上
                    float4 frag(v2f i):SV_Target{
                        float4 c = i.color;
                        c *= _Color.rgba;
                        return fixed4(c);
                    }
                    ENDCG
                }
                //其他需要的pass
    }
        
        Fallback "Diffuse"
}