正如标题所说,我想为不同的网格重复使用给定的ShaderMaterial,但每个网格都有不同的uniforms集合(实际上,某些uniforms可能会在网格之间变化,但不一定是全部):这可行吗?
对我来说,必须为每个网格创建一个完整的ShaderMaterial在这种情况下似乎是浪费资源的,因为我的想法是拥有一个单独的顶点/片段着色器程序,但通过不同的uniforms进行配置,它们的值将根据网格而变化。如果我为每个网格创建一个新的ShaderMaterial,我最终将得到大量的重复(顶点+片段程序+材料/ShaderMaterial类的所有其他数据成员)。
如果引擎能够在绘制网格之前调用回调函数,我可以更改uniforms并实现我想要做的事情。另一个可能性是拥有“LiteShaderMaterial”,它将持有指向共享ShaderMaterial的指针+仅适用于我的网格的特定uniforms。
请注意,我的问题与此相关:Many meshes with the same geometry and material, can I change their colors? 但仍然不同,因为我主要关心资源浪费 - 在性能方面,我认为多个ShaderMaterial或单个ShaderMaterial之间的差异不大,因为引擎应该足够聪明,注意到所有材料都具有相同的程序,并且不会重新发送它们到gfx卡。
谢谢。
对我来说,必须为每个网格创建一个完整的ShaderMaterial在这种情况下似乎是浪费资源的,因为我的想法是拥有一个单独的顶点/片段着色器程序,但通过不同的uniforms进行配置,它们的值将根据网格而变化。如果我为每个网格创建一个新的ShaderMaterial,我最终将得到大量的重复(顶点+片段程序+材料/ShaderMaterial类的所有其他数据成员)。
如果引擎能够在绘制网格之前调用回调函数,我可以更改uniforms并实现我想要做的事情。另一个可能性是拥有“LiteShaderMaterial”,它将持有指向共享ShaderMaterial的指针+仅适用于我的网格的特定uniforms。
请注意,我的问题与此相关:Many meshes with the same geometry and material, can I change their colors? 但仍然不同,因为我主要关心资源浪费 - 在性能方面,我认为多个ShaderMaterial或单个ShaderMaterial之间的差异不大,因为引擎应该足够聪明,注意到所有材料都具有相同的程序,并且不会重新发送它们到gfx卡。
谢谢。
object1.foo = "foo"; object2.foo = object1.foo
,那么内存中只会有一个字符串实例吗?这个有证据吗? - trusktr