通过之前的shader初识,Fixed Function Shader是固定功能的着色器,它的功能有限,但是编写比较简单,因为它总是通过一系列的命令达到我们对图形着色的目的。现在我们来看一段脚本
Shader "Custom/FixedShader2" { //"Custom/FixedShader2" 定义了shader菜单的级联选项
Properties{ // Properties是一系列的输入参数
_Color("Main Color",Color) = (1,1,1,1) //设置物体本身的颜色
_Ambient("Ambient",Color) = (0.3,0.3,0.3,0.3) //设置环境色
_Specular("Specular",Color) = (1,1,1,1) //设置反光色
_Shininess("Shininess",Range(0,8)) = 4 //设置光滑度,正比
_Emission("Emission",Color) = (1,1,1,1) //设置自发光色,不对场景物体产生光照影响
_MainTex("MainTex",2D) = ""{} //设置第一张纹理,{}不可漏
_SecondTex("SecondTex",2D) = ""{} //设置第二张纹理,{}不可漏
_Constant("Constant",Color) = (1,1,1,0.3) //用来调节alpha值
}
SubShader //具体的shader算法写在这里,一个shader至少有一个Subshader
{
Tags //GPU渲染是有顺序的,tags标签指定了你的shader在何时被调用
{
//指明了我们的shader在Transparent阶段被调用。
//Queue表明了GPU渲染的顺序: Background,Geometry, AlphaTest,Transparent,Overlay
"Queue" = "Transparent"
}
pass { //pass程序块在Geometry阶段执行一次,用于对渲染对象的几何计算,在surface shader中不需要写pass
//Blend用于设置Alpha混合,Alpha操作和alpha覆盖模式。,这里设置了alpha混合
Blend SrcAlpha OneMinusSrcAlpha
//material是一个命令块,它的作用是使用Properties中的输入参数,使shader能够产生影响
material
{
diffuse[_Color] //指定颜色的命令
ambient[_Ambient] //指定环境色的命令
specular[_Specular] //指定反光色的命令
shininess[_Shininess] //指定光滑度的命令,往往和上一个命令成对使用
emission[_Emission] //指定自发光色的命令
}
lighting on //打开光照开关,默认为关闭,不接受光照影响
separatespecular on //镜面高光开关,如果之前使用了specular[]命令,这个开关必须打开
settexture[_MainTex] //设置纹理,一个settexture只能带一个参数
{
//combine命令用于将之前material中的物理计算结果与纹理结合
combine texture * primary double //primary代表之前所有计算好的顶点值 , double表示提高两倍亮度
}
settexture[_SecondTex]
{
//combine texture * primary double //会覆盖前一个纹理
//combine texture * previous double //用当前采样纹理乘上之前采样结果,实现两个纹理融合
// combine texture * previous double,texture //利用纹理的alpha通道来设置shader透明度
constantColor[_Constant]
combine texture * previous double,texture * constant //这样就可以在图片透明度之上再通过调节颜色的alpha值来控制最终alpha效果
}
}
}
FallBack "Diffuse"
}
实现的效果
更多语法,详看ShaderLab syntax
网友评论