Много ячеек с одинаковой геометрией и материалом, могу ли я изменить их цвет?

У меня есть большое количество (~ 1000)THREE.Mesh объекты, которые были построены из того жеTHREE.Geometry а такжеTHREE.MeshPhongMaterial (у которого есть карта).

Я хотел бы подкрасить (покрасить) эти объекты индивидуально.

Наивно я пытался изменитьmesh.material.color свойство, но изменение этого свойства для любого из объектов изменяет цвет всех объектов одновременно. Это имеет смысл, поскольку существует только один материал, который используется всеми объектами.

Моей следующей идеей было создать отдельныйTHREE.MeshPhongMaterial для каждого объекта. Итак, теперь у меня есть большое количествоTHREE.Mesh объекты, которые были построены из того жеTHREE.Geometry, но у персонажаTHREE.MeshPhongMaterials (которые имеют ту же текстуру). Это позволяет мне менять цвета индивидуально, но производительность хуже. Chrome Profilier показывает, что приложение тратит значительное время на материальные вещи, такие как переключение текстур.

Цвет материала в шейдере просто однородный. Таким образом, обновление этой формы должно быть довольно быстрым.

вопрос: Есть ли способ переопределить цвет материала с уровня сетки?

Если бы это было так, я полагаю, что смог бы поделиться материалом между всеми моими объектами и вернуть свои результаты, при этом меняя цвета по отдельности.

[Я тестировал на v49 и v54, они имеют одинаковую производительность и деградацию]

Обновить: Я построил тестовый пример, и падение производительности из-за этого меньше, чем я думал, но все же измеримо.

Вот две ссылки:

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

В первом случае есть только два материала, во втором случае каждый куб имеет свой собственный материал. Я измеряю частоту кадров первого случая на этой машине 53 кадра в секунду, а частоту кадров второго составляет 46 кадров в секунду. Это примерно 15% падение.

В обоих случаях цвет материала каждого куба меняется в каждом кадре. В случае со многими материалами мы видим, что каждый куб приобретает свой собственный цвет, в случае только с двумя материалами мы видим, что все они имеют одинаковый цвет (как и ожидалось).

Ответы на вопрос(1)

Ваш ответ на вопрос