固定渲染管线是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控制和纹理混合
T&L管线可以被渲染状态控制,矩阵,光照及采制参数
固定渲染管线一般用于Shader在老显卡无法显示时的Fallback(在Shader的SubShader都无法使用的时候调用)
命令
小括号写法是固定写法
大括号写法是变量写法,可以传一个自定义变量进去
Shader "Custom/FixFunction" {
properties
{
_BaseColor("BaseColor",color)=(1,1,1,1)
}
subShader
{
pass
{
//固定写法
color(1,1,1,1)
//变量写法
color[_BaseColor]
}
}
FallBack "Diffuse"
}
命令块
以最基本的材质Material命令块为例子,添加一个命令块时候其后添加一个大括号
大括号后面是存放着变量(可以多个)
以下是一个material命令块写法
Shader "Custom/FixFunction" {
properties
{
_BaseColor("BaseColor",color)=(1,1,1,1)
_DiffuseColor("DiffuseColor",color)=(1,1,1,1)
}
subShader
{
pass
{
//固定写法
color(1,1,1,1)
//变量写法
color[_BaseColor]
//material命令块
material
{
//漫反射变量
diffuse[_DiffuseColor]
}
}
}
FallBack "Diffuse"
}
显示效果如下图所示
改变_DiffuseColor漫反射颜色的值发现Cube颜色并没有改变
这是因为还没有开启开关属性
开关命令
以上说到改变_DiffuseColor的值没有改变Cube颜色
这是因为没有开启灯光开关
这是使用到一个开关属性
代码如下
Shader "Custom/FixFunction" {
properties
{
_BaseColor("BaseColor",color)=(1,1,1,1)
_DiffuseColor("DiffuseColor",color)=(1,1,1,1)
}
subShader
{
pass
{
//固定写法
color(1,1,1,1)
//变量写法
color[_BaseColor]
//material命令块
material
{
//漫反射变量
diffuse[_DiffuseColor]
}
lighting on
}
}
FallBack "Diffuse"
}
其他材质块命令
Shader "Custom/FixFunction" {
properties
{
_BaseColor("BaseColor",color)=(1,1,1,1)
_DiffuseColor("DiffuseColor",color)=(1,1,1,1)
_AmbientColor("AmbientColor",color)=(1,1,1,1)
_SpecularColor("SpecularColor",color)=(1,1,1,1)
_ShininessSize("ShininessSize",range(0,5))=3
_EmissionColor("EmissionColor",color)=(1,1,1,1)
}
subShader
{
pass
{
//固定写法
color(1,1,1,1)
//变量写法
color[_BaseColor]
//material命令块
material
{
//漫反射变量
diffuse[_DiffuseColor]
//环境光
ambient[_AmbientColor]
//高光(需开启高光属性开关)
specular[_SpecularColor]
//光亮
shininess[_ShininessSize]
//自发光
emission[_EmissionColor]
}
lighting on
separatespecular on
}
}
FallBack "Diffuse"
}
贴图命令块
//固定渲染管线Shader
Shader "Custom/FixFunction" {
properties
{
_BaseColor("BaseColor",color)=(1,1,1,1)
_DiffuseColor("DiffuseColor",color)=(1,1,1,1)
_AmbientColor("AmbientColor",color)=(1,1,1,1)
_SpecularColor("SpecularColor",color)=(1,1,1,1)
_ShininessSize("ShininessSize",range(0,5))=3
_EmissionColor("EmissionColor",color)=(1,1,1,1)
_MainTexture("MainTexture",2d)="white"{}
_ScecondTexture("ScecondTexture",2d)="white"{}
_ConstantColor("ConatantColor",color)=(1,1,1,1)
}
subShader
{
//设置透明的渲染队列
Tags{"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"}
Blend SrcAlpha OneMinusSrcAlpha
pass
{
//固定写法
color(1,1,1,1)
//变量写法
color[_BaseColor]
//material命令块
material
{
//漫反射变量
diffuse[_DiffuseColor]
//环境光
ambient[_AmbientColor]
//高光(需开启高光属性开关)
specular[_SpecularColor]
//光亮
shininess[_ShininessSize]
//自发光
emission[_EmissionColor]
}
lighting on
separatespecular on
//设置纹理
//此时命令块中的texture就是指_MainTexture
settexture[_MainTexture]
{
//结合命令
//将贴图与初始的颜色相乘
combine texture*primary
}
//设置纹理
//此时命令块中的texture就是指_ScecondTexture
settexture[_ScecondTexture]
{
//此时命令块中的constant就是指_ConstantColor
constantColor[_ConstantColor]
//将贴图与之前的颜色相乘(包括_MainTexture纹理颜色),第二个参数是alpha指的设置
combine texture*previous,texture*constant
}
}
}
FallBack "Diffuse"
}
最终渲染效果如下图所示
属性面板参数如下