【Unity Shader 学习笔记】ShaderLab

什么是ShaderLab?

ShaderLab是Unity为开发者提供的高层级的渲染抽象层,是专门用来编写UnityShader的一种说明性语言。

Unity shader的基本结构
Shader "ShaderName"{
	Properties {
		//属性
	}
	SubShader {
		//显卡A使用的子着色器
	}
	SubShader {
		//显卡B使用的子着色器
	}
	Fallback "VertexLit"
}
材质和Unity Shader的桥梁:Properties

Properties语义块包含了一系列属性,这些属性会显式的出现在材质面板中。便于开发者在材质面板中能够方便地调整各种材质属性。

【Unity Shader 学习笔记】ShaderLab_第1张图片

重量级成员:SubShader

基本结构:

Subshader {
	[Tags]//可选的标签
	[RenderSetup]//可选的渲染状态
	Pass {
		
	}
	//other passes
}

SubShader中定义了一系列Pass以及可选的渲染状态和标签。每个Pass定义了一次完整的渲染流程。//Pass数目过多会造成渲染性能的下降
状态和标签也可以在Pass内声明,但是在SubShader中的标签设置与Pass中是不一样的。对于渲染状态来说,在SubShader进行的状态设置会应用于所有的Pass。

【Unity Shader 学习笔记】ShaderLab_第2张图片
SubShader的标签(Tags)是一个键值对(Key/Value Pair),它的键和值都是字符串(String)类型,它们用来告诉Unity的渲染引擎何时以及怎样渲染对象。
【Unity Shader 学习笔记】ShaderLab_第3张图片
//上述标签只可以在SubShader中声明,不可以在Pass块中声明。

Pass语义块

基本结构

Pass {
	[Name]
	[Tags]
	[RenderSetup]
	//other code
}

首先,我们定义该Pass的名称,如

Name "SQLPASS" 

有了这个名称,我们就可以用ShaderLab的UsePass命令来直接使用其他Unity Shader中的Pass,例如

UsePass "MyShader/SQLPASS"//Unity内部要求Pass的名称必须大写

下面是不同于SubShader标签的Pass标签类型:

【Unity Shader 学习笔记】ShaderLab_第4张图片

留一条后路:Fallback

语义如下:

Fallback "VertexLit"
//or
Fallback off

当且仅当Fallback之前的所有SubShader都不能运行时,调用Fallback的最低级的shader。

你可能感兴趣的:(unity,学习,游戏引擎)