我有大量(〜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=false
- http://danceliquid.com/docs/threejs/material-test/index.html?many-materials=true
在第一種情況下,只有兩種材料,在第二種情況下每個立方體都有它自己的材料。我在這臺機器上測量第一種情況的幀率爲53fps,第二種情況的幀率爲46fps。這大約下降15%。
在這兩種情況下,每個立方體的材質顏色都會每幀更改一次。在許多材料的情況下,我們實際上看到每個立方體獲得它自己的顏色,在僅有兩種材料的情況下,我們看到它們都具有相同的顏色(如預期的那樣)。
呃,這聽起來像一個「bug」。如果你可以用r54重現問題,那麼如果你可以在github的問題部分報告它,那將是非常好的。 – mrdoob
謝謝@mrdoob。我添加了一個問題:https://github.com/mrdoob/three.js/issues/2916 – Harold