Unity3D Shader 开发详解 (1)

来源:互联网 发布:淘宝店店主的工作经验 编辑:程序博客网 时间:2024/04/29 03:04
Unity 做为一款跨平台的游戏引擎,为了适应不同平台的GPU能力,自定义了 ShaderLabel 语言来组织 Shader 的内容。并针对不同平台进行编译。
ShaderLabel 是一种标签语言,类似 HTML。一个 Shader 文件格式如下:

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

Shader文件必须由 Shader 关键字开始,后面跟着该 Shader 的引用名。可以像目录一样组织引用名, 并且引用名跟文件名不必一样。

Properties 标签块定义了 Shader 中使用到的外部属性变量,可以在编辑器的 Inspector 窗口中对这些属性变量进行设置,也可以在运行时通过 API 来修改。

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"
}

0 0
原创粉丝点击