2013-05-06 65 views
2

我目前正在計劃一個Web GL遊戲,並開始爲它製作模型,我需要知道是否有人知道如果說我的模型是1倍縮放,我的相機從對象中放大/縮小,我的模型變成了0.1倍的尺度,WGL引擎對這些模型發生了什麼樣的簡化?WebGL模型簡化

IE,如果我用一個三角形作爲一個例子,這裏是它在1X規模 triangle with many triangles inside at full scale

這裏是原始大小的10%的三角形,同時保留所有的複雜性(抱歉它是如此微弱)
Triangle at 10% scale with many triangles inside

雖然三角形看起來相同,但複雜性並非完全必要,可以將其簡化爲4個三角形以提高性能。

我明白,WebGL是一個狀態機,也許什麼也沒有發生;模型的複雜性保持不變,無論規模或狀態如何,但我如何解決這個問題以獲得最佳性能?

由於在1倍的規模下可能只有一個或很少的模型在視圖中,但當放大到0.1倍的規模時可能會有幾百個。意思是說,如果模型的複雜性太高,那麼性能會受到很大的打擊,遊戲變得無法響應/無用。

所有建議非常感謝。

回答

2

的WebGL不簡化爲您服務。你必須自己做。

一般來說,您根據距離顯示不同的手工模型,計算距相機的距離。在遠處,您顯示一個低細節模型,最後顯示一個高細節模型。有很多方法可以做到這一點,您選擇的方式取決於您。例如

  1. 使用不同的高聚模式關閉,低聚遠

    這是最簡單,最常用的方法。這種方法的問題在於,當引擎從使用低多邊形模型切換到高多邊形模型時,您經常會看到彈出窗口。在另一個答案中鏈接的three.js樣本使用這種技術。它創建一個LOD對象,它負責決定在哪個模型之間進行切換。您需要提供模型。

  2. 遠距離使用低聚物,在高聚物上褪色。一旦高聚合物完全遮蔽了低聚合一停止繪製低聚合物。

    俠盜使用這種技術

  3. 創建一個從高聚低聚和使用任意數量的技術之間變形。

    例如。

    1----2----3----4   1--------------4 
    | | | |   |    | 
    | | | |   |    |  
    4----5----6----7   |    | 
    | | | | <-----> |    | 
    | | | |   |    | 
    8----9----10---11   |    | 
    | | | |   |    | 
    | | | |   |    | 
    12---13---14---15   12-------------15 
    

    Jak和Daxter和Crash Team Racing(舊遊戲)使用上述結構。 遠處僅使用了點1,4,12,15。關閉所有使用的16點。 可將點2,3,4,5,6,8,9,10,11,13,14放置在任何地方。 的遠近距離的所有點被演變之間,從而在16點 目成爲4點網格。如果您演奏Jak和Daxter#1或Ratchet和Clank#1 ,您可以在演奏時看到這種變形。通過這些 遊戲的第二個版本,藝術家們很好地隱藏了變形。

  4. 繪製高聚合靠近,渲染高聚成紋理,並在 繪製廣告牌的距離。慢慢更新廣告牌(N幀而不是每幀)。 這是一種用於動畫對象的技巧。當他們很遠時,它被用於其他賽車手的Crash Team Racing 。

我確定還有很多其他人。有一些實時細分算法可以自動從高位自動生成low-poly或以某種其他形式(b樣條,meta-balls,細分曲面)描述模型,然後生成一定數量的多邊形。他們是否足夠快,併產生足夠好的結果取決於你。 大多數據我所知,AAA級遊戲不使用它們

+0

我喜歡建議3,這是建模工作量最少的那個;)但我想知道應用的紋理,當然在簡化過程中我會必須重新應用紋理,這與以簡化的級別重新繪製整個模型一樣昂貴?我可以看到簡化的好處,但除了複雜性之外呢? – 2013-05-06 21:11:26

+0

有3個渲染路徑。 1.畫低聚。 2.畫高聚。 3.在低和高之間繪製變形。在變形過程中,低多邊形和高多邊形紋理均被使用並交叉漸變。老實說,除非你是運送一個AAA冠軍,或者只是想這樣做,我建議現在使用#1並繼續前進。 – gman 2013-05-07 19:45:54

+0

我可能會這樣做,謝謝你的幫助! – 2013-05-07 21:44:00

0

搜索「鑲嵌」。使用它可以在網格中添加或減去三角形。

鑲嵌細分與LOD對象(詳細程度)密切相關。

比例係數就是網格所有頂點所乘的係數,並且您只需沿着軸拉伸您的網格即可。

看看這個three.js所例如: http://threejs.org/examples/webgl_lod.html(WASD /鼠標左右移動)