2013-04-08 56 views
1

我目前正在探索優化在Three.js中加載/生成大量對象所用時間的方法。這些對象的輸入是構成2D足跡的各個頂點。在Three.js中加載大量對象的最快方法?

我使用的初始方法是從各個頂點創建對象THREE.Shape,然後使用THREE.ExtrudeGeometry將2D形狀拉成3D對象。這樣做所有對象需要大約3500毫秒。

我研究過的第二種方法是使用JSON model format將生成的3D對象(從前面的方法)預導出爲JSON文件,然後在需要時導入該JSON文件,而不是在運行時生成對象。只需導入和加載此JSON表示大約需要3800毫秒,這比在運行時生成對象要長!

我想知道在Three.js中加載/生成對象的最快方法是什麼。我對如何加速THREE.Shape和擠出方法感到茫然,我不確定爲什麼JSON導入方法如此之慢(我認爲預生成幾何圖形將節省大量時間)。

有沒有其他方法可以加快速度?

+0

自定義數組緩衝區下載到緩衝幾何? http://threejs.org/examples/webgl_buffergeometry.html – 2013-04-08 13:05:18

+0

謝謝Ben。我以前看過緩衝幾何的東西,但對其實際使用還不夠了解。你知道在這種情況下(在我花費大量時間學習/構建解決方案之前)緩衝幾何圖形會更快嗎? – 2013-04-08 13:09:51

+0

它當然是一個虛擬的野獸,因爲它的原始頂點和痕跡而不是物體。不知道什麼會更好地在客戶端或通過網絡構建BufferedGeomerty,但是JSON非常羅嗦,所以如果您發送12.345679091的浮點數(12字節加逗號等)作爲Float32Array,它將爲4個字節。 對於加載,它已經在格式爲gfx卡(忽略可能的排序問題),所以在網絡流量後,您的加載或多或少已經完成。而對象構造必須創建大量的js對象,然後從中創建要加載的緩衝區。 – 2013-04-08 14:06:43

回答

2

我對你的結果並不感到驚訝。我敢打賭,你也會得到更大的內存空間與自定義幾何以及...

BufferedGeometry肯定會加快加載自定義幾何。但我不確定你會比在運行中生成幾何圖形更快。而這一代人的好處是,你可以對流程進行動畫處理,以便用戶看到場景在他們面前呈現。你可以打破你的自定義幾何體,做類似於我們在Verold Studio中加載多部分對象時所做的事情,以產生類似效果,但是對生成的場景有更多的控制。

我還建議你看看你的基準測試中的內存,CPU和網絡速度。針對您的特定配置進行優化可能會導致您找到一條可以提高性能的路徑,但不會爲您的用戶帶來好處。在方法中肯定存在折衷,您可以在服務器上進行更多的預計算以換取更多的網絡流量等。確保您獨立測量所有因素 - 而不僅僅是配置的速度。

相關問題