ShaderLab语法
原文链接:https://docs.unity3d.com/Manual/SL-Shader.html
ShaderLab语法
Unity中的所有Shader文件都使用名为“ShaderLab”的声明性语言编写。在文件中,嵌套大括号语法声明了描述着色器的各种内容 - 例如,应在材质检查器中显示哪些着色器属性 ; 什么样的硬件后备要做; 使用何种混合模式等。实际的“着色器代码”是在同一着色器文件中的CGPROGRAM片段中编写的 (请参阅表面着色器和顶点和片段着色器,链接见原网页)。
此页面和子页面描述嵌套大括号“ShaderLab”语法。代码CGPROGRAM段使用常规HLSL / Cg着色语言编写,请参阅其文档页面(链接见原网页)。
Shader是shader文件的根命令,每个文件必须定义一个(且只有一个)shader。它指定使用这个shader的material的对象该如何渲染。
语法
Shader "name" { [Properties] __Subshaders__ [Fallback] [CustomEditor] }
定义一个shader。它将显示在材质的监视面板上在名字下列出,可以在材质的监视面板中选择性的定义Shader列出的一些属性。在这之后是一系列的subshader,以及可选择性的fallback和/或自定义编辑声明。
细节
属性
Shader可以有一系列的属性,声明在shader中的任何属性在Unity中都会显示在material的监视面板中。典型的属性是对象的颜色,纹理,或是一些shader要使用的任意的值。
SubShaders&Fallback
每个shader都有一个subshader列表,最少要有一个subshader。当加载一个shader的时候,Unity将会浏览subshader列表,并选择第一个用户终端机器支持的subshader。如果没有subshader可以被支持,那么Unity会尝试去使用fallback shader。
不同的显卡有不同的性能。这为游戏开发者带来了永恒的难题,你希望你的游戏在最新的硬件上看起来很棒,但不希望它只对那3%的人群有效。这就是subshader有用的地方,创建一个具有您梦寐以求的所有梦幻图形效果的subshader,然后给旧显卡提供其他的subshader。这些子着色器可以以较慢的方式实现您想要的效果,或者他们可能选择不实现某些细节。
shader“层级细节”(LOD)和“shader替换”是两种基于subshader的技术,有关详细信息,请参阅Shader LOD和Shader Replacemement。
例子
这是最简单的shader示例:
// colored vertex lighting
Shader "Simple colored lighting"
{
// a single color property
Properties {
_Color ("Main Color", Color) = (1,.5,.5,1)
}
// define one subshader
SubShader
{
// a single pass in our subshader
Pass
{
// use fixed function per-vertex lighting
Material
{
Diffuse [_Color]
}
Lighting On
}
}
}
这个shader定义了一个颜色属性_Color(在材质的监视面板中显示为Main Color),它有一个默认值为 (1,0.5,0.5,1)。接着定义了一个单独的subshader。这个subshader由一个Pass组成,开启了固定管线的顶点光照,并为它指定了一个基本的材质。
请参阅Surface Shader示例或 Vertex和Fragment Shader示例中的更多复杂示例(链接见原网页)。
也可以看看(链接见原网页)
属性语法。
SubShader语法。
传递语法。
后备语法。
CustomEditor语法。