天天看點

把汽車當玩具?虛幻引擎:不是不可能

虛幻引擎在全球已經與OEM公布了三款量産車,分别是GMC通用的悍馬 EV、凱迪拉克lyric,以及10月份北美剛剛上市的亞馬遜投資的Rivian汽車。三款車分别搭載高通不同款型晶片。同時,在國内虛幻引擎也有比較大的突破,11月初華人運通也公布了與Epic Games公司層級的戰略合作,合作領域包括HMI、可視化、模拟仿真、以及線上線下的配置器和虛拟展廳等。

未來将會有更多的OEM與行業内的公司選擇虛幻引擎開發車機,從技術方面來分析有一個比較重要的因素。虛幻引擎是完全實時化的内容創作的平台,平台上産生的數字資産具有很強的可複制性,并且它對汽車行業幾乎所有的應用場景都有較強的資料相容性。

把汽車當玩具?虛幻引擎:不是不可能

Epic Games中國技術客戶經理 紀大偉

虛幻引擎開發HMI 得天獨厚

目前車機對比高性能PC和主機而言,晶片的算力對智能座艙/HMI是一個瓶頸,在項目制作前,需要對已經選型的晶片做硬體晶片的性能分析。根據目标平台,車機的系統做合理的分析,定制出合理的目标是非常重要的第一步。

結合虛幻引擎裡面每一個不同的HMI項目,以及項目需求,在引擎編輯器裡做相關的功能設定。虛幻引擎引擎内部提供了一套非常強大的性能分析的工具,做數字資産的時候,可以在早期對已有的數字資産進行性能分析和優化,保證可以順利部署在目标的平台上。

虛幻引擎在遊戲領域的數字資産制作,以及虛幻引擎積累了多年的經驗。官方HMI demo的目标平台是高通的8155,2.5K的顯示螢幕,使用了虛幻引擎4.25版本寫入的新的clear coat和半透明玻璃的效果,最終為了穩定運作在車機上。性能方面的目标定的比較高,在保有整體效果的基礎上,可以實時運作在60幀以上。

把汽車當玩具?虛幻引擎:不是不可能

虛幻引擎HMI汽車模型;圖檔來源:虛幻引擎

在HMI的3D汽車首頁面,沒有對外飾的基礎模型做任何的優化,保持原始的CAD幾何結構,外飾的模型大概的面數為27萬左右,可在動态的互動過程中,呈現較好的光照和質感,保證産品的高調性,在外飾這個部分,因為沒有做任何的裁剪,車身和玻璃的反射效果都非常清晰順暢。

虛幻引擎自身也提供了性能分析的工具,主要有兩套。第一套是通常稱之為Console Command,它的好處是友善設計師或者美術人員使用,可以在編輯器裡運作,最有價值的是當項目已經打包成安卓的APK,部署到車機終端硬體上的時候,也還是可以繼續使用這套指令來做性能分析。第二套工具,虛幻引擎3D的實時渲染非常依賴GPU,是以引擎本身提供了一個工具,專門做非常detail的GPU性能分析。

優化工具

基于Gazelle的項目分成四個方面:

1、将原始CAD模型轉成一個真正可以用在HMI方面的多邊形車模

虛幻引擎Demo裡一共用到了三種車模,除了歡迎頁面的主車,在ADAS裡也配置了一輛小車,同時也用了HDR,能在ADAS上看到完整的效果。還有一輛是在電池頁面裡,此車相關的優化主要是集中在材質方面。

3D整車其實一共隻有五十萬面,如果隻考慮polygon,不看效果,其實8155晶片是可以跑到四百甚至五百萬的polygon,但是因為疊加了一些進階效果之後就不能隻看polygon的數量,在保留外飾原有細節情況不變的基礎上,隻對内飾做了一些裁剪。

2、簡化材質

在畫面動起來時,電池頁面裡的材質動态效果比較炫酷,但是如果在編輯器裡預設不對材質做優化,對性能的影響還是比較大的。對項目的材質進行優化,主要有兩種方法。

一種是在引擎之外進行,可以用一些專業的做實時的3D貼圖工具,做好一整套的模型材質,導出成貼圖,再導入虛幻引擎。

第二種方法是不用任何的導入的貼圖,隻是在引擎裡儲存一張五顔六色的vertex color作為map,通過RGB不同的通道來提取不同的Mask,給到電池頁面裡的車的材質,通過選取了不同顔色作為Mask來摳取相應的部分,給相應部分賦予不同材質的效果。在GPU做運算時,仍然把材質看成一個整體,這樣在很大程度上就減少了drawcalls的數量。

