幾何學

能在大部分裝置上順利執行的 3D 遊戲,都會先採用專為充分利用圖形處理器而設計的 3D 美術。本指南特別介紹行動裝置 3D 資產的最佳化作業和最佳做法,可提高遊戲效能,並盡可能降低耗電量。

本文部分內容以 Arm Limited 的著作為基礎,並受版權保護。

幾何圖形定義

幾何圖形 (或多邊形網格) 是構成 3D 物件形狀的頂點、邊緣和面的集合。可以是汽車、武器、環境、角色或任何遊戲中的視覺素材資源。

圖 1 立方體的頂點、邊和三角形。

幾何圖形由以下部分組成:

  • 頂點:vertex 的複數形式。這些點可定義 3D 空間中的物件結構。

  • 邊緣:用直線相連的兩個頂點。

  • 三角形:透過三條邊相連的三個頂點會建立一個三角形。有時也稱為多邊形或面。在 3DS Max、Maya 或 Blender 等 3D 軟體中,您通常會搭配使用四邊形。四邊形是一個四條邊的多邊形,更容易修改和使用。這些多邊形在轉譯後,會在螢幕上顯示為三角形。

請參閱下列各節,進一步瞭解幾何圖形:

三角形和多邊形使用方法

本節概略說明使用三角形和多邊形時的最佳做法。包含下列建議:

減少三角形數量

加入過多三角形後,遊戲效能將會降低。

盡可能使用最少數量的三角形。因此,我們建議您使用足量的三角形,滿足您的品質需求。建立手游內容時,請考慮效能影響。處理頂點的成本很高。頂點數越少,遊戲的整體效能就越高。此外,在沒有強大 GPU 的情況下,使用的三角形越少,可執行遊戲的裝置就會越多。

下圖顯示可以較少三角形來維持品質:

左邊的物件有 584 個三角形,而右側物件有 704 個三角形。

圖 2. 兩個三角形數量不同,但在著色模式下外觀相同的物件比較。左側物件的邊緣已移除,但未能產生輪廓。

在行動平台上,個別網格的頂點數量上限為 65,535 個。為了盡可能提高相容性,您必須維持在這個數字以下。

這項限制的原因是,所有 GPU 都只支援 16 位元索引,代表 0 到 65,535 個頂點。大多數 (但並非全部) 現代化 GPU 都支援 32 位元索引,代表 0 到 4,294,967,295 個頂點。如果您在使用 16 位元索引時超過支援的範圍,就會造成轉譯的幾何圖形缺失或錯誤。

一律在任何您想要發布的裝置 (而不是電腦顯示器) 上,查看及測試遊戲。某些細節層級較高的模型可能無法正確轉譯,甚至無法在行動裝置上顯示。

建議在前景物件上使用較多三角形,在背景物件上使用較少三角形。對於以靜態相機視角 (POV) 執行的遊戲來說,這種做法非常實用。以下範例說明如何對不同物件使用適當的細節。

前景物件的細節會以三角形建立。背景細節會烘焙到平面上。

圖 3. 這個範例顯示了前景物件的細節層級比背景物件的高。

模型可以使用的三角形數量上限視裝置型號和內容而定。如果螢幕上有多個物件,請減少每個模型使用的三角形數量。如果只顯示兩個或三個物件,則可使用更多三角形。

以下範例顯示了不同示範的兩個模型。Circuit VR 示範只有一個機器人角色。由於只有一個物件,機器人模型可以使用較多的三角形。另一個模型來自 Armies 示範。這個示範在每個影格中有數百名士兵,因此每個士兵使用的三角形較少。

圖 4. 比較兩種不同用途的三角形計數。左側的 CircuitVR 機器人有 11,000 個三角形,右側的 Armies 士兵有 360 個三角形。

三角形使用範例

下圖是 Armies 技術示範中使用的三角形數量範例。

在 Armies 示範 (也就是內建於 Unity 中的 64 位元行動裝置技術示範) 中,相機處於靜態狀態,且內含許多動畫角色。每個影格總共會轉譯約 210,000 個三角形。這個三角形數量可讓示範項目以每秒約 30 個影格 (FPS) 的速度穩定執行。

圖 5. 這是 Armies 技術示範的轉譯範例,其中顯示了使用的三角形數量。

