官方地址
https://docs.unity3d.com/cn/2022.2/Manual/SL-MultipleProgramVariants.html
教程可以看这里
https://www.jianshu.com/p/48ad75f0b4b9
https://www.jianshu.com/p/3e6b84317097
变种用我自己的理解就是
能用程序控制的shader
举个例子
这里声明了 a b c d
四个变量(其实是开关 下面会说)
记住 #pragma multi_compile 必须放在 CGPROGRAM 下面
在c#程序里
Shader.EnableKeyword("D");
就可以了
点击shader文件
可以看到这里 点那个按钮 会自动编译shader并打开shader文件
在打开的文件里面你会找到
Keywords: A
Keywords: B
Keywords: C
Keywords: D
等内容
这里显示一共有多少个变体
也可以点show 他会告诉你具体有哪些
也会显示这些内容
加完以后 无法刷新 可以点击
重新加载
那如果这样声明呢
你会发现编译后的文件显示的是这样的
Keywords: A EE
Keywords: A FF
Keywords: B FF
Keywords: B EE
Keywords: C FF
Keywords: C EE
Keywords: D EE
Keywords: D FF
看见了没
他一共生成了 4 * 2 共计 8个
这就是unity 优化编译的方式
记住
指定的第一个关键字是默认生效的,即默认使用变体A和EE
shader_feature的话 作用是一样的
不过他会删除 没有材质引用过的shader
如果没引用过的 也可以放在下面这个地方
Always Included Shaders
你也可以
声明的时候用这个
__和字母中间有空格
这样只需占用一个变量位置
但依然是两个shader变体 一个是非A 一个是A
你可以用代码控制
Shader.EnableKeyword(“A”);
Shader.DisableKeyword(“A”);
如果代码不设置 那么默认就是非A
这个是全局使用的 也就说 设置了这个 全局用到这个变量的地方都会有影响
也可以 声明shaer的局部变量
#pragma multi_compile_local __ A
设置的时候需要用
Material.EnableKeyword
全局和局部声明了同样的名字
优先用局部的
var m = this.GetComponent<MeshRenderer>();
m.material.EnableKeyword("A");
关于keyworkd的限制
2022版unity是这么说的
官方文档看这里
https://docs.unity3d.com/cn/2022.2/Manual/shader-keywords.html#keyword-limits
Unity can use up to 4,294,967,294 global shader keywords. Individual shaders and compute shaders can use up to 65,534 local shader keywords. These totals include keywords used for variants, and keywords used for dynamic branching.
Every keyword declared in the shader source file and its dependencies count towards this limit. Dependencies include Passes that the shader includes with UsePass, and fallbacks.
If Unity encounters a shader keyword with the same name multiple times, it only counts towards the limit once.
If a shader uses more than 128 keywords in total, it incurs a small runtime performance penalty; therefore, it is best to keep the number of keywords low. Unity always reserves 4 keywords per shader.
反正就是节省点使用
创建shader的时候 你会发现这么个东西
这是shader 变体收集器
假如shader后是这样的
点加号可以看到
就不详细讲解了
可以看开头的教程链接
还可以
https://github.com/crossous/SocoTools
也可以在这里 先clear
然后玩一遍游戏
再 save to asset 成一个文件
不过这个不是特别准。文章来源:https://www.toymoban.com/news/detail-659034.html
可以看看这个大佬的工具
https://github.com/crossous/SocoTools文章来源地址https://www.toymoban.com/news/detail-659034.html
到了这里,关于Unity Shader variants (shader 变体)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!