虛幻引擎在全球已經(jīng)與OEM公布了三款量產(chǎn)車,分別是GMC通用的悍馬 EV、凱迪拉克lyric,以及10月份北美剛剛上市的亞馬遜投資的Rivian汽車。三款車分別搭載高通不同款型芯片。同時,在國內(nèi)虛幻引擎也有比較大的突破,11月初華人運通也公布了與Epic Games公司層級的戰(zhàn)略合作,合作領(lǐng)域包括HMI、可視化、模擬仿真、以及線上線下的配置器和虛擬展廳等。
未來將會有更多的OEM與行業(yè)內(nèi)的公司選擇虛幻引擎開發(fā)車機,從技術(shù)方面來分析有一個比較重要的因素。虛幻引擎是完全實時化的內(nèi)容創(chuàng)作的平臺,平臺上產(chǎn)生的數(shù)字資產(chǎn)具有很強的可復制性,并且它對汽車行業(yè)幾乎所有的應(yīng)用場景都有較強的數(shù)據(jù)兼容性。
Epic Games中國技術(shù)客戶經(jīng)理 紀大偉
虛幻引擎開發(fā)HMI 得天獨厚
目前車機對比高性能PC和主機而言,芯片的算力對智能座艙/HMI是一個瓶頸,在項目制作前,需要對已經(jīng)選型的芯片做硬件芯片的性能分析。根據(jù)目標平臺,車機的系統(tǒng)做合理的分析,定制出合理的目標是非常重要的第一步。
結(jié)合虛幻引擎里面每一個不同的HMI項目,以及項目需求,在引擎編輯器里做相關(guān)的功能設(shè)置。虛幻引擎引擎內(nèi)部提供了一套非常強大的性能分析的工具,做數(shù)字資產(chǎn)的時候,可以在早期對已有的數(shù)字資產(chǎn)進行性能分析和優(yōu)化,保證可以順利部署在目標的平臺上。
虛幻引擎在游戲領(lǐng)域的數(shù)字資產(chǎn)制作,以及虛幻引擎積累了多年的經(jīng)驗。官方HMI demo的目標平臺是高通的8155,2.5K的顯示屏幕,使用了虛幻引擎4.25版本寫入的新的clear coat和半透明玻璃的效果,最終為了穩(wěn)定運行在車機上。性能方面的目標定的比較高,在保有整體效果的基礎(chǔ)上,可以實時運行在60幀以上。
虛幻引擎HMI汽車模型;圖片來源:虛幻引擎
在HMI的3D汽車主頁面,沒有對外飾的基礎(chǔ)模型做任何的優(yōu)化,保持原始的CAD幾何結(jié)構(gòu),外飾的模型大概的面數(shù)為27萬左右,可在動態(tài)的交互過程中,呈現(xiàn)較好的光照和質(zhì)感,保證產(chǎn)品的高調(diào)性,在外飾這個部分,因為沒有做任何的裁剪,車身和玻璃的反射效果都非常清晰順暢。
虛幻引擎自身也提供了性能分析的工具,主要有兩套。第一套是通常稱之為Console Command,它的好處是方便設(shè)計師或者美術(shù)人員使用,可以在編輯器里運行,最有價值的是當項目已經(jīng)打包成安卓的APK,部署到車機終端硬件上的時候,也還是可以繼續(xù)使用這套命令來做性能分析。第二套工具,虛幻引擎3D的實時渲染非常依賴GPU,所以引擎本身提供了一個工具,專門做非常detail的GPU性能分析。
優(yōu)化工具
基于Gazelle的項目分成四個方面:
1、將原始CAD模型轉(zhuǎn)成一個真正可以用在HMI方面的多邊形車模
虛幻引擎Demo里一共用到了三種車模,除了歡迎頁面的主車,在ADAS里也配置了一輛小車,同時也用了HDR,能在ADAS上看到完整的效果。還有一輛是在電池頁面里,此車相關(guān)的優(yōu)化主要是集中在材質(zhì)方面。
3D整車其實一共只有五十萬面,如果只考慮polygon,不看效果,其實8155芯片是可以跑到四百甚至五百萬的polygon,但是因為疊加了一些高級效果之后就不能只看polygon的數(shù)量,在保留外飾原有細節(jié)情況不變的基礎(chǔ)上,只對內(nèi)飾做了一些裁剪。
2、簡化材質(zhì)
在畫面動起來時,電池頁面里的材質(zhì)動態(tài)效果比較炫酷,但是如果在編輯器里默認不對材質(zhì)做優(yōu)化,對性能的影響還是比較大的。對項目的材質(zhì)進行優(yōu)化,主要有兩種方法。
一種是在引擎之外進行,可以用一些專業(yè)的做實時的3D貼圖工具,做好一整套的模型材質(zhì),導出成貼圖,再導入虛幻引擎。
第二種方法是不用任何的導入的貼圖,只是在引擎里保存一張五顏六色的vertex color作為map,通過RGB不同的通道來提取不同的Mask,給到電池頁面里的車的材質(zhì),通過選取了不同顏色作為Mask來摳取相應(yīng)的部分,給相應(yīng)部分賦予不同材質(zhì)的效果。在GPU做運算時,仍然把材質(zhì)看成一個整體,這樣在很大程度上就減少了drawcalls的數(shù)量。
關(guān)于整體的效果,此項目遵循這樣一個原則。如果車體某個區(qū)域的局部地方細節(jié)很多,在屏幕占比又不是很大的情況下,會選用低精度的模型+Normal map的方式。如果某些地方在屏幕里占比比較大,而且表面又比較流暢,沒有很多細節(jié)的時候就保留原始的高精度模型。
在材質(zhì)方面,盡量少用貼圖,虛幻引擎可以顯示材質(zhì)編輯器里的instruction,盡量減少材質(zhì)instruction的數(shù)量。因為實時渲染在做材質(zhì)編譯的時候,材質(zhì)的復雜度會嚴重影響將來實時運行的效率和性能。
虛幻引擎HMI開發(fā)界面;圖片來源:虛幻引擎
3、對貼圖進行優(yōu)化
貼圖對內(nèi)存的影響非常大,在引擎里有一套科學的算法,簡單的有幾個規(guī)律可循。任何導入虛幻引擎的貼圖,它的分辨率應(yīng)該都是2的乘方,不應(yīng)該是奇數(shù),而且它的橫寬比,如果沒有任何條件的限制,最好是正方形,因為正方形的貼圖會最大程度的提高內(nèi)存的使用率。虛幻引擎在貼圖導入時,有與貼圖相關(guān)的壓縮選項,虛幻引擎會把一些normal map盡量的設(shè)置成DX1。
引擎同時還提供了一套比較科學的計算方法,到底該在某一個特定的或者固定鏡頭下使用多大尺寸貼圖的方法,把最大2K到最小32×32這樣六組不同大小的分辨率貼圖打包成一個texture pack,在一個動態(tài)材質(zhì)的效果下去預覽,當相機或者距離發(fā)生變化的時候引擎會自動匹配,去選取合適分辨率的貼圖來適應(yīng)當前的場景,之后把這個貼圖作為一個自發(fā)光的貼圖貼到一個材質(zhì)上,在動態(tài)的過程中就會自動顯示當前的顏色以及相應(yīng)的數(shù)字。還可以在貼圖的屬性面板內(nèi)重置分辨率,對特定的貼圖做優(yōu)化。
對于整體的資產(chǎn),除了貼圖以外,包括所有的多邊形,虛幻引擎有一個工具是用圖形化的方式直接顯示場景里所有的資產(chǎn),越大的compound就代表容量越大,它是一個交互類的程序。一般而言一個大的compound,如果雙擊,就會進入compound的內(nèi)部,里面就會顯示一些在主資產(chǎn)下的其他模型或者貼圖。
4、整體光照的解決方案
虛幻引擎是實時動態(tài)的生成渲染或者生成光照的工具,可以用一種比較靈活的方式創(chuàng)建光照,首先在場景里生成一個Capture Cube,類似于相機的這樣一個物體。在編輯器里,Capture Cube會把做好的一整套光照實時捕捉下來,并且保存到render target里面。
通過Capture Cube,還可以把整個場景所有的光照包括HDR全部實時保存下來。如果對當前的光照效果不滿意,也可以做動態(tài)的修改,修改完之后再用同樣的方式把整個場景光照捕捉下來,最終整個場景的光照就會保存成一整張自定義的HDR,存到硬盤上。
最后把HDR貼到skylight 和反射球上完成整個場景的光照效果。
虛幻引擎HMI界面;圖片來源:虛幻引擎
虛幻引擎項目打包
打包會影響兩個部分,一個是整個HMI的啟動時間,另外是內(nèi)存占用量,虛幻引擎提供一個工具叫Size MAP,在編輯器里給能夠檢測哪些資產(chǎn)過大而造成HMI的資源浪費,當虛幻引擎部署到安卓在移動端的設(shè)備上之后,虛幻引擎同樣提供了一個工具它是命令上工具——UnrealPAK.EXE,在windows的操作系統(tǒng)上直接用命令行啟動,它有幾個功能:
第一,用extract的命令解壓PAK包,解壓出來之后會有很多跟項目不相關(guān)的文件,手動刪除來減少包體大小。
第二,可通過“create”的命令重新對精簡過的項目文件打包,整體PAK容量有會大幅度的縮小。
第三,UnrealPAK還可以做整個包體的壓縮,但是壓縮有雙刃劍的性質(zhì),如果過度的壓縮會影響啟動時間,要看具體項目大小是否壓縮。
第四,如果已經(jīng)打包到移動端上,可以通過命令行來查看打包出來的文件及內(nèi)存占用的信息,通過輸入memreport-full,會在打包路徑下保存一個log,log里面包含貼圖或模型及其他跟內(nèi)存占用相關(guān)的信息。