欢迎光临散文网 会员登陆 & 注册

URP | 着色器变体和关键字

2022-02-18 14:11 作者:那个人真狗  | 我要投稿


目的

  • 认识unity有那线变体关键词

  • 这些变体有什么区别,都有什么功能。

着色器变体

  • 这是支持创建变体的类型

下图定义方式

multi_compile 示例

第一种

此指令示例生成两个着色器变体:

一个定义了 FANCY_STUFF_OFF,另一个定义了 FANCY_STUFF_ON

在运行时,Unity 根据材质或全局着色器关键字来激活其中一个变体。

如果这两个关键字均未启用,则 Unity 使用第一个关键字(在此示例中为 FANCY_STUFF_OFF)。

第二种

也可以定义多个关键字,

这个指令生成4个变体

  • SIMPLE_SHADING

  • BETTER_SHADING

  • GOOD_SHADING

  • BEST_SHADING

multi_compile_local示例



shader_feature 与 multi_compile 二者区别

multi_compile   更适合Shader 变体,通过代码来全局设置的关键字

比如默认的阴影

shader_feature   用于材质中设置的关键字


第一个属性,是我们需要全局去控制物体是否受多光源影响。

第二个只是本地变体。


关键字限制

shader_feature和 multi_compile的主要缺点是其中定义的所有关键字均会影响 Unity 的全局关键字,关键字是有上限的,unity全局关键字上限是(384 个全局关键字,外加 64 个本地关键字)

所以就出现上面俩个类型的变体。

本地关键字

这里就说明 后面 带 Local 和不带Local的区别。

  • #pragma multi_compile

  • #pragma multi_compile_local

  • #pragma shader_feature

  • #pragma shader_feature_local

本地关键字示例

  • shader_feature_local:__类似于 shader_feature__,但是枚举的关键字为本地关键字。

  • multi_compile_local:__类似于 multi_compile__,但是枚举的关键字为本地关键字。

注意 :这里是俩个下划线(__)


注意:定义语法


总结

  • Unity Shader里有4种着色器变体

  • 这些变体有什么区别,都有什么功能。

    shader_feature和 multi_compile 一个是给材质使用变体,一个是给Shader变体使用。

    shader_feature_local 和 multi_compile_local 变体,是本地关键字

资料参考

着色器变体和关键字 - Unity 手册

URP | 着色器变体和关键字的评论 (共 条)

分享到微博请遵守国家法律