Three.js, compartiendo ShaderMaterial entre mallas pero con diferentes conjuntos de uniformes

Como dice el título, me gustaría reutilizar un ShaderMaterial dado para diferentes mallas, pero con un conjunto diferente de uniformes para cada malla (de hecho, algunos uniformes pueden variar entre las mallas, pero no necesariamente todos): ¿es posible?

Me parece una pérdida de recursos tener que crear un ShaderMaterial completo para cada malla en esta circunstancia, la idea es tener un solo programa de sombreado de vértice / fragmento pero configurarlo a través de diferentes uniformes, cuyos valores cambiarían dependiendo de la malla . Si creo un nuevo ShaderMaterial para cada malla, terminaré con muchas duplicaciones (programas de vértices + fragmentos + todos los demás miembros de datos de las clases Material / ShaderMaterial).

Si el motor era capaz de llamar a una devolución de llamada antes de dibujar una malla, podría cambiar los uniformes y lograr lo que quiero hacer. Otra posibilidad sería tener un "LiteShaderMaterial" que mantendría un puntero al ShaderMaterial compartido + solo los uniformes específicos para mi malla.

Tenga en cuenta que mi pregunta está relacionada con estaMuchas mallas con la misma geometría y material, ¿puedo cambiar sus colores? pero sigue siendo diferente, ya que la mayoría me preocupa el desperdicio de recursos; en cuanto al rendimiento, no creo que sea muy diferente entre tener múltiples ShaderMaterial o uno solo, ya que el motor debería ser lo suficientemente inteligente como para notar que todos Los materiales tienen los mismos programas y no los reenvían a la tarjeta gfx.

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta