Shader "Sbin/ff2"
{
Properties{
//变量名 在监视面板显示的名字 类型 = 默认值
_Color("Main Color",Color) = (1,1,1,1)
_Ambient("环境光",Color) = (0.3,0.3,0.3,0.3)
_Specular("高光(镜面反射光)",Color)=(1,1,1,1)
_Shininess("高光强度",Range(0,8)) = 4
_Emission("自发光",Color)=(1,1,1,1)
_MainTexture("主纹理",2d)=""
_SecondTexture("次纹理",2d)=""
}
SubShader {
//必须使用pass编写一个渲染通道
pass{
//小括号为固定值 中括号为参数值
// Color(1,0,0,1)
// Color[_Color]
//材质命令块
Material{
//下面是属性
//描述的是材质的漫反射颜色,可以理解为这个物体本身固有的颜色
DIFFUSE[_Color]
//设置环境光
AMBIENT[_Ambient]
//设置高光
SPECULAR[_Specular]
// 浮点值 描述Specular有多强,决定在镜面高光反射过程中被高光反射的部分的区域
SHININESS[_Shininess]
//自发光
emission[_Emission]
}
//启用顶点光照 如果不开启光照,物体的颜色不会被反射,这时不论怎么修改颜色都不会变化
Lighting on
//独立的高光
SeparateSpecular on
SetTexture[_MainTexture]
{
// Combine texture
// Combine 表示合并,texture 表示参数_MainTexture
// 这里只应用了贴图而没有应用之前的顶点光照,因此会失去光照效果
// Combine texture * primary
// primary 是fixed function shader的关键词
// primary 代表前面所有计算了材质和光照以后的颜色
// 这两个颜色相乘就会得到一个混合的颜色
// 这里要注意的是 颜色rgba的每一个分量都是一个浮点数,范围是[0,1]
// 也就是两个浮点数相乘,这时会得到一个更小的浮点数,因此颜色会看起来更深
Combine texture * primary double
// double 表示对这个结果乘2,也就是对 texture * primary 乘2 ,也就是提高两倍的亮度
// Combine texture * primary quad
// qua 乘4
}
// 多个纹理混合
// SetTexture 只能有一个参数
SetTexture[_SecondTexture]
{
Combine texture * previous double
// previous 表示在这个SetTexture之前的所有计算过的材质和光照的颜色
// 按照这个想法,可以继续编写SetTexture,但不是无限写的
// fixed function shader 是基本对照于显卡硬件的固定渲染部分
// 显示卡是有一个混合纹理最大上限的,显卡硬件越好能混合的纹理越多
// 两张纹理混合是现在几乎所有显卡都支持的
}
}
}
}