【LOD for 3D Graphics】LOD技術背景調查


1. LOD 的三種基礎框架

  1. Discrete LOD
  2. Continuous LOD
  3. View-Dependent LOD

1.1 Discrete LOD

我們將傳統的LOD方法稱爲離散LOD. 簡單來說就是一般理解上的 LOD, 離線生成一系列具有不同細節層次的對象, 然後在運行時選擇合適的LOD進行渲染. 在圖形程序中有廣泛應用.

由於是通過預處理生成 LOD, 無法預測運行時對模型的觀察方向, 所以在簡化模型的時候一般都是做均勻的簡化. 所以這種 LOD 有時也被稱爲各向同性或視線無關的 LOD(isotropic or view-independent LOD)

優勢: 運行時的處理非常簡單. 因爲是預處理, 所以 LOD 的生成也會比較靈活

1.2 Continuous LOD (Progressive LOD, 漸進式 LOD)

Continuous LOD 是 Discrete LOD 的一個改進. 簡化程序生成一個數據結構來對連續的細節範圍進行編碼, 然後運行時程序可以根據這個數據結構產生合適的細節層次.

優勢: 更好的顆粒度. 由於不是從幾個預先生成的層次中選擇, 所以不會產生不必要的多邊形.

1.3 View-Dependent LOD

View-Dependent LOD 又是對 Continuous LOD 的一個補充, 在 Continuous LOD 的基礎上再結合當前的視角選擇更加合適的 LOD 層級. 因此這種 LOD 是各向異性的. 比如一個模型距離攝像機比較近的部分擁有比遠處更高的"分辨率"

優勢: 在 Continuous LOD 的基礎上進一步優化 LOD 顆粒度. 而且諸如像地形這種非常巨大的模型, 不使用 View-Dependent LOD 通常無法進行簡化. 基於視圖的LOD可以實現交互式渲染, 而無需人工干預或進行額外的分割處理.

1.4 LOD 實踐

儘管 Continuous LOD 和 View-Dependent LOD 有好處, 但是傳統的 Discrete LOD 依舊被廣泛應用. 前兩種方法雖然有好處, 但是缺點同樣明顯. 他們需要在運行時進行估算, 簡化, 優化模型等等操作, 而用來編碼的數據結構也同樣需要佔用額外的內存.


2. LOD 選擇因素

很明顯, 對於 LOD 技術而言最重要的問題是什麼時候切換到分辨率更低或更高的模型上. 直觀上距離越遠或者越小的模型應該使用越低的分辨率. 這看上去很簡單, 但其實一個模型到底需要多小或者多遠時就要進行 LOD 切換並不是那麼容易確定. 接下來我們分析幾種影響 LOD 選擇的因素.

2.1 距離

劃定不同的距離範圍閾值, 根據距離, 使用不同的 LOD 層級. 根據距離選擇 LOD 是直接而簡單的, 運行時開銷也比較小. 但是儘管這很簡單, 但是依然有一些缺點. 比如計算距離時選取不同的點則會產生不同的結果, 模型的縮放, 透視投影的參數等原因會導致原先設置的值失效.

最佳的解決方案是計算到距離觀察者最近的物體上的點的距離.

2.2 尺寸

Distance-based 使用空間上的距離來選擇 LOD 層級. 由於物體距離觀察者越遠, 在屏幕上投影的面積越小, 所以與 Distance-based 類似, Size-based 使用一系列尺寸範圍閾值, 根據物體投影到屏幕上的覆蓋面積, 選擇不同的 LOD 層級.

Size-based 技術避免了 Distance-based 的一些問題. 比如縮放, 投影等.

Size-based 提供了更加通用和準確的手段來篩選 LOD 層級, 但是代價就是相較於 Distance-based 計算開銷要更大, 一般會計算物體包圍盒八個頂點投影到屏幕的變換, 然後再計算出 2D 包圍盒的面積.

另外他也有自身的問題, 比如一個旋轉的薄片模型, 其投影到屏幕的面積在旋轉時會急劇變化, 這對 LOD 層級的選擇會造成一定的影響. 使用包圍球而不是 AxisAlignedBoundBox 可以減小這種特殊情況的影響. 但是由於包圍球對模型的擬合程度較差, LOD 層級的選擇會比較保守. 已經有很多的研究人員使用更加複雜的邊界體積來提供更好的模型擬合.

2.3 優先(Priority)

場景中某些物體具有獨特的重要性, 對其進行 LOD 降級甚至剔除會大幅影響場景的視覺表現. 我們可以通過優先級設置來控制特定物體的 LOD 不發生過分的降級.

2.4 滯後(Hysteresis)

Hysteresis 是指當對象移動到比閾值更遠一點的位置時再切換到低層次 LOD(或者當對象移動到比閾值更近一點的位置時再切換到高層次 LOD). 這樣做是爲了減少對象在閾值附近徘徊, LOD 在兩個層級之間不停切換導致的閃爍.

有研究人員發現滯後的數值設置爲每一個 LOD 距離範圍的 10% 具有比較好的效果.

2.5 感性因素(Perceptual Factors)

研究人員已經觀察到3D圖形系統應該更多地基於人類視覺系統的工作原理,而不是針孔相機的工作原理。在計算機圖形學中通常會忽略許多可能影響我們在不同情況下可以感知的細節量的感知因素。例如,對於周圍視覺中的物體或在視線中快速移動的物體,我們可以感知的細節較少。因此,我們可以想象在這種情況下降低對象的分辨率,提高幀速率而不會出現明顯的退化。


