shader自定义宏

shader自定义宏

我们可以在 shader 中添加自定义宏来简化多条件分支的代码编写
unity称为shader变体

原理

unity实际上是根据你定义的宏的不同取值编译出多个不同的shader变体
然后根据条件使用具体的某个变体

定义宏

  • 主要有这4个函数:

    • #pragma multi_compile
    • #pragma multi_compile_local
    • #pragma shader_feature
    • #pragma shader_feature_local
  • multi_compile 和 shader_feature 的区别是
    multi_compile 定义的宏是为了让你在代码中使用,在打包时会生成所有组合的变体
    shader_feature 定义的宏是为了让你在材质中使用,在打包时只会打包材质中使用到的变体

  • 带 local 后缀和不带的区别是
    不带 local 后缀定义的是全局宏,也就是其它 shader 文件也能使用,整个工程所有 shader 文件最多有 256个,unity 内部使用 64个
    带 local 后缀的定义的是本地宏,只能在本 shader 文件中使用,每个文件限制 64个

  • multi_compile用法(其它3个类似)
    HLSLPROGRAM 放在 HLSL 代码块中
    #pragma multi_compile A B C 把互相排斥的宏定义在一行,A B C只能有一个定义,默认为 A
    #pragma multi_compile __ D E 2个下划线表示都不定义的情况,这2行将产生 3x

猜你喜欢

转载自blog.csdn.net/qmladm/article/details/131030751