Unity中ShaderLab的基本代码结构与常用语法的归纳整理
Unity中ShaderLab的基本代码结构与常用语法的归纳整理
Shader 是着色器文件的根命令,每个shader文件有且只有一个 Shader
Shader 指定当对象的材质使用此着色器时如何渲染此类对象。
Shader整体结构
Shader "<name>"
{
<optional: Material properties>
<One or more SubShader definitions>
<optional: custom editor>
<optional: fallback>
}
示例
Shader "Examples/ShaderSyntax"
{
CustomEditor = "ExampleCustomEditor"
Properties
{
// 此处是材质属性声明
}
SubShader
{
// 此处是定义子着色器的其余代码
Pass
{
// 此处是定义通道的代码
}
}
Fallback "ExampleFallbackShader"
}
此示例代码演示 Shader 对象的基本语法和结构。示例 Shader 对象有一个包含单个通道的 SubShader。它定义材质属性和一个 Fallback。
而Properties、SubShader、Pass、CustomEditor和Fallback在后文会解释。
属性/Properties
典型的属性包括对象颜色、纹理或者着色器要使用的任意值。
着色器中声明的所有属性都会显示在 Unity 中的材质检视面板中。
属性的代码块:
Properties
{
<Material property declaration>
<Material property declaration>
}
定义属性代码块,Properties
代码块可以包含任意数量的材质属性声明。
材质属性声明
所有材质属性声明都遵循以下基本格式:
[optional: attribute] _name("display text in Inspector", type name) = default value
数字和滑动条
_name ("display name", Range (min, max)) = number
_name ("display name", Float) = number
_name ("display name", Int) = number
这些全都定义一个具有默认值的数字(标量)属性。Range
格式使该属性显示为一个滑动条,范围在 min 到 max 之间。
示例:
_WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // 滑动条
颜色和矢量
_name ("display name", Color) = (number,number,number,number)
_name ("display name", Vector) = (number,</