Muchas mallas con la misma geometría y material, ¿puedo cambiar sus colores?

Tengo un gran número (~ 1000) deTHREE.Mesh Objetos que han sido construidos a partir del mismo.THREE.Geometry yTHREE.MeshPhongMaterial (que tiene un mapa).

Me gustaría tintar (colorear) estos objetos individualmente.

De forma ingenua, intenté cambiar elmesh.material.color propiedad, pero el cambio de esta propiedad en cualquiera de los objetos cambia el color de todos los objetos a la vez. Esto tiene sentido, ya que solo hay un material que se comparte entre todos los objetos.

Mi siguiente idea fue crear unaTHREE.MeshPhongMaterial para cada objeto. Por lo tanto, ahora tengo un gran número deTHREE.Mesh Objetos que han sido construidos a partir del mismo.THREE.Geometry, pero tienen individualTHREE.MeshPhongMaterials (que comparten la misma textura). Esto me permite cambiar los colores individualmente, pero el rendimiento es peor. Chrome Profilier muestra que la aplicación está gastando mucho tiempo haciendo cosas materiales, como cambiar texturas.

El color del material es solo un uniforme en el shader. Por lo tanto, actualizar ese uniforme debería ser bastante rápido.

pregunta: ¿Hay alguna forma de anular un color de material desde el nivel de malla?

Si lo hubiera, creo que podría compartir el material entre todos mis objetos y recuperar mi rendimiento, sin dejar de cambiar los colores individualmente.

[He probado en v49 y v54, tienen un rendimiento y una degradación idénticos]

actualizar: He construido un caso de prueba, y la caída del rendimiento debido a esto es más pequeña de lo que pensaba, pero aún es medible.

Aquí hay dos enlaces:

http://danceliquid.com/docs/threejs/material-test/index.html?many-materials=falsehttp://danceliquid.com/docs/threejs/material-test/index.html?many-materials=true

En el primer caso, solo hay dos materiales, en el segundo caso, cada cubo tiene su propio material. Mido la tasa de cuadros del primer caso para ser 53 fps en esta máquina, y la tasa de cuadros del segundo es 46 fps. Esto es aproximadamente una caída del 15%.

En ambos casos, el color del material de cada cubo se cambia cada fotograma. En el caso de muchos materiales, en realidad vemos que cada cubo adquiere su propio color, en el caso de solo dos materiales, los vemos todos con el mismo color (como se esperaba).

Respuestas a la pregunta(2)

Su respuesta a la pregunta