一. ShaderLab 代码整体布局
Shader "Shader名字"
{
//1.属性块
Properties{}
//2.代码块
CGINCLUDE
...
ENDCG
或者
HLSLINCLUDE
...
ENDHLSL
或者
GLSLINCLUDE
...
ENDGLSL
//3.子着色器列表块
SubShader{
Tags{}
Pass{...}
Pass{...}
...
}
SubShader{...}
...
//4.备用着色器定义块
FallBack "..."
}
二. 材质属性定义
-
关键字:Properties
-
属性定义格式:
属性名("属性描述",属性类型) = 属性默认值
-
用处:只要在这里被定义的属性,就在Unity的Editor中,被材质的默认Inspector识别.也就是说可以通过编辑器修改这个属性,设置预设值.
- 需要注意:
-
每个属性的定义,在语句最后一定不能有分号
-
这里定义了某个属性,那么使用这个Shader的材质,本属性就是不会被SetGlobalxxx来改变的.
-
-
布局示例:
Properties
{
//主颜色,类型:颜色
_Color ("Main Color", Color) = (1, 1, 1, 1)
//颜色的调整值, 类型:范围值
_ColorMultiplier("Color Multipler", Range(0,10)) = 2
//主纹理, 类型:纹理
_MainTex ("Effect Texture", 2D) = "black" {}
//环境立方体贴图, 类型: 立方体贴图
_EnvCube("Env Cube", Cube) = "white" {}
//切割区域, 类型:向量
_ClipRect("ClipRect", Vector) = (-50000,-50000,50000,50000)
//曝光系数, 类型:浮点值
_BloomFactor("BloomFactor", Float) = 0
}
三. 逻辑代码区域
- 关键字:会根据使用的语言有不同.
-
cg语言:CGINCLUDE ... ENDCG
-
hlsl语言:HLSLINCLUDE ... ENDHLSL
-
glsl语言:GLSLINCLUDE ... ENDGLSL
-
-
用处:当前着色器中需要有不同逻辑的子着色器或者pass时,方便代码编写和统一管理.也是为了用于分离业务逻辑定义和渲染标记定义.
- 需要注意:
-
每个着色器的代码文件中尽量只有一个逻辑代码块.
-
每个着色器的代码文件中尽
-