地形材质(用BlendTexture混合多张贴图)使用条件宏编译时,用什么样的做法最好?
一个最大4张贴图的地形Shader,如果希望按需选择单贴图,双贴图,三贴图,四贴图的版本,只需要4个变体那是可以接受的。但是如果想避免插值产生的接缝问题,就要让A贴图永远用r通道,B贴图永远用b通道的做法,这样再两两组合的话,就需要15个变体了,这就让人有点难以接受。内存和Parse的时间都是可观的,好处也只是节约个别情况多余的纹理取样和乘法……
或许,我应该用multi_compile而非shader_feature?这样起码不会生成多余的变体,但会有同时编译新变体的卡顿隐患。
或者,我还是只根据贴图数量选择变体,接缝问题用隔开一个像素采样解决?(如果有不规则地块就比较难做了,尤其是我是想跑脚本自动根据BlendTexture的具体情况拆分地形网格的,用这个方案说白了就是要放弃)
这也是常见需求了,虽然貌似现在通常做法都是限定数量选择贴图然后分别刷地形的样子,不知道有没有啥更smart一点的做法,还是说现在这种做法就已经是最优的了?
始终存在接缝问题啊,仔细看能看出来的。
另外我还不太明白使用条件宏时系统具体的做法。它是把整个Shader克隆一个新版本,还是仅仅克隆标记的那一段?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
比如同一张贴图B,一部分模型权重值在绿色通道上,一部分模型权重值在蓝色通道上,这样交界处就要从蓝通道调到绿通道,还会和其他数据混合。
题主提到的“接缝问题”能简单说下是什么原因造成的吗?
关于变体数的问题,是不是只要能做到:刷地形时纹理的顺序按优先级来放的话(单贴图时用第一张,双贴图时用第一二张...),就只需要4个变体,而不需要两两组合了呢?
另外,增加条件宏会创建一个(组)新版本的shader的,这个可以在查看预编译版本时能够看到。
明白了,这种情况产生的接缝,看上去还真只能从制作上来避免了...