3. 遊戲優化

3.1 遊戲環境

  1. 穩定的幀率
  2. 緊張的內存資源
  3. 實例化, Instantiation, 創建一個cache, 相同的對象只引用cache而沒有自身的內存佔用
  4. 可擴展平臺, 指不同性能平臺的適配, 比如添加bias, 設置最高訪問層級等手段
  5. 填充率與三角形率, 面數瓶頸的情況下, LOD將帶來明顯的收益
  6. 平均三角形尺寸, 少量的大三角形會將更多的負擔轉移到像素後端, 而大量的小三角形將首先增加幾何前端負擔, 平均三角形尺寸用來指導前後端負載平衡.

3.2 LOD 在遊戲中的應用

3.2.1 Discrete LOD

  1. 離線生成高可用的 LOD
  2. 共享頂點數據使用多組索引, 可以減少內存的消耗
  3. 不共享頂點數據則帶來 LOD 不同層級之間模型的靈活性提升
  4. 自動vs手動, 離散 LOD 可以讓美術人員定製每一個 LOD 層級, 但是如果使用共享頂點數據技術則對美術人員製作底層 LOD 模型的操作有所要求. 問題是美術使用的建模工具很可能不支持這種操作, 這是就需要找到一個能讓遊戲性能和美術效果都打到要求的自動模型簡化工具. 這一複雜性也是不共享頂點數據時的優勢.

3.2.2 Continuous LOD

連續 LOD 在現階段來看一般用於地形 LOD, 與基於離散 LOD 的應用場景比較, 可以說是另一個領域, 涉及到的問題差異比較大, 做到的時候再議.

3.2.3 陰影 LOD

擁有 LOD 之後, 實時陰影可以使用某一低層級的 LOD 模型來生成, 在不產生明顯穿幫的前提下可以在一定程度上加速陰影計算

3.3 非Geometry LOD

3.3.1 Per-Pixel Costs

性能優化我們主要着眼於兩種優化: Geometry 處理和像素填充率. 我們到現在爲止討論的方案都是在保證像素填充不變的情況下降低 Geometry 處理的消耗, 幸運的是當對象變遠的時候在屏幕上會自然而然的變小, 從而降低像素填充率. 在這種自然減少的優化力度還不夠的時候可以考慮 Shader LOD 技術.

每像素成本雖然受平臺,設備等因素影響比較大, 但是仍然可以做出一些一般性結論. 比如在支持多重紋理的平臺上, 繪製單個像素的成本隨引用的紋理數量線性增加或減少. 因此訪問四個紋理的pixel shader幾乎比訪問一個紋理的pixel shader慢四倍. 另外切換shader造成的狀態切換也會導致一定的消耗.

因此可以爲着色shader添加多條code path, 每一個path表示一層LOD. 不斷減少shader中的效果, 在極遠處甚至能夠降低爲輸出純色, 這是最快的像素填充方法.

3.3.2 Effect Scaling

比實時如陰影, 在近距離可以生成高質量陰影, 稍遠出可以使用預先生成好的大致輪廓生成陰影, 再遠處可以直接替換爲陰影片, 極遠處直接關閉陰影. 所有這些都是有效的陰影生成方法,但是隻有在近距離時才能完全欣賞到更精確的效果。正如應用於對象的着色器可以隨着距離的增加而退化一樣,當對象的重要度降低時,應用於對象的效果也可以退化或消除.

例子特效也是同樣的道理, 在近處用 1000 個 billboard 模擬的精緻煙霧效果, 在遠處可以用 100 個稍大的 billboard 模擬而無需在意細節上的損失.

3.3.3 Lighting LOD

Geometry LOD致力於降低頂點和麪的數量, 這對每個頂點的光照計算沒有優化, 當使用像素光照的時候甚至幾乎沒有任何作用. Lighting LOD 則致力於處理這種情況.

一般的正向渲染引擎在計算光照時, 光源的數量會極大的影響效率, 所以引擎會限制同時作用於一個模型的光的數量. 但是隨着模型變得越來越遠, 降低最大受光數量限制也是有效的. 由於對象遠離觀察者導致受光越來越少, 這時可以將光的貢獻平均到環境光中, 以此降低模型遠離時越來越暗所帶來的突兀感.

另外也可以在模型遠離時將複雜的光照計算替換爲更簡單近似. 比如將 pbr 光照替換爲簡單的 Lambert 光照, 點光替換爲方向光, 甚至最終降級爲環境光, 在極遠處完全消除照明的成本.

3.3.4 Transformation LOD

無論是GPU蒙皮還是CPU蒙皮, 頂點在進行變換的時候都是由若干個矩陣(通常不大於4)控制的. 同樣的, 在模型遠離的時候, 我們可以通過忽略權重較低的矩陣, 限制起作用矩陣的數量等手段來降低頂點變換造成的損耗.

3.3.5 Object Priority

遊戲中不同的物體通常可以設定不同的優先級, 比如裝飾品, 地面上的諸如碎石灌木的小物件等都可以將優先級設置的比較低, 用更爲強勢的 LOD 進行處理. 由於他們本來就不佔據視覺主體, 所以不會有明顯的穿幫.

3.4 替身

旨在用各種方式方法(預處理 or 實時都可以)生成基於圖片的替身片, 用來代替遠處的模型渲染.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章