Unity3D Shader 开发详解 (1)

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值