Wiele siatek o tej samej geometrii i materiale, czy mogę zmienić ich kolory?

Mam dużą liczbę (~ 1000)THREE.Mesh obiekty zbudowane z tego samegoTHREE.Geometry iTHREE.MeshPhongMaterial (który ma mapę).

Chciałbym osobno zabarwić (zabarwić) te obiekty.

Naiwnie, próbowałem zmienićmesh.material.color właściwość, ale zmiana tej właściwości na dowolnym obiekcie zmienia kolor wszystkich obiektów jednocześnie. Ma to sens, ponieważ jest tylko jeden materiał, który jest wspólny dla wszystkich obiektów.

Moim następnym pomysłem było stworzenie osobnegoTHREE.MeshPhongMaterial dla każdego obiektu. Więc teraz mam dużą liczbęTHREE.Mesh obiekty zbudowane z tego samegoTHREE.Geometry, ale indywidualnyTHREE.MeshPhongMaterials (które mają tę samą teksturę). Dzięki temu mogę indywidualnie zmieniać kolory, ale wydajność jest gorsza. Profiler chromu pokazuje, że aplikacja spędza dużo czasu robiąc rzeczy materialne, takie jak przełączanie tekstur.

Kolor materiału jest tylko mundurem w cieniu. Aktualizacja tego munduru powinna być dość szybka.

pytanie: Czy istnieje sposób na zastąpienie koloru materiału z poziomu siatki?

Gdyby tak było, wierzę, że mógłbym podzielić się materiałem między wszystkie moje obiekty i odzyskać moją wydajność, jednocześnie zmieniając kolory indywidualnie.

[Testowałem na v49 i v54, mają identyczną wydajność i degradację]

aktualizacja: Zbudowałem przypadek testowy, a spadek wydajności z tego powodu jest mniejszy niż sądziłem, ale nadal jest wymierny.

Oto dwa linki:

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

W pierwszym przypadku są tylko dwa materiały, w drugim przypadku każda kostka ma swój własny materiał. Zmierzam prędkość klatek w pierwszym przypadku na 53 klatki na tym komputerze, a szybkość klatek na sekundę na 46 klatek na sekundę. To około 15% spadku.

W obu przypadkach kolor materiału każdej kostki zmienia się w każdej klatce. W przypadku wielu materiałów widzimy, że każda kostka ma swój własny kolor, w przypadku tylko dwóch materiałów widzimy, że wszystkie mają ten sam kolor (zgodnie z oczekiwaniami).

questionAnswers(2)

yourAnswerToTheQuestion