Unity Shader的组织形式
- Unity Shader的形态
- Shaderlab基本结构
- Build-In Shader
Unity Shader的形态
- surface shader
- vertex and fragment shader
- fixed function shader
Shaderlab基本结构
shader"name"{
[Properties]
SubShaders
[FallBack]
}
- Properties基本形式
name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number
name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)
name ("display name", 2D) = "defaulttexture" {}
name ("display name", Cube) = "defaulttexture" {}
name ("display name", 3D) = "defaulttexture" {}
举个栗子:
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) = "" {}
}
- SubShader
至少需要有一个SubShader,当然也可以有多个。
显卡渲染时,会从上到下,找到一个符合自己设备要求的subshader执行。 - FallBack
如果所有subshader都没有被执行,执行fallback,进行最基本的渲染。
Unity内置常用Shder
- Unit 不发光。只是一个纹理,不被任何光照影响。
- VertexLit 顶点光照。
- Diffuse 漫反射。
- Normal mapped 法线贴图。比漫反射更昂贵:增加了一个或更多纹理(法线贴图)和几个着色器结构。
- Specular 高光。增加了特殊的高光计算。
- Normal Mapped Specular 高光法线贴图。增加了视差法线贴图计算。
- Parallax Normal Mapped Specular 视差高光法线贴图。增加了视差法线贴图和镜面高光计算。