核心提示:在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 亮度提高四倍


