【Unity Shader 】基本結(jié)構(gòu)

1、ShaderLab

目前面向GPU的編程有三種高級圖像語言:HLSL語言,GLSL語言,Cg語言。

HLSL語言:High Level Shading Language,由Microsoft公司提供,通過Direct3D圖形軟件庫來編寫的著色器語言。
GLSL語言:OpenGL Shading Language,由OpenGL安委會提供,在OpenGL中進(jìn)行著色器編程的語言。
Cg語言:C for Graphics,由NVIDIA公司和Microsoft公司合作提供,有自己的一套關(guān)鍵字和函數(shù)庫,獨立于三維編程接口,在Direct3D和OpenGL上都可工作。
ShaderLab: Unity 自己又封裝了一層CG/HLSL/GLSL的接口,但為了實現(xiàn)跨平臺,Unity重點支持Cg著色器語言。所以我們使用的是ShaderLab

2、渲染流程

見【Unity Shader入門精要】概念基礎(chǔ)

3、Shader的基本結(jié)構(gòu)

看一下基本的Shader程序結(jié)構(gòu)

Shader "Unlit_Tutorial_Shader"{ 
    Properties{             //這個是告訴暴露給editor的屬性,可以再編輯器中編輯
        _Color("Total Color",Color) = (1,1,1,1)  //告訴編輯器我有一個屬性為Color的數(shù)據(jù)需要編輯
    }

    SubShader{  //每一個Shader都至少有一個SubShader
        Pass{ //每個SubShader至少有一個Pass
            CGPROGRAM
            #pragma vertex vertexFunction   //相當(dāng)于聲明頂點著色器的函數(shù)入口
            #pragma fragment fragmentFunction //相當(dāng)于申明片元著色器的函數(shù)入口
            #include "UnityCG.cginc"  //有一些常用函數(shù)和常量在這個文件中

            struct a2v { //頂點數(shù)據(jù)結(jié)構(gòu)
                float4 vertex:POSITION;  //頂點位置,應(yīng)該是在模型坐標(biāo)系下的
                float2 uv:TEXCOORD0;//第一套紋理坐標(biāo)
                float3 normal:NORMAL;//頂點法線,應(yīng)該也是在模型坐標(biāo)系下的
            };
            struct v2f { //傳入片元的數(shù)據(jù)結(jié)構(gòu)
                float4 position:SV_POSITION;//裁剪坐標(biāo)系下的頂點坐標(biāo)
                float2 uv:TEXCOORD0;//第一套紋理UV坐標(biāo)
            };
            
            float4 _Color;  //在Properties聲明的_Color,可以再編輯器中修改

            v2f vertexFunction(a2v inValue) {//頂點著色器函數(shù)入口,要與聲明的一致
                v2f o; 

                return o;
            }
                  //輸出值將會存儲到渲染目標(biāo)(render target)中
            fixed4 fragmentFunction(v2f inValue) :SV_TARGET{ //片元著色器函數(shù)入口,要與聲明一致
                return  _Color;
            }

            ENDCG
        }
    }
}

3、Properties支持類型

image.png

4、SubShader

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容