Qt提供的圖形化工具可以很方便地開發車載數字座艙中圖形化界面。同時Qt for Android Automotive將Qt技術、車載信息娛樂系統以及安卓平臺三者進行集成,提供Java API的Qt/C++封裝,為開發團隊提供易于使用的、可靠穩定的Android IVI的底層接口。
作為國際知名軟件,Qt已發展了26年,在各行各業都有廣泛的應用,公司總部位于芬蘭,主要提供圖形化開發框架和渲染引擎。目前,Qt公司在赫爾辛基納斯達克是上市,每年保持30%-40%的成長率。
在汽車行業,Qt服務眾多客戶、項目,全球有幾個標桿性的用戶,一個是梅賽德斯奔馳,MBUX全系列的數字座艙系統都是基于Qt平臺開發;特斯拉的數字座艙也是基于Qt開發;以及福特、現代等等。國內的廠商也有較多合作,如上汽大眾,廣汽等等,Tier One包括延鋒偉世通和德賽西威。
極致渲染
Qt本身是非常龐大的體系架構,涵蓋桌面的應用程序開發,嵌入式或者智能穿戴都有對應的解決方案。提供多種開發方式。在數字座艙上用的比較多的開發方式,一個是基于Qt Quick技術的2D和3D的UI,另一個是Qt支持WebUI,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的界面。更關鍵的一點是所有平臺可以統一使用同一種語言,只要寫一遍代碼就可以在各個平臺上直接運行,這有助于開發人員打造一個完整統一的用戶體驗座艙。
(原標題:一個構架 一種語言 打造全棧式數字座艙極致體驗)