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