Unity Shader - ShaderLab Syntax ShaderLab语法

目录:Unity Shader - 知识点目录(先占位,后续持续更新)
原文:ShaderLab Syntax
版本:2019.1

ShaderLab Syntax

ShaderLab语法

在Unity中所有的Shader文件都使用强定义语言叫:“ShaderLab”。在文件中,大括号括起来的语法声明了描述着色器的各种东西——例如,Material Inspector中应该显示哪些着色器属性;要做什么样的硬件回退(shader fallback保底设置);使用何种混合模式等;而实际的“着色器代码”是用 CGPROGRAM 代码片段在相同的着色器文件中编写的(参见surface shaders表面着色器和vertex and fragment shaders顶点和片段着色器)。

这个页面和子页面将说明描述哦关于"ShaderLab"的语法内容。CGPROGRAM 内的代码是用编写一般的HLSL/Cg的着色器语言的,查看它们对应的文档页面。

Shader块是一个Shader文件的结构的根节点。每个文件必须要定义一个(有且只有一个)Shader块。它指定了任意的对象的材质使用了该shader文件后将会如何被渲染的。

Syntax

语法

Shader "name" { [Properties] __Subshaders__ [Fallback] [CustomEditor] }

定义一个Shader。它的name名称将在Material Inspector中的Shader选项列表中出现。Shader的可选项 Properties 可以定义Material Inspector中对应Shader的属性。在这些Subshaders随后定义的是一个可选的Fallback和CustomEditor的定义。

Details

详细了解

Properties

Shader可以拥有一个properties的属性列表。任意一个在properties中定义的都将会在Unity编辑器的Material Inspector中显示。通常shader中的properties定义一些对象的颜色,纹理,或是一些专门使用特殊使用的数值。

SubShader & Fallback

SubShader 与 Fallback

没个shader都包含一些sub-shaders。你必须至少要有一个SubShader,当加载shader时,Unity将会遍历一遍Subshader列表,并拿取第一个用户机器可以支持的来运行。如果没有subshader可以支持的,Unity将会尝试使用 fallback shader。

不同的显卡有这部同的功能。这给游戏开发者提出了一个永恒的问题;你想你的游戏在最新的硬件中表现优秀,但不想用户量仅占有市场的3%。这就是为啥需要subshader。创建一个subshader针对吊炸天的显卡效果使用,然后再添加多一个subshader针对一些比较老旧的显卡。这些subshader也许实现你期望的效果时会比较低效,或这些subshader也可以考虑不现实一些效果,来提升兼容性,与性能。

Shader"level of detal"(LOD)和"shader replacement"的两种技术都是再提供的subshader基础上现实的,查看 Shader LOD 和 Shader Replacement了解详情。

Examples

这儿是一个最简单的shader:

// 带顶点光照
Shader "Simple colored lighting"
{
    // 一个颜色属性
    Properties {
        _Color ("Main Color", Color) = (1,.5,.5,1)
    }
    // 定义一个subshader
    SubShader
    {
        // 在该subshader内的一个pass
        Pass
        {
            // 使用逐顶顶光照的固定函数
            Material
            {
                Diffuse [_Color]
            }
            Lighting On
        }
    }
}

这个shader定义了一个颜色的属性 _Color (它将在Material Inspector中显示为 Main Color)并带有默认值为:(1,0.5,0.5,1)。然后是一个subshader的定义。该subshader有一个使用固定函数的顶点光照的Pass。

了解更多复杂的例子,查看 Surface Shader Examples 或 Vertex and Fragment Shader Examples。

See Also

  • Properties Syntax。
  • SubShader Syntax。
  • Pass Syntax。
  • Fallback Syntax。
  • CustomEditor Syntax。

你可能感兴趣的:(Unity,Shader,译文,Unity,ShaderLab,Syntax,Unity,ShaderLab语法)