gpt4 book ai didi

Three.js,在网格之间共享ShaderMaterial但具有不同的统一集

转载 作者:行者123 更新时间:2023-12-04 23:04:35 25 4
gpt4 key购买 nike

正如标题所说,我想为不同的网格重用给定的 ShaderMaterial,但每个网格有一组不同的制服(事实上,有些制服可能在网格之间有所不同,但不一定是所有的):这可能吗?

在这种情况下,必须为每个网格创建一个完整的 ShaderMaterial 对我来说似乎是一种资源浪费,这个想法是有一个单一的顶点/片段着色器程序,但通过不同的制服来配置它,其值会根据网格而改变.如果我为每个网格创建一个新的 ShaderMaterial,我最终会得到很多重复(顶点 + 片段程序 + Material/ShaderMaterial 类的所有其他数据成员)。

如果引擎能够在绘制网格之前调用回调,我可以更改制服并实现我想要做的事情。另一种可能性是拥有一个“LiteShaderMaterial”,它会保存一个指向共享 ShaderMaterial 的指针 + 仅我的网格的特定制服。

请注意,我的问题与此有关 Many meshes with the same geometry and material, can I change their colors?但仍然不同,因为我最关心的是资源的浪费 - 性能方面我认为拥有多个 ShaderMaterial 或单个 ShaderMaterial 不会有太大不同,因为引擎应该足够聪明以注意到所有 Material 有相同的程序,不要重新发送到gfx卡。

谢谢

最佳答案

克隆 ShaderMaterial 时,通过引用复制属性和顶点/片段程序。只有制服是按值复制的,这就是你想要的。

这应该有效地工作。

您可以通过创建 ShaderMaterial 来向自己证明这一点。然后使用 ShaderMaterial.clone()为每个网格克隆它。然后为每个 Material 分配唯一的统一值。

在控制台中输入“render.info”。它应该显示 1 个程序。

三.js r.64

关于Three.js,在网格之间共享ShaderMaterial但具有不同的统一集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15597846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com