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

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

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

NAiЯ пытался изменить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% падение.

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

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

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