Qt提供的圖形化工具可以很方便地開發(fā)車載數(shù)字座艙中圖形化界面。同時(shí)Qt for Android Automotive將Qt技術(shù)、車載信息娛樂系統(tǒng)以及安卓平臺(tái)三者進(jìn)行集成,提供Java API的Qt/C++封裝,為開發(fā)團(tuán)隊(duì)提供易于使用的、可靠穩(wěn)定的Android IVI的底層接口。
作為國(guó)際知名軟件,Qt已發(fā)展了26年,在各行各業(yè)都有廣泛的應(yīng)用,公司總部位于芬蘭,主要提供圖形化開發(fā)框架和渲染引擎。目前,Qt公司在赫爾辛基納斯達(dá)克是上市,每年保持30%-40%的成長(zhǎng)率。
在汽車行業(yè),Qt服務(wù)眾多客戶、項(xiàng)目,全球有幾個(gè)標(biāo)桿性的用戶,一個(gè)是梅賽德斯奔馳,MBUX全系列的數(shù)字座艙系統(tǒng)都是基于Qt平臺(tái)開發(fā);特斯拉的數(shù)字座艙也是基于Qt開發(fā);以及福特、現(xiàn)代等等。國(guó)內(nèi)的廠商也有較多合作,如上汽大眾,廣汽等等,Tier One包括延鋒偉世通和德賽西威。
極致渲染
Qt本身是非常龐大的體系架構(gòu),涵蓋桌面的應(yīng)用程序開發(fā),嵌入式或者智能穿戴都有對(duì)應(yīng)的解決方案。提供多種開發(fā)方式。在數(shù)字座艙上用的比較多的開發(fā)方式,一個(gè)是基于Qt Quick技術(shù)的2D和3D的UI,另一個(gè)是Qt支持WebUI,Qt內(nèi)置的瀏覽器,可以在Qt界面上嵌入HTML的內(nèi)容。
林斌介紹了最重要的部分——Qt Quick渲染引擎/圖形技術(shù)。該技術(shù)首先是一種開發(fā)語(yǔ)言 QML,它也是一個(gè)渲染引擎,可以同時(shí)渲染2D和3D內(nèi)容。這是Qt和很多廠家的技術(shù)不一樣的地方,它統(tǒng)一了2D和3D設(shè)計(jì)工具,設(shè)計(jì)團(tuán)隊(duì)可以很方便地拖拽,把畫面組合起來。
林斌介紹了Qt展示的流程圖/軟件架構(gòu)圖是完整Qt Quick技術(shù)的渲染總線。值得一提的是2D的渲染引擎,為什么有獨(dú)立的2D渲染引擎?是因?yàn)?D場(chǎng)景也是由GPU渲染的,但是2D場(chǎng)景的一些需求和3D場(chǎng)景不一樣,2D場(chǎng)景會(huì)產(chǎn)生大量碎片化的圖元,需要對(duì)它做一些批次整合,或者做一些性能的優(yōu)化,它的渲染效率才會(huì)大大提高??傊?,如果用GPU渲染2D場(chǎng)景,必須要有這種專業(yè)的引擎。
除了2D渲染引擎,Qt還提供3D的渲染引擎專門用于渲染3D場(chǎng)景下的內(nèi)容,它的優(yōu)化邏輯和算法和2D是不一樣的。Qt能做到2D和3D完整的解決方案。Qt現(xiàn)在GPU的渲染會(huì)基于OpenGL的標(biāo)準(zhǔn),大多數(shù)的軟件都是基于OpenGL標(biāo)準(zhǔn)進(jìn)行開發(fā),但是OpenGL已經(jīng)算是上一代的架構(gòu)了,以Vulkan為代表的新一代的技術(shù)架構(gòu)已經(jīng)有了取代的趨勢(shì),未來五到十年,兩者會(huì)并存。Qt在引擎的輸出部分做了一層渲染硬件接口,不會(huì)直接對(duì)接OpenGL或Vulkan,而是以插件的形式讓用戶自由選擇,客戶可以不修改一行代碼,直接通過環(huán)境變量切換不同輸出。
從3D的性能方面而言,Qt可以支持先進(jìn)的光照算法,基于圖片的光照技術(shù)(IBL)等技術(shù),滿足汽車App的需求。
不停旋轉(zhuǎn)的球是另外一個(gè)技術(shù)——真實(shí)物理渲染(PBR)技術(shù),它可以非常高精度的模擬真實(shí)的金屬或者物體表面的反光情況,還是在那個(gè)案例里面,如果有一個(gè)car body control的車模,車模表面的反射或者一些倒影都可以用這個(gè)技術(shù)完全可以實(shí)現(xiàn)。
Qt可以動(dòng)態(tài)生成頂點(diǎn),動(dòng)態(tài)生成材質(zhì),針對(duì)汽車行業(yè)很典型的地形生成需求,即ADAS或者一些車載導(dǎo)航的道路周邊需要有一些隨機(jī)生成的地形, Qt完全支持該功能,可以隨機(jī)生成或者加入一些算法生成地圖。
Qt后期著色器可以給畫面增加一些變化,比如說我整個(gè)畫面要做一些動(dòng)態(tài)的模糊,或者配合你的主題顏色要做一些變色。
在開發(fā)當(dāng)中普遍問到一個(gè)問題,車載3D的圖形界面對(duì)畫面的精細(xì)度要求非常高,完美度要求非常高,所以Qt Quick也加入了豐富全面抗鋸齒的功能。
Qt提供了非常專業(yè)的兩個(gè)獨(dú)立渲染引擎,也就是說Qt可以實(shí)現(xiàn)在同一個(gè)原代碼里面既編輯2D又編輯3D,3D和2D控件混合的狀態(tài),或者是可以在同一個(gè)直角坐標(biāo)系里面繪制3D和2D的原件,把2D的文字或者照片浮空顯示,有一個(gè)3D車?;蛘?D的模型從前到后不停進(jìn)行穿越。
此外,從Qt6.0開始,Qt支持骨骼動(dòng)畫、支持變形動(dòng)畫和3D粒子效果。
完整工具鏈 確保及時(shí)高質(zhì)量交付
Qt的工具也是非常重要的部分,其提供了業(yè)內(nèi)最完整的工具鏈。
第一,Qt提供了Designer Tools,就是Qt的設(shè)計(jì)師工具,提供簡(jiǎn)單的托托拽拽,編輯關(guān)鍵幀就可以實(shí)現(xiàn)動(dòng)畫的工具,這是在前面設(shè)計(jì)端。
第二,Qt也提供了Developer Tools,可以用來編寫代碼、編譯和調(diào)試。
第三,Qt支持自動(dòng)化的測(cè)試工具,Qt有集成自動(dòng)化回歸測(cè)試的小工具,這樣的話Qt編寫一些測(cè)試腳本,放在Qt的CI/CD工具里面,這樣每開發(fā)一次,或者每提交一次代碼可以進(jìn)行完整的自動(dòng)測(cè)試。從而提高開發(fā)結(jié)果的質(zhì)量,也縮短開發(fā)時(shí)間。
Qt的設(shè)計(jì)工具Design Studio,有幾個(gè)功能。
一是可以支持素材導(dǎo)入。2D的素材包括Photoshop、Illustrator、Sketch、Figma等,把工具開發(fā)出來的UI直接轉(zhuǎn)換成Qt的代碼。
二是生成了這個(gè)場(chǎng)景就可以編輯它的動(dòng)畫,編輯它的狀態(tài)機(jī),實(shí)現(xiàn)簡(jiǎn)單的場(chǎng)景拼接。這個(gè)版本Qt還對(duì)3D開發(fā)進(jìn)行了一些優(yōu)化,包括它的可視化3D粒子效果的編輯,包括它的PBR高級(jí)材質(zhì)編輯,以及自定義著色器的編輯。
Qt的測(cè)試工具,細(xì)分Qt三個(gè)產(chǎn)品:
第一是Squish,是一個(gè)自動(dòng)化回歸測(cè)試工具。
第二是COCO,代碼覆蓋率的統(tǒng)計(jì)工具,有多少代碼是被測(cè)試過的,有多少代碼是被運(yùn)行過的,有多少代碼是死代碼,都可以通過這個(gè)工具進(jìn)行分析,進(jìn)行優(yōu)化。
第三是Test Center,測(cè)試結(jié)果管理工具,是一個(gè)服務(wù),可以把前面生成的所有測(cè)試報(bào)告放在這里面。
這是Qt測(cè)試工具的集合。
整合安卓
十年之前就可以把整個(gè)Qt的程序放在安卓上,該產(chǎn)品叫做Qt for Android。Qt可以用Qt的開發(fā)工具去開發(fā)安卓的APP,開發(fā)出來的程序可以通過安卓的NDK進(jìn)行編譯,打包生成Apk。
Qt for Android Automotive可以把整個(gè)Qt UI封裝成一個(gè)Surface,可以內(nèi)嵌到原生Android Activity顯示。Qt也可以設(shè)置它做成系統(tǒng)頂層,這樣可以變成一個(gè)浮動(dòng)窗口,浮動(dòng)在任何界面上。典型的應(yīng)用比如一些3D的交互頭像,做一些人機(jī)對(duì)話功能,或者是做一些3D方面的信息推送。
另一大類是關(guān)于IVI Launcher,IVI桌面系統(tǒng),安卓用于汽車的桌面開發(fā)其實(shí)會(huì)對(duì)桌面有非常特殊的要求,Qt希望安卓的APP變成一個(gè)卡片。一般的安卓APP一旦啟動(dòng)的時(shí)候是全屏運(yùn)行的,Qt想把安卓的APP變成一個(gè)窗口或者卡片運(yùn)行在桌面上,這樣Qt就可以在桌面上運(yùn)行很多很多的APP,用窗口組合形勢(shì)進(jìn)行管理。因此,Qt打造了這個(gè)桌面系統(tǒng),安卓原生的APP一旦啟動(dòng)之后,它變成了一個(gè)卡片或者是小窗口運(yùn)行在桌面上,這個(gè)窗口還可以自定義布局方式。其中運(yùn)用了Qt窗口管理模塊的技術(shù),以及修改了安卓原生,把這個(gè)生命周期修改成它可以并行運(yùn)行的狀態(tài)。視頻中有四個(gè)應(yīng)用程序,而且這四個(gè)都是原生的,窗口也可以拖拽,進(jìn)行位置或者順序的替換等等。
Qt在安卓上還有另一種方案。現(xiàn)在數(shù)字座艙一般會(huì)使用Hypervisor的虛擬機(jī)去做操作系統(tǒng)的隔離,資源的隔離,但有些車廠會(huì)覺得Hypervisor比較貴,技術(shù)支持上還是有些問題,能不能找一個(gè)Hypervisor的替代方案?
Qt就把目光放在了Linux內(nèi)核,它自帶了Container機(jī)制,即LXC技術(shù)。Container能實(shí)現(xiàn)什么呢?應(yīng)用程序的獨(dú)立分離。Qt可以基于Container概念打造技術(shù)方案,安卓底層就是Linux,安卓底層的Linux上運(yùn)行兩個(gè)容器,一個(gè)容器直接運(yùn)行Linux,輸出的是儀表盤界面,另外一個(gè)容器運(yùn)行安卓應(yīng)用組件,形成安卓的生態(tài)。這兩個(gè)容器之間可以實(shí)現(xiàn)進(jìn)程間的隔離。
全棧服務(wù)
Qt的愿景就是適配各種各樣的方案架構(gòu),打造一個(gè)完整的、統(tǒng)一的用戶體驗(yàn)。Qt在儀表盤上適配多種操作系統(tǒng),Qt也可以在安卓上較佳地適配開發(fā)應(yīng)用程序。同樣,Qt還提供了一個(gè)Qt for MCUs模塊,在低端的單片機(jī)上直接運(yùn)行Qt UI,基于這個(gè)技術(shù)可以打造Console的界面。更關(guān)鍵的一點(diǎn)是所有平臺(tái)可以統(tǒng)一使用同一種語(yǔ)言,只要寫一遍代碼就可以在各個(gè)平臺(tái)上直接運(yùn)行,這有助于開發(fā)人員打造一個(gè)完整統(tǒng)一的用戶體驗(yàn)座艙。
(原標(biāo)題:一個(gè)構(gòu)架 一種語(yǔ)言 打造全棧式數(shù)字座艙極致體驗(yàn))