shader打包到AB包后,没有包含到UnityShaderVariant导致模型变黑的问题

本文探讨了Unity中ShaderVariant在打包到AB包后可能导致模型变黑的问题,详细解析了multi_compile和shader_feature的区别,并介绍了ShaderVariantCollection(SVC)作为解决方案,用于确保正确编译Shader Variant并控制包体大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ShaderVariant
    在shader最终编译时,根据上层的宏定义,根据不同的组合编译出多套底层shader.
    Unity的Shader中通过multi_compile和shader_feature来定义宏(keyword)。最终编译的时候也是根据这些宏来编译成多种组合形式的Shader源码。其中每一种组合就是这个Uniy Shader的一个Variant
Material与ShaderVariant的关系
    一个Material同一时刻只能对应它所使用的Shader的一个variant。进行切换的要使用Material.EnableKeyword()和Material.DisableKeyword()来开关对应的宏,
    Unity会根据你设定的组合来匹配响应的shader variant进行渲染
    Shader.EnableKeyword,和Shader.DisableKeyword是对Shader进行全局宏设置
    built-in Shader的源码中的StandardShaderGUI.cs可以看到unity是怎么处理对于StandardShader的keyword设置的
multi_compile和shader_feature的区别
    如果你在shader中添加了
    #pragma multi_compile  _A _B
    #pragma multi_compile  _C _D
  那么无论这些宏是否真的被用到,你的shader都会被Unity编译成四个variant,分别包含了_A _C,_A _D, _B _C,_B _D四种keyword组合的代码
    如果是
    #pragma shader_feature _A _B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值