選單

一個構架 一種語言 打造全棧式數字座艙極致體驗

Qt提供的圖形化工具可以很方便地開發車載數字座艙中圖形化介面。同時Qt for Android Automotive將Qt技術、車載資訊娛樂系統以及安卓平臺三者進行整合,提供Java API的Qt/C++封裝,為開發團隊提供易於使用的、可靠穩定的Android IVI的底層介面。

一個構架 一種語言 打造全棧式數字座艙極致體驗

Qt 中國資深技術顧問 林斌

作為國際知名軟體,Qt已發展了26年,在各行各業都有廣泛的應用,公司總部位於芬蘭,主要提供圖形化開發框架和渲染引擎。目前,Qt公司在赫爾辛基納斯達克是上市,每年保持30%-40%的成長率。

在汽車行業,Qt服務眾多客戶、專案,全球有幾個標杆性的使用者,一個是梅賽德斯賓士,MBUX全系列的數字座艙系統都是基於Qt平臺開發;特斯拉的數字座艙也是基於Qt開發;以及福特、現代等等。國內的廠商也有較多合作,如上汽大眾,廣汽等等,Tier One包括延鋒偉世通和德賽西威。

極致渲染

Qt本身是非常龐大的體系架構,涵蓋桌面的應用程式開發,嵌入式或者智慧穿戴都有對應的解決方案。提供多種開發方式。在數字座艙上用的比較多的開發方式,

一個是基於Qt Quick技術的2D和3D的UI,另一個是Qt支援Web

UI,Qt內建的瀏覽器,可以在Qt介面上嵌入HTML的內容。

林斌介紹了最重要的部分——Qt Quick渲染引擎/圖形技術。該技術首先是一種開發語言 QML,它也是一個渲染引擎,可以同時渲染2D和3D內容。這是Qt和很多廠家的技術不一樣的地方,它統一了2D和3D設計工具,設計團隊可以很方便地拖拽,把畫面組合起來。

林斌介紹了Qt展示的流程圖/軟體架構圖是完整Qt Quick技術的渲染匯流排。值得一提的是2D的渲染引擎,為什麼有獨立的2D渲染引擎?是因為2D場景也是由GPU渲染的,但是2D場景的一些需求和3D場景不一樣,2D場景會產生大量碎片化的圖元,需要對它做一些批次整合,或者做一些效能的最佳化,它的渲染效率才會大大提高。總之,如果用GPU渲染2D場景,必須要有這種專業的引擎。

除了2D渲染引擎,Qt還提供3D的渲染引擎專門用於渲染3D場景下的內容,它的最佳化邏輯和演算法和2D是不一樣的。Qt能做到2D和3D完整的解決方案。Qt現在GPU的渲染會基於OpenGL的標準,大多數的軟體都是基於OpenGL標準進行開發,但是OpenGL已經算是上一代的架構了,以Vulkan為代表的新一代的技術架構已經有了取代的趨勢,未來五到十年,兩者會並存。Qt在引擎的輸出部分做了一層渲染硬體介面,不會直接對接OpenGL或Vulkan,而是以外掛的形式讓使用者自由選擇,客戶可以不修改一行程式碼,直接透過環境變數切換不同輸出。

從3D的效能方面而言,Qt可以支援先進的光照演算法,基於圖片的光照技術(IBL)等技術,滿足汽車App的需求。

一個構架 一種語言 打造全棧式數字座艙極致體驗

如圖,不停旋轉的球是另外一個技術——真實物理渲染(PBR)技術,它可以非常高精度的模擬真實的金屬或者物體表面的反光情況,還是在那個案例裡面,如果有一個car body control的車模,車模表面的反射或者一些倒影都可以用這個技術完全可以實現。

Qt可以動態生成頂點,動態生成材質,針對汽車行業很典型的地形生成需求,即ADAS或者一些車載導航的道路周邊需要有一些隨機生成的地形, Qt完全支援該功能,可以隨機生成或者加入一些演算法生成地圖。

Qt後期著色器可以給畫面增加一些變化,比如說我整個畫面要做一些動態的模糊,或者配合你的主題顏色要做一些變色。

在開發當中普遍問到一個問題,車載3D的圖形介面對畫面的精細度要求非常高,完美度要求非常高,所以Qt Quick也加入了豐富全面抗鋸齒的功能。

Qt提供了非常專業的兩個獨立渲染引擎,也就是說Qt可以實現在同一個原始碼裡面既編輯2D又編輯3D,3D和2D控制元件混合的狀態,或者是可以在同一個直角座標系裡面繪製3D和2D的原件,把2D的文字或者照片浮空顯示,有一個3D車模或者3D的模型從前到後不停進行穿越。