關于整體的效果,此項目遵循這樣一個原則。如果車體某個區域的局部地方細節很多,在螢幕占比又不是很大的情況下,會選用低精度的模型+Normal map的方式。如果某些地方在螢幕裡占比比較大,而且表面又比較流暢,沒有很多細節的時候就保留原始的高精度模型。

在材質方面,盡量少用貼圖,虛幻引擎可以顯示材質編輯器裡的instruction,盡量減少材質instruction的數量。因為實時渲染在做材質編譯的時候,材質的複雜度會嚴重影響将來實時運作的效率和性能。

把汽車當玩具?虛幻引擎:不是不可能

虛幻引擎HMI開發界面;圖檔來源:虛幻引擎

3、對貼圖進行優化

貼圖對記憶體的影響非常大,在引擎裡有一套科學的算法,簡單的有幾個規律可循。任何導入虛幻引擎的貼圖,它的分辨率應該都是2的乘方,不應該是奇數,而且它的橫寬比,如果沒有任何條件的限制,最好是正方形,因為正方形的貼圖會最大程度的提高記憶體的使用率。虛幻引擎在貼圖導入時,有與貼圖相關的壓縮選項,虛幻引擎會把一些normal map盡量的設定成DX1。

引擎同時還提供了一套比較科學的計算方法,到底該在某一個特定的或者固定鏡頭下使用多大尺寸貼圖的方法,把最大2K到最小32×32這樣六組不同大小的分辨率貼圖打包成一個texture pack,在一個動态材質的效果下去預覽,當相機或者距離發生變化的時候引擎會自動比對,去選取合适分辨率的貼圖來适應目前的場景,之後把這個貼圖作為一個自發光的貼圖貼到一個材質上,在動态的過程中就會自動顯示目前的顔色以及相應的數字。還可以在貼圖的屬性面闆内重置分辨率,對特定的貼圖做優化。

對于整體的資産,除了貼圖以外,包括所有的多邊形,虛幻引擎有一個工具是用圖形化的方式直接顯示場景裡所有的資産,越大的compound就代表容量越大,它是一個互動類的程式。一般而言一個大的compound,如果輕按兩下,就會進入compound的内部,裡面就會顯示一些在主資産下的其他模型或者貼圖。

4、整體光照的解決方案

虛幻引擎是實時動态的生成渲染或者生成光照的工具,可以用一種比較靈活的方式建立光照,首先在場景裡生成一個Capture Cube,類似于相機的這樣一個物體。在編輯器裡,Capture Cube會把做好的一整套光照實時捕捉下來,并且儲存到render target裡面。

通過Capture Cube,還可以把整個場景所有的光照包括HDR全部實時儲存下來。如果對目前的光照效果不滿意,也可以做動态的修改,修改完之後再用同樣的方式把整個場景光照捕捉下來,最終整個場景的光照就會儲存成一整張自定義的HDR,存到硬碟上。

最後把HDR貼到skylight 和反射球上完成整個場景的光照效果。

把汽車當玩具?虛幻引擎:不是不可能

虛幻引擎HMI界面;圖檔來源:虛幻引擎

虛幻引擎項目打包

打包會影響兩個部分,一個是整個HMI的啟動時間,另外是記憶體占用量,虛幻引擎提供一個工具叫Size MAP,在編輯器裡給能夠檢測哪些資産過大而造成HMI的資源浪費,當虛幻引擎部署到安卓在移動端的裝置上之後,虛幻引擎同樣提供了一個工具它是指令上工具——UnrealPAK.EXE,在windows的作業系統上直接用指令行啟動,它有幾個功能:

第一,用extract的指令解壓PAK包,解壓出來之後會有很多跟項目不相關的檔案,手動删除來減少包體大小。

第二,可通過“create”的指令重新對精簡過的項目檔案打包,整體PAK容量有會大幅度的縮小。

第三,UnrealPAK還可以做整個包體的壓縮,但是壓縮有雙刃劍的性質,如果過度的壓縮會影響啟動時間,要看具體項目大小是否壓縮。

第四,如果已經打包到移動端上,可以通過指令行來檢視打包出來的檔案及記憶體占用的資訊,通過輸入memreport-full,會在打包路徑下儲存一個log,log裡面包含貼圖或模型及其他跟記憶體占用相關的資訊。

繼續閱讀