Shader "Learn/ManNiuLesson06"
{
Properties
{
// 属性("面板显示名字",属性类型) = (初始值)
_Color("Main Color",color) = (1,1,1,1) // 颜色属性
_Ambient("Ambient",color) = (0.3,0.5,0.1,0.3) // 环境氛围属性
_Specular("Specular",color) = (1,1,1,1) // 高光属性
//_Shininess("Shininess",float) = 4 // 限定高光范围 - float 数值控制
_Shininess("Shininess",range(0,8)) = 4 // 限定高光范围 - range 范围数值控制
_Emission("Emission",color) = (1,1,1,1) // 自发光的属性
_MainTex("MainTex",2D) = ""{} // 主贴图属性
_SecondTex("MainTex",2D) = ""{} // 第二张贴图属性
_Constant("ConstantColor",color) = (1,1,1,0.3) //可以让物体透明,但是此条属性只能放在贴图属性之前定义,除非,贴图属性后面添加了" =""{}或="xxx"{} "
}
SubShader
{
// Tags{ "key" = "value" } 键值对应,键值都是字符串.Queue 用来改变渲染队列
Tags{ "Queue" = "Transparent" }
Pass
{
/*
Alpha blending
效果:让我们使用当前颜色当中的 Alpha 值与已减掉当前 Alpha
值的比例去混合之前的已经被渲染好的场景颜色值
可以用来制作透明的效果
*/
Blend SrcAlpha OneMinusSrcAlpha
//color(1,1,1,1) // () 里面的是固定值
//color[_Color] // [] 里面是参数值
material // 材质是一个命令块
{
diffuse[_Color] // 漫反射命令使用 _Color 属性
ambient[_Ambient] // 环境光命令使用 _Ambient 属性
specular[_Specular] // 高光命令使用 _Specular 属性
shininess[_Shininess] //限定高光范围命令使用 _Shininess 属性
emission[_Emission] // 自发光命令使用 _Emission 属性
}
lighting on // on/off 打开光照属性关闭光照属性.配合与光照有关的属性使用.
separatespecular on // on/off 独立的镜面高光配合高光属性使用
/*
设置贴图的命令 使用 _MainTex 贴图
一个 settexture 只能带有一个参数
*/
settexture[_MainTex]
{
/*
使用贴图(combine - v.使结合)
"* primary" 的意思是和之前的设置好颜色光照等属性混合
由于混合是 小数之间的相乘 可以加上关键字 double(放大两倍)
quad(放大四倍)
*/
combine texture * primary double
//combine texture * primary quad
}
/*
设置第二张贴图的命令 使用 _SecondTex 贴图
*/
settexture[_SecondTex]
{
// matrix[] 涉及到了矩阵
/*
constantColor 指令使用 _Constant 属性
在使用时要写为 "* constant"
一般写在 texture 之后,让物体透明
使用这种方法,可以不将对应的贴图的
灰度系数变为Alpha值(不用改选贴图的 Alpha Source 为 From Gray Scal 选项)
也可让物体变的透明
*/
constantColor[_Constant]
/*
如果不通过使用 "* constant"的方式.可以使用一下方式:
让第二张贴图和第一张贴图混合(previous - adj.先前的)
"* previous" 的意思是和之前设置的贴图属性混合
最多混合多少张贴图由显卡性能决定
同样可以使用 double quad 关键字
",texture" 意味着只使用了当前纹理 texture 的 Alpha 通道,但是
之前的混合都会失效,要想保留之前的混合,需要将对应的贴图的
灰度系数变为Alpha值(改选贴图的 Alpha Source 为 From Gray Scal 选项)
*/
combine texture * previous double,texture * constant
}
}
}
}