核心提示:在Unity引擎中,为了方便用户与引擎沟通,Unity引擎创造了一种简单的命令集词法结构。unity总共包含了三种着色器:1.固定 管线着色器2.顶点和片段着色器3.表面着色器咱们从固定管线着色器开始...
在Unity引擎中,为了方便用户与引擎沟通,Unity引擎创造了一种简单的命令集词法结构。
unity总共包含了三种着色器:
1.固定 管线着色器
2.顶点和片段着色器
3.表面着色器
咱们从固定管线着色器开始学!
//咱们shader的名字,在材质球上可以直接选 Shader "Custom/1-1color" { //【属性】 Properties { _Color("材质颜色", Color) = (1, 1, 1, 1) _Diffuse("漫反射", Color) = (1, 1, 1, 1) _Specular("高光颜色", Color) = (1, 1, 1, 1) _MainTex("纹理材质", 2D) = "white" {} _Shininess("高光光斑", Range(0.1, 1)) = 0.7 _Ambient("环境光", Color) = (1, 1, 1, 1) _Emission("自发光", Color) = (1, 1, 1, 1) } //【子着色器】 SubShader { Pass { Material { //漫反射 Diffuse[_Diffuse] //高光 Specular[_Specular] //高光光斑 Shininess[_Shininess] //环境光 Ambient[_Ambient] //自发光 Emission[_Emission] } //开启灯光 Lighting On //设置纹理 SetTexture[_MainTex] { //常量颜色影响纹理 ConstantColor[_Color] //纹理颜色和两倍顶点颜色混合 Combine texture * primary DOUBLE } } } }
shader的属性上面没有列完全,总共有Color颜色,Vector四维向量,Float单精度浮点数,range(最大值,最小值)=中间某个值,2D表示2D的纹理贴图,Rect矩形纹理贴图,Cube立方体纹理贴图。
如果你发现设置纹理之后没有灯光效果,请把顶点颜色混合进去,应该就可以了,我一开始也比较困惑!
颜色混合命令:
(1)直接使用纹理中的颜色:SetTexture[_MainTex]{ combine texture }
(2)让纹理颜色和常量纯色进行混合:SetTexture[_MainTex]{ constantColor[_Color] combine constant * texture }
(3)我们希望顶点颜色和纹理颜色进行混合:SetTexture[_MainTex]{ combine primary * texture }
(4)我们希望顶点颜色和常量同时影响纹理:SetTexture[_MainTex]{ constantColor[_Color] combine constant * texture *primary }
想让顶点颜色双倍的影响纹理的话,直接乘以DOUBLE就行。
Combine 中的texture 指的是 [_MainTex], primary 指的是上面的光照计算结果,DOUBLE亮度提高两倍。
previous :上一次SetTexure的结果。Constant :被ConstantColor指定的颜色。
Quad 亮度提高四倍