Shader "Custom/FF1" { Properties { _Color ("Main Color", Color) = (1,1,1,0) _Ambient ("Ambient", Color) = (0.5,0.5,0.5,0) _SpecColor ("Spec Color", Color) = (1,1,1,1) _Emission ("Emmisive Color", Color) = (0,0,0,0) _Shininess ("Shininess", Range (0.01, 1)) = 0.7 _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Pass { Material { Diffuse [_Color] Ambient [_Ambient] Shininess [_Shininess] Specular [_SpecColor] Emission [_Emission] } Lighting On SeparateSpecular On SetTexture [_MainTex] { Combine texture * primary DOUBLE } } } }
首先要注意,shader不区分大小写。spa
首先第一行是shader的名称,采用分级方式。定义好后可经过Shader.Find来找到对应名称的shader。code
接下来是属性(Properties)。其中包含许多属性。前一部分是属性名,括号内字符串是显示的名字,后面跟着属性的类型。最后等号后面是默认值。
属性的类型有许多种包括数字(Float,Int),滑动条(Range), 颜色(Color),Vector, 贴图(2D、Rect、3D、Cube)等。字符串
下面是一个SubShader。每一个Subshader都由一个或多个Passes组成,一个Pass块引发物体的一次渲染。因此至少要有一个Pass。
咱们的Pass中有一个Material块,绑定了属性值到材质设置。it
再下面是一些操做命令。io
Emission Color
自发光,当物体没有被任何光线照射时的颜色。渲染
Lighting On | Off
顶点光照的开关硬件
SetTexture 读入材质内容,Combine将primary(前面光照计算的颜色)与材质纹理合并,DOUBLE表示乘以2以让颜色更亮。反射
SetTexture 能够不仅有一个(支持多少个由硬件决定,通常两个就够了)。将上面例子改成im
....... Properties { ...... _MainTex ("Base (RGB)", 2D) = "white" {} _SecondTex ("Second (RGB)", 2D) = "white" {} } ...... SetTexture [_MainTex] { Combine texture * primary DOUBLE } SetTexture [_SecondTex] { Combine texture * previous DOUBLE }
第二个SetTexture 中的previous表示上一次SetTexture 计算的结果。从而能够混合两张纹理。总结
其余更为详细的命令,将在后面总结。