情境中最大的物件 (炮塔) 約為 3,000 個三角形,因為這些物件占據螢幕的很大一部分。

這些角色各使用約 360 個三角形。因為數量太多,而且只有在一定距離才能看到,所以不會使用太多三角形。從相機 POV 來看很適宜。

圖 6. Armies 技術示範中,使用較少三角形的士兵的檢視畫面。

在重要區域使用三角形

在行動平台上,頂點的使用成本非常高。為避免浪費處理預算,請將頂點放在會影響遊戲視覺品質的區域。3D 物件上的小細節可能無法顯示在遊戲的最終畫面中。由於螢幕尺寸較小和 3D 物件的放置位置,可能無法看到微小的細節。

與其使用精細的細節,不如側重於使用大形狀構成輪廓。下圖為側重於輪廓的範例:

圖 7. 機器人周圍的紅線代表其輪廓。

我們建議在相機 POV 鮮少出現的區域使用較少的三角形。例如,車子底部或衣櫃背面。如果永遠不會看到物件的某個部分,請刪除物件的該部分。

請務必謹慎刪除物件的某個部分,否則可能會影響物件的可重用性。例如,如果您刪除資料表網格的底部,則使用者將在該表格倒置放置時看見已刪除的區段。

請不要使用高密度三角形網格建立小細節模型,使用紋理和法線圖取得精緻細節。以下範例顯示了有和沒有法線圖的同一網格。

圖 8. 套用及未套用法線圖的模型比較。

移除微三角形

微三角形是非常小的三角形,不代表情境的最終影像。

所有多邊形數量較多的 3D 物件在遠離相機時都會有微三角形問題。微三角形沒有業界標準定義,但微三角形通常可理解為最終圖像中小於 1 至 10 像素的三角形。微三角形效果不佳,因為 GPU 需要對所有這樣的三角形執行所有處理作業,即使其不會影響最終圖像。

微三角形是由下列兩種原因造成:

  • 細節過小,且包含許多三角形。
  • 距離相機較遠的物件,有很多三角形。

圖 9. 距離對微三角形的影響。

在圖 9 中,前景機器人沒有微三角形。背景機器人卻有,因為每個三角形的大小僅限於 1 至 10 像素。

圖 10. 精細模型之微三角形的比較。醒目顯示區域中的大部分三角形都太小,無法在手機上查看。

如果物件距離相機較遠,請使用細節層級 (LOD) 進行設定。這樣可以降低物件的複雜度,並簡化相關作業。結果是產生一個三角形密度較小的物件。

請不要用過多三角形來建立細節模型。使用紋理和法線圖取得這種精緻細節。您可以合併太小且對最終圖像沒有影響的頂點和三角形細節。

務必減少微三角形的數量,因為可能會影響記憶體頻寬。三角形越多,傳送到 GPU 的資料就會越多。在行動裝置上,這會影響電池續航力。提高耗電量可能會觸發熱節流,這會限制 GPU 的最大效能。

避免使用細長三角形

這些三角形在最終圖像中轉譯時,在單一維度中會小於 10 像素,而且會跨越螢幕很遠。細長三角形的處理成本通常比其他三角形的更高。

在下圖中,從遠處觀看時,柱子上的斜面有一個細長的三角形。近距離觀看這些斜面其實不是問題。

圖 11. 柱子上的斜面是一個細長的三角形。

如果可以,建議您移除所有物件的細長三角形。

對於閃亮的物件,細長三角形可能會在相機移動時導致光線閃爍。LOD 可協助您在物件遠離相機時移除細長三角形。

如果可以,請盡量讓所有三角形接近等邊。這能使三角形面積更大,邊緣更小。與較大的三角形相比,細長三角形的效果通常會更差。如要進一步瞭解三角形面積,請參閱「三角測量」。

細節層級

細節層級 (LOD) 是一種隨著物件離觀察者越來越遠而降低複雜性的方法。最常見的 LOD 形式涉及多個網格版本,其頂點逐漸變少。LOD 不僅可用於減少要處理的頂點數,還能避免微三角形的問題。對於放置在情境中較遠位置的物件,效果也會更好。

因此,建議您盡可能使用 LOD。將重點放在物件的輪廓上。最好將重點放在平面區域,以減少頂點數量。下圖說明機器人模型所套用之 LOD 的使用方式。

