Unity大密度建築場景載入解決方案
現在虛擬城市模擬,以及軍事模擬專案越來越多,開發此類專案,首先面對的一個比較棘手的問題是記憶體管理,城市中的建築物特別多,這些建築物的面數和貼圖都要被加到記憶體中的,記憶體有自己的峰值,超過了就要崩掉,所以記憶體的優化是必須要面對以及解決的問題。
Unity官方提供了Occlusion Culling的裁剪操作,網上有很多文章對它做了相關介紹,因為它是Unity自身提供的,對於我們程式設計師來說就是一個黑盒子,並不利於我們自己去進一步的優化,最好的方式就是自己通過程式碼重新實現一個Occlusion Culling演算法,當然對於城市模擬只做Occlusion Culling是不能完全解決問題的,我們需要從幾個方面入手搞定它,本篇博文就給讀者介紹這些針對密集建築物的優化。下面先看看虛擬模擬的場景:
面對這麼複雜的場景,我們該如何去解決呢?本篇部落格教給開發者解決問題的方法,我們會從五個方面來實現我們的密集建築物解決方案。
AutoLOD
攝像機是用來裁剪的,我們可以設定攝像機的遠裁剪面距離做一些優化操作,當然如果是在飛行模擬,這種方法是不可取的,因為我們要求視野是足夠大的,這樣攝像機視錐體內的物體肯定會很多的,效率就會下降,解決這個問題很自然的想到LOD演算法,虛擬場景中的建築是非常多的,我們不可能讓美術幫我們把每個建築都進行減面處理,工作量是相當大的,LOD是根據攝像機的距離遠近相應的顯示不同面數的建築物,我們需要想一種能夠自動幫我做LOD處理的演算法,AutoLOD就是為解決這個問題而生的。LOD模型顯示如下所示:
AutoLOD是Unity官方為我們提供了一個比較好的外掛,可以幫我們自動實現LOD演算法,進而對場景中的建築物進行優化,程式碼下載地址:
https://github.com/Unity-Technologies/AutoLOD
將其程式碼匯入到專案工程中後,然後需要我們做一些設定操作:
AutoLOD實現的效率比較高,佔的視訊記憶體少,測試的結果如下所示:
其實我們還可以找到一種更好的演算法,結合AutoLOD演算法一起優化建築物的面數以及材質,也是第二個步驟要講解的內容——Amplify Impostors外掛,下面介紹Amplify Impostors外掛。
Amplify Impostors
這個是Asset store提供的解決方案,它的基本原理是根據攝像機的距離,將原物體生成一個模擬物體,模擬物體面數非常少的,外形跟原物體幾乎是一樣的,而且還可以旋轉,縮放,位移,並且可以投影,效果如下所示:
模擬物件的生成,我們可以使用GPU例項化,該技術非常適合用於移動端,它對於面數的優化非常好,執行效率測試如下所示:
在實際專案執行中,看一下樹木模型實現的效果圖如下所示:
除了對模型的優化,我們還可以對紋理圖片進行優化,對應的是Amplify Texture。
程式碼下載地址:
連結:https://pan.baidu.com/s/1VKRwmn7QCzjIM0mqnq0RCA 密碼:yrko
Amplify Texture
Amplify Texture是一種紋理虛擬化,該技術可以繞過常見的紋理大小,數量和視訊記憶體限制,而不會影響質量,效能或大小。 使用Unity 2017,每個紋理最高可達16384 x 16384畫素。該技術處理幾百張貼圖都沒有任何問題。
虛擬紋理的工作原理是將所有紋理切割成可管理的圖塊(或頁面),並將它們儲存在針對流媒體自定義資料檔案中; 在執行時, Amplify Texture始終使用可用的最大解析度虛擬化紋理,無論是8k或16k紋理(Unity 2017每紋理32k),原始大小永遠不會受到影響,虛擬貼圖其實就是一張大的圖集,中間會生成一張資料索引檔案,它存放了圖片的索引,大小,針對模型的ID資訊等等。根據模型的載入通過索引檔案在虛擬貼圖上查詢對應模型的貼圖,將對應的虛擬貼圖載入到記憶體中,將紋理對映到模型上面。
技術實現參考網址:http://amplify.pt/unity/amplify-texture-2/
關於模型的優化技術差不多就講完了,運用上面的技術完全可以幫助我們處理密集型建築模型。下面還有一項重要的技術講解,也就是我們說的場景裁剪,我們使用的演算法也是Occlusion Culling。
Occlusion Culling
Occlusion Culling也是一種遮擋裁剪,可以將遮擋住的物體直接從記憶體中移除,或者從攝像機可視空間移除,這裡講的演算法與Unity自帶的Occlusion Culling是不一樣的,該演算法尤其對建築物密集的場景非常實用,先看看Occlusion Culling是如何工作的?如下圖所示:
在此介紹兩種利用Occlusion Culling方法解決遮擋剔除的問題,首先介紹的方法是
Potentially visible set
參考網址:https://en.wikipedia.org/wiki/Potentially_visible_set
具體實現步驟如下所示:
1、地圖切割成Tile,Tile切割成Portal(視口)和Cell(大物件、中物件、小物件);
2、檢測場景物件所屬Cell,一個物件可以屬於多個Cell;
3、 利用蒙特卡洛方法Portal隨機一些起點,Cell隨機一些終點(根據大、中、小隨機不同數量的點);
4、 雙層遍歷每個Portal和Cell,射線檢測是否阻擋,如果阻擋,判斷阻擋物是否被在當前檢測Cell內,如果是,Cell可見;(注,當前設定兩個高度檢測)
5、 儲存檢測資料,執行時載入解析,根據玩家位置檢測當前Portal,然後遍歷場景所有Cell內Item,判斷顯示和隱藏;
總之:
此pvs方案相比於Unity OcclusionCulling,更適合大地圖比如5000米x5000米,pvs生成data基於Tile,支援動態載入,佔用記憶體忽略不計,同時CPU消耗也極少;
先看看沒有使用Occlusion Culling裁剪演算法之前,實現效果圖如下所示:
應用了Occlusion Culling 演算法後,看看效果如下所示:
通過上面兩幅圖的資料對比,可以看到Draw Call明顯減少了,優化效果還是非常明顯的,再看看另一種Occlusion Culling 演算法實現的效果。
IOC演算法
先把該演算法能實現的功能給讀者介紹一下:
1、實現建築物的裁剪
2、粒子效應遮擋剔除
3、燈光遮擋剔除
4、完全支援實時陰影
5、完全支援動態批處理
6、支援移動裝置上的密集場景處理
我們先看看對特效的遮擋剔除優化,在優化前的場景渲染,如下圖所示:
優化後的遮擋剔除效果,如下圖所示:
通過兩幅圖對比可以看到,Draw Call減少了一半多,當然我們還可以進一步去優化。
該演算法對於密集型建築同樣好用,同樣先展示一個沒有使用任何裁剪演算法的有密集物體的場景,Draw Call數量是非常大的。如下圖所示:
經過我們的Occlusion Culling演算法後的裁剪效果,如下圖所示:
Draw Call數量對比也是非常明顯的,還是有效果的。
總結:
以上給讀者介紹了針對密集型建築使用的解決方案,該方法在PC端,移動端都是適用的,最後把程式碼奉上,參考案例程式碼可以將其應用到自己的專案開發中。
程式碼下載地址:
連結:https://pan.baidu.com/s/1Uhp-eejG_7rA_hXz42cBVg 密碼:5ehf
相關文章
- [Unity-24] Unity的四種載入場景的方法Unity
- 五大分散式場景解決方案分散式
- 大話業務場景與解決方案-做任務
- 從宋代建築到場景原畫
- 直播場景影片和特效解決方案特效
- 建築施工企業智慧防疫平臺解決方案
- 數商雲採購系統解決方案 | 建築工程行業採購管理之招標業務場景應用行業
- 建築建材行業採購平臺解決方案行業
- 建築工程行業採購管理平臺解決方案行業
- 科拓AR尋車解決方案入駐亞洲最大下沉式建築 -- 成都SKP
- unity場景匯入iOSAPP求助UnityiOSAPP
- unity入門—資源匯入與場景建立Unity
- 建築師解構遊戲關卡——遊戲研發中的場景需求遊戲
- 高密度無線覆蓋解決方案
- PHP 併發場景的幾種解決方案PHP
- 聚焦五大場景,騰訊安全推出“可信城市”區塊鏈解決方案區塊鏈
- 喜訊丨綠盟科技CII安全保衛平臺建設方案入選天津市100個大資料應用場景優秀解決方案大資料
- 以現代建築思潮探討關卡場景設計
- Unity GameFramework丨(八)場景UnityGAMFramework
- dhtmlxGantt用於建築行業的專案管理軟體解決方案HTML行業專案管理
- 就這?Spring 事務失效場景及解決方案Spring
- 分散式事務解決方案與適用場景分析分散式
- Android 載入大圖片時報OOM的解決方案(原始碼)AndroidOOM原始碼
- 中原銀行:基於StarRocks構建OLAP全場景架構解決方案,邁入極速統一時代 | 案例研究架構
- 前端JS 下載大檔案解決方案前端JS
- unity實現場景跳轉Unity
- Android高效載入大圖、多圖解決方案,有效避免程式OOMAndroid圖解OOM
- 高併發業務場景下的秒殺解決方案 (初探)
- 面向複雜場景的高效能表單解決方案
- 全場景覆蓋的華為雲遊戲文娛解決方案遊戲
- 直播賣貨APP開發多場景開發解決方案APP
- formily-面向中後臺場景的複雜解決方案ORM
- 文字識別解決方案-OCR識別應用場景解析
- Unity的超大開放世界解決方案Unity
- 國內首個面向建築行業的混合雲解決方案正式釋出行業
- 大廠的影片推薦索引構建解決方案索引
- web app 無限載入終極解決方案WebAPP
- DSOframer 無法正常載入的解決方案