shader自定义宏

本文详细介绍了在Unity中如何自定义shader宏,包括原理、定义宏的多种方式,以及在脚本和材质中如何启用宏。此外,还讨论了打包策略,如处理shader丢失的问题,以及如何手动或自动创建ShaderVariantCollection文件来确保所需变体被正确打包。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值