走進漢振
INTO HANCHINE
漢振分享 | 基于LOD技術優化3D渲染的實現
日期:2020年03月31日

細節層次(Levels of Detail,簡稱LOD)模型的概念,普遍認為當物體覆蓋屏幕較小區域時,可以使用該物體描述較粗的模型,并給出了一個用于可見面判定算法的幾何層次模型,以便對復雜場景進行快速繪制。1982年,Rubin結合光線跟蹤算法,提出了用復雜場景的層次來表示算法及相關的繪制算法,從而使計算機能以較少的時間繪制復雜場景。

LOD技術在不影響畫面視覺效果的條件下,通過逐次簡化景物的表面細節來減少場景的幾何復雜性,從而提高繪制算法的效率。該技術通常對每一原始多面體模型建立幾個不同逼近精度的幾何模型。與原模型相比,每個模型均保留了一定層次的細節。在繪制時,根據不同的標準選擇適當的層次模型來表示物體。

目前,LOD技術已廣泛地應用于實時圖像通信、交互式可視化、虛擬現實、地形表示、飛行模擬、碰撞檢測、及限時圖形繪制等領域,成為一項要害技術。很多造型軟件和VR開發系統都開始支持LOD模型表示。


Hinkler等的幾何優化方法檢測出共面或近似共面的三角面片,將這些三角面片合并為大的多邊形,然后用較少數目的三角形將這個多邊形重新三角化。這個方法的步驟是:


面片分類依據的是他們各自的法線之間的夾角。該算法的誤差衡量標準可以歸為全局誤差,但是由于它僅僅依據法線之間的夾角,其誤差評估準確性較差。它不能保證一定誤差限制。


幾何元素刪除法由局部幾何優化機制驅動,要計算每次刪除產生的近似誤差。

Schroeder的頂點刪除算法通過刪除滿足距離或者角度標準的頂點來減小三角網格的復雜度。刪除頂點留下的空洞要重新三角化填補。該算法速度快,但不能保證近似誤差。它估算局部誤差時,未考慮新面片同原始網格的聯系和誤差積累。

Hoppe的漸進網格算法包含基于邊折疊的網格簡化方法、能量函數優化和新的多分辨率表示。算法采用了單步和可逆的邊折疊操作,可以將整個簡化過程存入一個多分辨率數據結構(稱為漸進網格表示(PM))。PM方案由一個簡化網格Mk和一系列細化記錄(通過與從原始網格M0得到簡化網格Mk的簡化步驟的相反步驟得到), 這些細化記錄可以使網格Mk通過逐步求精得到任意精確度的網格Mi。在簡化過程中,將每條邊按照其折疊的能量代價排序得到一個優先級隊列,通過這個隊列實現邊折疊操作。該算法也是采用全局誤差度量。


Rossignac等的頂點聚類算法通過檢測且合并相鄰頂點的聚類來簡化網格。每個聚類被一個代表頂點取代,這個代表頂點可能是頂點聚類的中心或者是聚類中具有最大權值的頂點(定義頂點的權值是為了強調相對的視覺重要性)。然后,去除那些由于聚類操作引起的重疊或者退化的邊或者三角形。

算法簡化引入的誤差由用戶定義的準確度控制,這個標準用來驅動聚類尺寸的選擇。該算法實現簡單、速度快,但是沒有考慮到保持原始網格的拓撲和幾何結構,有可能生成非常粗糙的近似網格。


Turk的重新劃分算法先將一定數量的點分布到原有網格上 ,然后新點與老頂點生成一個中間網格,最后刪除中間網格中的老頂點,并對產生的多邊形區域進行局部三角化,形成以新點為頂點的三角形網格。其中分布新點采用排斥力算法,即先隨機分布新點,然后計算新點之間的排斥力,根據排斥力在網格上移動這些新點,使它們重新分布。排斥力的大小與新點之間的距離、新點所在三角形的曲率和面積有關。

這種方法對那些較光滑的模型是很有效的,但對于那些不光滑的模型 ,效果較差;由于根據排斥力重新分布新點,涉及到平面旋轉或投影,計算量和誤差都較大。


Eck等的基于小波變換的多分辨率模型使用了帶有修正項的基本網格,修正項稱為小波系數,用來表示模型在不同分辨率情況下的細節特征。算法的三個主要步驟:


此算法可以處理任意拓撲結構的網格,而且可以提供:有界誤差、緊湊的多分辨率表示和多分辨率尺度下的網格編輯。


漢振通過對底層opengl底層函數的封裝和優化,開發出了實用性更強的3D渲染庫,主要用于處理3D點云和模型數據的顯示和交互性操作,也提供部分3D數據的優化算法。利用到LOD技術,實現了對大數量級的點云數據和復雜的大型模型的優化顯示。不斷切換模型和點云的顆粒度,來實現更高效率的點云顯示,讓用戶操作過程中沒有受到數據量的拖累,極大的提高了用戶操作的體驗,也釋放了更多的計算機資源給用戶和開發人員。


對于模型而言,其實和點云的處理類似,不同的是,模型的各個頂點需要重新組合成面片,然后對不同層級的LOD模型進行重新的渲染顯示。從圖2、圖3、圖4中可以看到,模型的顆粒度變化可能看起來不明顯,但是坐標系下的LOD顆粒度變化明顯,通過不斷的拉近模型的距離,坐標系的網格明顯增加,同時將不在攝像機范圍內的渲染場景裁剪掉,來實現數據的渲染優化。


在點云數據密集的時候,將點云數據進行分別提煉,保留主要的點云數據,當對點云進行放大的時候,及時進行點云的切割和分離,并降低提煉的等級,顯示出顆粒度更高的LOD級別的顯示內容。如圖所示就是百萬級點云數據,不斷放大時,LOD細化的示意圖。通過有效的裁剪和LOD細化,將渲染的數據控制在合理的范圍內,當不斷地拉近點云時,將更多的細化點云數據,并且不斷裁剪場景視野外的內容,減輕渲染壓力,獲得性能上的提升。圖5,6,7,8,9就是各個LOD層級下的細化表現。


更多機器視覺分享,歡迎繼續關注“漢振智能”....


麻将视频技术视频教学 体彩湖北十一选五 福彩3d直选技巧 黑龙江22选5玩法 融资融券的股票会涨 重庆幸运农场规律公式 广东11选5遗漏任五一定牛 掌柜配资 河南体彩十一选五走势图表 北京11选五每期推荐号 湖北快3 18期开奖