【Shader】变体keyword的声明

43 篇文章 28 订阅

1、shader_feature_local声明方式

带_local只在局部(自己所在的shader生效)

与multi_compile_local和multi_compile区别:

变体是局部的所以不会增加全局变体的数量,全局变体会受限制在几十个以内,所以当你确实不需要全局时 应当尽可能地使用_local的。(multi_compile_local同理)

最关键区别:shader_feature声明的变体 它必须要在材质球默认激活才会打到游戏包体里,如果默认没有激活,在打出包体后会找不到这个变体。而multi_compile(_local)声明的变体都会全部打进去。

如果发现变体不生效,基本可以检查是否默认开启,可以将全部shader_feature的默认开启 或 改成multi_compile(_local)声明。或者强制将一个带有开启shader_feature声明变体的shader拖拽进"always included shaders"列表。

2、shader_feature声明方式(不在阐述)

3、multi_compile_local声明(不在阐述)

带_local只在局部(自己所在的shader生效)

4、multi_compile声明(不在阐述)

5、坑爹点:

代码使用

[Toggle(_FLOWLIGHT)]
_EnableFlowLight("Enable Flow Light", Int) = 0

使用了一个Toggle去开启/关闭变体_FLOWLIGHT。

在C#代码里直接去写SetInt("_EnableFlowLight", 1)或SetInt("_EnableFlowLight", 0)都是无法正常激活或关闭变体_FLOWLIGHT的。

必须使用Material的EnableKeyword和DisableKeyword才可行。

不过应该也有办法能刷新材质球状态可能就会切到正确的状态,因为Insperator窗口的toggle已经是设置成正确的状态了。我懒得找了怎么刷了,反正就必须要使用这2个API才能正常设置变体。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值