左邊的機器人最為細緻,且三角形數量最多。右側的機器人距離更遠,細節較少,且使用的三角形也較少。

圖 12. 用做 LOD 變更的頂點數量比較。

在圖 12 中,我們很難在遠處看出由 200 個三角形或 2,000 個三角形組成的同一個物件之間差異。具有較多三角形的物件會增加較高的資源成本,但在遠處觀看時,外觀不會得到改善。

圖 13. 三角形數量不同的遠處模型比較。

LOD 做為一種概念,同樣可以適用於著色器的複雜程度和紋理解析度。在較低的 LOD 下,可以透過更簡單的著色器和更少的紋理來使用不同的材質。此外,您也應該確保紋理具有 mipmap,這樣較低解析度的紋理等級會套用於遠處的物件。這些措施能提高效能,並同時會增加資料量。

對於相機和物件處於靜態的任何遊戲,我們不建議使用 LOD。LOD 最大的好處是適用於靠近和遠離相機的物件。靜態物件不會移動,因此 LOD 沒有優勢。

圖 14. 未使用 LOD 的 Armies 技術示範中的靜態相機情境。

LOD 比率

減少 LOD 的三角形數量時,請使用統一的比率。建議您將每個等級的三角形數量減少 50%。

請勿將 LOD 用於簡易物件。三角形數量較少的物件不適合使用 LOD。以下 Armies 技術示範中的範例顯示了使用靜態圖像和三角形數量較少的物件的遊戲外觀。

圖 15. LOD 降低時,各個模型的比較。

確認 LOD 等級在距相機適當距離處的變更。根據這些等級在遊戲中的使用方式進行分析。

圖 16. LOD 3 模型在近距離與預期距離的外觀比較。

物件擁有 LOD 數量的合理性並沒有用固定的數字進行界定,視物件大小和物件重要性而定。例如,動作遊戲中的角色或賽車遊戲中的汽車,其 LOD 等級可能會比樹木等小型背景物件的更高。

請注意,過高的 LOD 會消耗 CPU 資源。CPU 需要更多處理能力,才能決定要顯示的 LOD。LOD 也會消耗記憶體,進而增加檔案大小和 VRAM 使用量。建立和驗證 LOD 模型還需要額外的時間。

建立 LOD 網格的方法有兩種:手動和自動。

  • 您可以透過任何 3D 軟體手動建立 LOD 網格。
    • 為此,請移除邊緣迴圈或減少 3D 物件上的頂點數量。
    • 這樣美術人員就能在最大程度上控制最終產品,但可能耗時較長。
  • 系統可以自動建立 LOD 網格。
    • 您可以在 3D 套件 (例如 3DS Max 中的 ProOptimizer) 中使用修飾符,或在 Maya 中產生 LOD 網格。
    • 您可以使用 LOD 產生軟體,例如 Simplygon 或 InstaLOD。
    • 某些遊戲引擎具有自動 LOD 產生功能,可讓您建立及套用 LOD 網格。

最佳做法

遊戲中還有一些技巧可以減少遊戲所需的資源,同時維持圖像擬真度。

平滑群組或自訂頂點法線

使用平滑群組或自訂頂點法線來定義邊緣的硬度,並變更模型的外觀。平滑群組有助於在低多邊形藝術設計上進行更好的濃淡處理。平滑群組也會在烘焙時影響法線圖的 UV 島分裂和品質。

平滑群組的範例。左側的機器人會套用平滑群組。

圖 17. 有和沒有平滑群組的模型比較。

假如您在 3D 模型上實作平滑群組,則必須從 3D 軟體匯出,然後匯入引擎。

網格拓撲

建立新的 3D 素材資源時,請確保其拓撲整潔。潔淨的拓撲是讓角色和其他物件構成動畫或進行變更的關鍵。拓撲不需要做到完美。請注意,使用者不會看到線框,而且紋理和材質對於模型外觀的影響較大。

圖 18. Armies 技術示範中岩石的拓撲、線框和最終版本。

形狀放大

您可以放大部分形狀,讓模型更容易解讀。主要視遊戲的類型和樣式而定。由於行動裝置的螢幕較小,因此很難擷取某些非常小的形狀。將這些形狀放大,使用者即使在遠處也能清楚看到形狀。

舉例來說,您可以將角色的手放大,以便更容易看見。

圖 19. 為提高可見性以放大比例顯示的模型範例。