此外,從Qt6。0開始,Qt支援骨骼動畫、支援變形動畫和3D粒子效果。

完整工具鏈 確保及時高質量交付

Qt的工具也是非常重要的部分,其提供了業內最完整的工具鏈。

第一,Qt提供了Designer Tools,就是Qt的設計師工具,提供簡單的託託拽拽,編輯關鍵幀就可以實現動畫的工具,這是在前面設計端。

第二,Qt也提供了Developer Tools,可以用來編寫程式碼、編譯和除錯。

第三,Qt支援自動化的測試工具,Qt有整合自動化迴歸測試的小工具,這樣的話Qt編寫一些測試指令碼,放在Qt的CI/CD工具裡面,這樣每開發一次,或者每提交一次程式碼可以進行完整的自動測試。從而提高開發結果的質量,也縮短開發時間。

一個構架 一種語言 打造全棧式數字座艙極致體驗

Qt的設計工具

Design Studio,有幾個功能。

一是可以支援素材匯入。2D的素材包括Photoshop、Illustrator、Sketch、Figma等,把工具開發出來的UI直接轉換成Qt的程式碼。

二是生成了這個場景就可以編輯它的動畫,編輯它的狀態機,實現簡單的場景拼接。這個版本Qt還對3D開發進行了一些最佳化,包括它的視覺化3D粒子效果的編輯,包括它的PBR高階材質編輯,以及自定義著色器的編輯。

Qt的測試工具

,細分Qt三個產品:

第一是Squish,是一個自動化迴歸測試工具。

第二是COCO,程式碼覆蓋率的統計工具,有多少程式碼是被測試過的,有多少程式碼是被執行過的,有多少程式碼是死程式碼,都可以透過這個工具進行分析,進行最佳化。

第三是Test Center,測試結果管理工具,是一個服務,可以把前面生成的所有測試報告放在這裡面。

這是Qt測試工具的集合。

整合安卓

十年之前就可以把整個Qt的程式放在安卓上,該產品叫做Qt for Android。Qt可以用Qt的開發工具去開發安卓的APP,開發出來的程式可以透過安卓的NDK進行編譯,打包生成Apk。

Qt for Android Automotive可以把整個Qt UI封裝成一個Surface,可以內嵌到原生Android Activity顯示。Qt也可以設定它做成系統頂層,這樣可以變成一個浮動視窗,浮動在任何介面上。典型的應用比如一些3D的互動頭像,做一些人機對話功能,或者是做一些3D方面的資訊推送。

另一大類是關於

IVI Launcher

,IVI桌面系統,安卓用於汽車的桌面開發其實會對桌面有非常特殊的要求,Qt希望安卓的APP變成一個卡片。一般的安卓APP一旦啟動的時候是全屏執行的,Qt想把安卓的APP變成一個視窗或者卡片執行在桌面上,這樣Qt就可以在桌面上執行很多很多的APP,用視窗組合形勢進行管理。因此,Qt打造了這個桌面系統,安卓原生的APP一旦啟動之後,它變成了一個卡片或者是小視窗執行在桌面上,這個視窗還可以自定義佈局方式。其中運用了Qt視窗管理模組的技術,以及修改了安卓原生,把這個生命週期修改成它可以並行執行的狀態。影片中有四個應用程式,而且這四個都是原生的,視窗也可以拖拽,進行位置或者順序的替換等等。

Qt在安卓上還有另一種方案。現在數字座艙一般會使用Hypervisor的虛擬機器去做作業系統的隔離,資源的隔離,但有些車廠會覺得Hypervisor比較貴,技術支援上還是有些問題,

能不能找一個Hypervisor的替代方案

Qt就把目光放在了

Linux核心

,它自帶了Container機制,即LXC技術。Container能實現什麼呢?應用程式的獨立分離。Qt可以基於Container概念打造技術方案,安卓底層就是Linux,安卓底層的Linux上執行兩個容器,一個容器直接執行Linux,輸出的是儀表盤介面,另外一個容器執行安卓應用元件,形成安卓的生態。這兩個容器之間可以實現程序間的隔離。

一個構架 一種語言 打造全棧式數字座艙極致體驗

全棧服務

Qt的願景就是適配各種各樣的方案架構,打造一個完整的、統一的使用者體驗。Qt在儀表盤上適配多種作業系統,Qt也可以在安卓上完美地適配開發應用程式。同樣,Qt還提供了一個Qt for MCUs模組,在低端的微控制器上直接執行Qt UI,基於這個技術可以打造Console的介面。更關鍵的一點是所有平臺可以統一使用同一種語言,只要寫一遍程式碼就可以在各個平臺上直接執行,這有助於開發人員打造一個完整統一的使用者體驗座艙。

一個構架 一種語言 打造全棧式數字座艙極致體驗