Shader结构
Shader的路径和名字
Shader的路径和名字,在Unity中可以通过路径和名字访问到Shader
Properties
Unity面板与Shader变量的桥梁
命名规则:shader变量名(显示在引擎里的变量名,类型) = 值
之后还要在Pass中新建与Properties对应的变量 ,否则没有作用
1 2 3 4 5 6 7 8 9 10 11 12 Shader "Unlit/L2" { Properties { _MainTex ("Texture" , 2 D) = "white" {} _Float("Float" ,float ) = 4.3 _Range("Range" ,Range (0 ,10 )) = 4.3 _DefaultColor("DefaultColor" , Color) = (1 ,1 ,1 ,1 ) } }
SubShader
最重要的模块,一个UnityShader至少包含一个SubShader语句块,多个SubShader可以针对多种显卡。
可选的标签,表示我们希望怎样,以及何时渲染这个对象。可以通过Tages做到控制渲染顺序、预览材质的方式、着色器分类等。
1 2 3 4 5 6 7 8 9 Shader "Unlit/L2" { SubShader { Tags { "RenderType" ="Opaque" } LOD 100 } }
RenderSetup
可选的标签,Shader Lab提供了一 系列渲染状态的设置指令, 这些指令可以设置显卡的各种状态, 例如是 否开启混合/深度测试等。
Pass
一次完整的渲染流程。**一个SubShader语句块可以有多个Pass语句。**Pass语句里面也可以设置标签,但标签的类型和在SubShader里面声明的标签类型不一样。Pass语句也可以进行状态设置,在SubShader里面的状态设置会影响所有的Pass语句,在Pass语句里面的状态设置只会影响该Pass语句。
#pragma vertex 函数名 | #pragma fragment 函数名:告诉Unity顶点着色器和片元着色器对应哪些函数
变量定义:定义结构体来分别表示顶点着色器的输入和输出
变量定义:定义变量与Properties语句块中的变量对应
顶点着色器函数 :传入的参数为模型的顶点
片元着色器函数 :接收来自顶点着色器函数的输出,返回一个四元组fixed4:表示rgba
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 Shader "Unlit/L2" { Properties { _MainTex ("Texture" , 2 D) = "white" {} _Float("Float" ,float ) = 4.3 _Range("Range" ,Range (0 ,10 )) = 4.3 _DefaultColor("DefaultColor" , Color) = (1 ,1 ,1 ,1 ) } SubShader { Tags { "RenderType" ="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS (1 ) float4 vertex : SV_POSITION; }; float _Float; float _Range; float4 _DefaultColor; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos (v.vertex); o.uv = TRANSFORM_TEX (v.uv, _MainTex); UNITY_TRANSFER_FOG (o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = fixed4 (_DefaultColor); return col; } ENDCG } } }