Unity 做为一款跨平台的游戏引擎,为了适应不同平台的GPU能力,自定义了 ShaderLabel 语言来组织 Shader 的内容。并针对不同平台进行编译。
ShaderLabel 是一种标签语言,类似 HTML。一个 Shader 文件格式如下:
Shader "name" { [Properties] Subshaders [Fallback] [CustomEditor] }
Shader文件必须由 Shader 关键字开始,后面跟着该 Shader 的引用名。可以像目录一样组织引用名, 并且引用名跟文件名不必一样。
SubShader 标签块中包含了Shader程序的逻辑实现部分。一个Shader文件中必须包含一个SubShader标签块,也可以包含多个SubShader标签块,这样 Unity 可以根据硬件平台的性能自动选择相匹配的 SubShader 来执行其中的逻辑。
Fallback 是一个可选的标签块,当对于一个硬件平台,所有的 SubShader 都不匹配的时候,会执行 Fallback 中引用的 Shader 文件来进行处理。如果我们不需要做这些兼容性的处理,可以不定义 Fallback 标签块,或则用以下形式使其无效:
Fallback off
CustomEditor 也是一个可选的标签块,它指定了这个 Shader 的自定义编辑器类名。这是一个继承自 ShaderGUI 的类。
一个完整的 Shader 文件例子如下:
Shader "MyShader/Name" {
Properties {
_MyTexture ("My Texture", 2D) = "white" { }
// other properties like colors or vectors go here as well
}
SubShader {
// here goes the 'meat' of your
// - surface shader or
// - vertex and program shader or
// - fixed function shader
}
SubShader {
// here goes a simpler version of the SubShader
// above than can run on older graphics cards
}
Fallback "othershader"
CustomEditor "MyCustomEditor"
}
1064

被折叠的 条评论
为什么被折叠?



