正如标题所说,我想重复使用给定的ShaderMaterial用于不同的网格,但每个网格使用不同的制服集(实际上,一些制服可能在网格之间有所不同,但不一定都是不同的):是否可能?
在这种情况下,我必须为每个网格创建一个完整的ShaderMaterial似乎是浪费资源,这个想法是拥有一个顶点/片段着色器程序,但是通过不同的制服配置它,其值会根据网格而改变.如果我为每个网格创建一个新的ShaderMaterial,我将最终得到大量的重复(顶点+片段程序+ Material/ShaderMaterial类的所有其他数据成员).
如果引擎能够在绘制网格之前调用回调,我可以更改制服并实现我想要做的事情.另一种可能性是拥有一个"LiteShaderMaterial",它可以保存指向共享ShaderMaterial的指针+仅包含我网格的特定制服.
请注意,我的问题与此问题有关.许多具有相同几何和材质的网格,我可以更改它们的颜色吗?但仍然不同,因为我最担心的是资源的浪费 - 性能明智我不认为在拥有多个ShaderMaterial或单个ShaderMaterial之间会有很大不同,因为引擎应该足够聪明,注意所有材料具有相同的程序,不会重新发送到gfx卡.
谢谢
克隆a时ShaderMaterial,属性和顶点/片段程序通过引用复制.只有制服按值复制,这就是你想要的.
这应该有效.
你可以通过创建一个ShaderMaterial然后使用ShaderMaterial.clone()克隆每个网格来证明它.然后为每个材质指定唯一的均匀值.
在控制台中键入"render.info".它应该显示1个程序.
three.js r.64
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |