在Unity中,固定管线Shader的性能是最好的。
什么是固定管线呢?
固定渲染管线 —— 这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控制和纹理混合。T&L管线可以被渲染状态控制,矩阵,光照和采制参数。
下面是一个固定管线Shader的示例:
Shader "Sbin/ff1" { // 固定管线 properties { // 变量名("描述名",类型)=值 _Color("主体", color)=(1,1,1,1) _Ambient("环境光", color)=(0.3,0.3,0.3,0.3) _Specular("高光", color)=(1,1,1,1) // 变量名("描述名",range(区域最小值,区域最大值)=默认值 _Shininess("高光强度",range(0,8))=4 _Emission("自发光", color)=(1,1,1,1) } SubShader { pass { //color (1, 1, 0, 1) //color[_Color] material { diffuse[_Color] ambient[_Ambient] specular[_Specular] shininess[_Shininess] emission[_Emission] } lighting on separatespecular on // 镜面高光 } } // FallBack "Diffuse" }
关键字:
material : 物体材质属性
diffuse : 主体颜色
ambient : 环境光颜色
specular : 高光颜色
shininess : 高光强度, 越光滑的物体, 高光强度值应该越大。
emission : 自发光颜色
效果图:
【官方文档中的一些说明】
Properties 语法
Properties { Property [Property ...] }
Numbers and Sliders 数字和区域滑块
name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number
Colors and Vectors 颜色和顶点
name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)
Textures 纹理
name ("display name", 2D) = "defaulttexture" {}
name ("display name", Cube) = "defaulttexture" {}
name ("display name", 3D) = "defaulttexture" {}
Example (示例)
// properties for a water shader
Properties
{
_WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // sliders
_ReflDistort ("Reflection distort", Range (0,1.5)) = 0.5
_RefrDistort ("Refraction distort", Range (0,1.5)) = 0.4
_RefrColor ("Refraction color", Color) = (.34, .85, .92, 1) // color
_ReflectionTex ("Environment Reflection", 2D) = "" {} // textures
_RefractionTex ("Environment Refraction", 2D) = "" {}
_Fresnel ("Fresnel (A) ", 2D) = "" {}
_BumpMap ("Bumpmap (RGB) ", 2D) = "" {}
}