Ho un numero elevato (~ 1000) di THREE.Mesh
oggetti che sono stati costruiti dallo stesso THREE.Geometry
e THREE.MeshPhongMaterial
(che ha una mappa).Molte maglie con la stessa geometria e materiale, posso cambiare i loro colori?
Vorrei colorare questi oggetti singolarmente.
Naïvely, ho provato a modificare la proprietà mesh.material.color
, ma la modifica di questa proprietà su uno qualsiasi degli oggetti cambia il colore di tutti gli oggetti contemporaneamente. Questo ha senso, dal momento che c'è un solo materiale che è condiviso tra tutti gli oggetti.
La mia prossima idea era quella di creare uno THREE.MeshPhongMaterial
separato per ciascun oggetto. Quindi, ora ho un gran numero di oggetti THREE.Mesh
che sono stati costruiti dallo stesso THREE.Geometry
, ma hanno singoli THREE.MeshPhongMaterials
(che condividono la stessa trama). Questo mi permette di cambiare i colori individualmente, ma la performance è peggiore. Il chrome profiloer mostra che l'app sta spendendo molto tempo a fare cose materiali come cambiare textures.
Il colore del materiale è solo un'uniforme nello shader. Quindi, aggiornare quell'uniforme dovrebbe essere piuttosto veloce.
domanda: C'è un modo per ignorare un colore del materiale dal livello di mesh?
Se ci fosse, credo che potrei condividere il materiale tra tutti i miei oggetti e riprendere le mie prestazioni, mentre cambio ancora i colori individualmente.
[Ho testato su v49 e V54, hanno prestazioni identiche e degradazione]
aggiornamento: Ho costruito un banco di prova, e la caduta di prestazioni a causa di questo è inferiore ho pensato che fosse, ma è ancora misurabile.
Qui ci sono due link:
- http://danceliquid.com/docs/threejs/material-test/index.html?many-materials=false
- http://danceliquid.com/docs/threejs/material-test/index.html?many-materials=true
Nel primo caso, ci sono solo due materiali, nel secondo caso ogni cubo ha il proprio materiale. Misuro il framerate del primo caso per essere 53fps su questa macchina, e il framerate del secondo è 46fps. Si tratta di un calo del 15%.
In entrambi i casi, il colore del materiale di ogni cubo viene modificato ogni fotogramma. Nel caso di molti materiali, vediamo effettivamente ogni cubo ottenere il proprio colore, nel caso di soli due materiali, li vediamo tutti con lo stesso colore (come previsto).
Uhm, sembra un "bug". Se riesci a riprodurre il problema con r54 sarebbe bello se potessi segnalarlo nella sezione dei problemi su github. – mrdoob
Grazie a @mrdoob. Ho aggiunto un problema: https://github.com/mrdoob/three.js/issues/2916 – Harold