本文重点介绍combine 命令的使用
Shader "Sbi/ff2" {
//属性
Properties{
_Color("Main Color",color)=(1,1,1,1)
//"Main Color"是unity面板中显示的颜色
_Ambient("Ambient",color)=(0.3,0.3,0.3,0.3)
_Specular("Specular",color)=(1,1,1,1)
_Shininess("Shininess",range(0,8))=4//参数float,也可以是range 表示范围
_Emession("Emession",color)=(1,1,1,1)
_Constant("ConstantColor",color)=(1,1,1,0.3)
_MainTex("MainTex",2d)=""
_SecendTex("SecendTex",2d)=""
}
SubShader{
Tags {"Queue" = "Transparent"}// 改变渲染次序
Pass{
Blend SrcAlpha OneMinusSrcAlpha //开启混合透明
// color(1,1,1,1)//使用小括号,表示固定值,在Inspector面板中不可见
// color[_Color] //使用中括号,表示参数值,可在Inspector面板随时更改
Material{
diffuse[_Color]//漫反射,表示默认漫反射的颜色
ambient[_Ambient]//环境光
specular[_Specular]//镜面高光
shininess[_Shininess]//表示高光反射的强度与区域
emission[_Emission]//自放光
}
lighting on //打开光照 on表示打开
separatespecular on//独立的镜面高光
//SetTexture 命令必须处在Pass的末尾
//格式为SetTexture [TexturePropertyName] { Texture Block }
//TextureName 必须是被当做纹理的属性来定义。在TextureBlock中设置如何定义这个纹理。
settexture[_MainTex]{
//combine 命令 用法形式有8种
//combine src1 * src2 结果纹理将比输入纹理更暗。
//combine src1 + src2 结果纹理将比输入纹理更明亮。
//combine src1 - src2 高亮的部分将变暗
//combine src1 +- src2 src1和src2相加,然后减去0.5
//combine src1 lerp (src2) src3 在src3和src1之间做插值,使用src2的alpha值。请注意插值是相反的方向,当alpha为1时候src1使用,当alpha为0时候src3使用。
//combine src1 * src2+src3 src1与src2的alpha值混合,然后添加src3
//combine src1 * src2+-src3 src1与src2的alpha值混合,然后和有符号的src3相加
//所有src属性都可以为:previous, constant, primary 或texture
//所有src属性,除lerp外,可以使用符号-来使最终颜色反相。
//所有的src属性后面可以有且仅有1个alpha.
//combine texture
//combine texture * primary //primary代表之前颜色值加光照的计算结果
//combine texture * primary double
//combine texture - primary quad
combine texture * primary quad
//Double或者Quad使结果的颜色2倍或者4倍明亮。
}
settexture[_SecondTex]{
constantColor[_Constant]
combine texture * previous double,texture * constant// constant表示 常量颜色从ConstantColor设置中得到 ,constant 只取了constantColor的alpha通道值
//double逗号后面的texture 表示只使用纹理自身的alpha通道,之前的coloralpha值失效
}
}
}
}