一.简介

  固定功能shader(Fixed function shader):针对硬件能够执行的基本命令编写的shader.

二.编写简单的Shader

  1.pass通道

    在Unity中创建一个Surface Shader:

    Unity Shader学习记录三:固定管线Shader_Unity

    打开Shader,删去Properties和SubShader中的内容,并添加pass通道代码:



Shader "Custom/First"
{
SubShader
{
//使用pass编写渲染通道
pass
{
color(1,0,0,1)//红色
}
}
}


    可以看到,使用color指定了shader渲染的颜色为红色.在Unity中创建一个材质,并将此shader指定给这个材质,然后在游戏中创建一个物体使用此材质,就可以看到相应的效果:

    Unity Shader学习记录三:固定管线Shader_默认值_02Unity Shader学习记录三:固定管线Shader_Shader_03Unity Shader学习记录三:固定管线Shader_默认值_04

  2.使用参数



Shader "Custom/First"
{
properties{
//指定参数_Color,其名称为"Main Color",类型为颜色color,默认值为(0,1,0,1)
_Color("Main Color",color) = (0,1,0,1)//默认绿色
}
SubShader
{
pass
{
//当前颜色渲染使用_Color参数赋值
color[_Color]
}
}
}


    在Properties中添加参数(不区分大小写),指定参数的格式和使用参数的方式见代码,指定后在Unity中选中材质所在的游戏物体可以看到这个名为Main Color的参数:

    Unity Shader学习记录三:固定管线Shader_环境光_05

    可以直接修改参数的值(和MonoBehaviour脚本的参数类似).

  3.光照信息



Shader "Custom/First"
{
properties{
//指定参数_Color,其名称为"Main Color",类型为颜色color,默认值为(0,1,0,1)
_Color("Main Color",color) = (0,1,0,1)//默认绿色
//环境光参数
_Ambient("Ambient",color) = (0.7,0.7,0.7,1)
//高光参数
_Specular("Specular",color) = (1,1,1,1)
//高光反射区域参数
_Shininess("Shininess",range(0,8)) = 4
//自发光参数
_Emission("Emission",color) = (1,1,1,1)
}
SubShader
{
pass
{
//在材质命令块中编写光照信息
Material{
//默认光照颜色
diffuse[_Color]
//环境光信息
ambient[_Ambient]
//高光信息
specular[_Specular]
//高光反射区域信息
shininess[_Shininess]
//自发光信息
emission[_Emission]
}
//使用lighting on/off开关光照
lighting on
//独立的镜面高光开启
separatespecular on
}
}
}


  4.setTexture命令



Shader "Custom/First"
{
properties{
//指定参数_Color,其名称为"Main Color",类型为颜色color,默认值为(0,1,0,1)
_Color("Main Color",color) = (0,1,0,1)//默认绿色
//环境光参数
_Ambient("Ambient",color) = (0.7,0.7,0.7,1)
//高光参数
_Specular("Specular",color) = (1,1,1,1)
//高光反射区域参数
_Shininess("Shininess",range(0,8)) = 4
//自发光参数
_Emission("Emission",color) = (1,1,1,1)
//纹理参数,值为给纹理取得名字
_MainTex("MainTex",2d) = ""
}
SubShader
{
//标签控制渲染顺序
Tags{"Queue" = "Transparent"}
pass
{
//在通道前加入blend factor
Blend SrcAlpha OneMinusSrcAlpha

//在材质命令块中编写光照信息
Material{
//默认光照颜色
diffuse[_Color]
//环境光信息
ambient[_Ambient]
//高光信息
specular[_Specular]
//高光反射区域信息
shininess[_Shininess]
//自发光信息
emission[_Emission]
}
//使用lighting on/off开关光照
lighting on
//独立的镜面高光开启
separatespecular on

//设置纹理,一个settexture只能编写一张纹理
settexture[_MainTex]
{
//结合纹理(texture代表纹理,primary代表光照高光等信息,double用于提高亮度)
combine texture * primary double
}
//混合第二张纹理贴图
settexture[_MainTex]
{
//结合纹理(previous代表之前已经混合的纹理)
combine texture * previous double,texture * constant
}
}
}
}