除了有效使用系統資源之外,3D渲染的速度對於3D引擎也是必不可少的。即將推出的新Qt 3D Studio 2.4版本可顯着提升渲染性能,並進一步節省CPU和RAM利用率。使用我們的示例高端嵌入式3D應用程序,渲染速度提高了565%,而RAM使用和CPU負載分別下降了20%和51%。
性能是Qt的關鍵驅動因素,對於能夠在嵌入式設備上運行復雜的3D應用程序尤為重要。我們一直在通過早期版本的Qt 3D Studio 不斷提高資源效率,即將推出的Qt 3D Studio 2.4在渲染性能方面邁出了重要一步。確切的性能提升在很大程度上取決於應用程序和使用的硬件,因此我們在本博文中詳細介紹了兩個示例應用程序和嵌入式硬件。本文中使用的示例應用程序是汽車儀表集群,但在使用Qt 3D Studio運行時的任何應用程序中都可以看到類似的改進。
瑞薩R-Car D3的入門級嵌入式示例
測量中使用的入門級嵌入式設備是 Renesas R-Car D3,它具有Imagination PowerVR GE8300入門級GPU(https://www.imgtec.com/powervr-gpu/ge8300/)和一個ARM Cortex A53 CPU核心。操作系統是Linux。
使用的示例應用程序是低端群集,可從https://git.qt.io/public-demos/qt3dstudio/tree/master/LowEndCluster獲得。正如關於優化3D應用程序的詳細博客文章中所述,低端群集示例已得到很好的優化。
為了使應用程序盡可能輕量級,只將ADAS視圖創建為實時3D用戶界面。使用Qt Quick創建組合儀表的其他部分。這使得即使在像Renesas R-Car D3這樣的入門級硬件上也可以擁有實時3D用戶界面。
采用NVIDIA Tegra X2的高端嵌入式示例
用於測量的高端嵌入式設備是配備Tegra X2 SoC的NVIDIA Jetson TX2開發板,該板具有256核NVIDIA Pascal™GPU和雙核NVIDIA Denver 2 64位以及四核ARM Cortex- A57 MPCore CPU。操作系統是Linux。
使用的示例應用程序是Kria集群,可從https://git.qt.io/public-demos/qt3dstudio/tree/master/kria-cluster-3d-demo獲得。Kria集群示例故意沉重,具有較大且未完全優化的紋理,高分辨率等。
在高端示例中,所有儀表和其他元素都是實時3D,使用Qt 3D Studio運行時渲染。很少有Qt Quick部件,這些部件通過QML流使用紋理共享進入3D用戶界面。
渲染性能提升
新Qt 3D Studio 2.4版本的最大改進是渲染性能 - 使相同的應用程序在同一硬件上渲染更多幀每秒(FPS)。與Qt一樣,我們的目標是穩定運行60 FPS,但在嵌入式設備上,純粹的性能還不夠。當存在熱管理和處理不同使用場景等項目時,通常不會在SoC的圖形功能的邊緣運行。對於諸如組合儀表之類的應用,性能需要在所有操作條件下都是平滑的,包括在系統的最大負載下。出於高端示例的測量目的,我們禁用了vsync,允許系統繪制盡可能多的幀。在典型的實際應用程序中,始終存在vsync集,
下圖顯示了測量的每秒幀數,NVIDIA TX2上的高端示例(vsync off)和瑞薩R-Car D3上的低端示例(vsync on):
高端示例:使用新的Qt 3D Studio 2.4,我們發現渲染性能提升了565%。使用Qt 3D Studio 2.3,應用程序僅以20 FPS運行,但新的Qt 3D Studio 2.4允許應用程序運行133 FPS。這是測量關閉vsync,只是為了測量新運行時的能力。在實踐中,運行60 FPS就足夠了,並且可以利用處理器的額外容量來具有更大的屏幕(或另一個屏幕)或更復雜的應用 - 或者僅僅通過不使用SoC的最大容量來節省功率。
低端示例: 改進率為46%,因為Qt Quick的最大FPS上限為60 FPS。使用Qt 3D Studio 2.3,應用程序實現了41 FPS,而使用新的2.4運行時,它可輕松達到60 FPS。就像更強大的高端硬件一樣,SoC的多余容量可用於運行更復雜的3D用戶界面,或者只是不使用。
CPU負載改善
應用程序的總CPU負載是多個事物的總和,其中之一是由3D引擎引起的負載。在嵌入式應用程序中,重要的是在應用程序中使用3D不會導致CPU過載。如果應用程序超出可用CPU,則無法在目標FPS處渲染,並且屏幕上可能出現口吃或其他偽影。
下圖顯示了在NVIDIA TX2上使用高端示例測量的CPU負載以及瑞薩R-Car D3上的低端示例:
高端示例:使用新的Qt 3D Studio 2.4,與Qt 3D Studio 2.3相比,我們看到CPU負載大幅提升51%,同時FPS從20 FPS提升至133 FPS。運行時2.3的總負載為167%(總計400%),運行時2.4的負載下降到81%。請注意,增加的渲染速度也會影響CPU負載。在vsync on和FPS上限為60 FPS時,CPU負載為74%。
低端示例:我們看到CPU負載僅有5%的適度改善,這主要是由於應用程序主要是Qt Quick。但這是因為FPS同時從41 FPS升至60 FPS。還應該注意的是,R-Car D3的CPU功能不是很強大,因此整個應用程序的FPS增加會對整體CPU負載產生影響。
內存使用改進
對於任何圖形,特別是3D,它是通常占用大部分RAM的資產。有一些方法可以優化,最明顯的是避免不必要的細節水平和利用紋理壓縮。出於本博文的目的,我們不會使用任何特定的優化方法。測量使用完全相同的應用程序完成,除了使用不同版本的Qt 3D Studio運行時之外沒有其他任何變化。
下圖顯示了使用NVIDIA TX2上的高端示例測量的RAM使用情況以及瑞薩R-Car D3上的低端示例:
高端示例:與Qt 3D Studio 2.3相比,新的Qt 3D Studio 2.4減少了48MB。這比應用程序的整體RAM使用量減少了20%。
低端示例: 在更簡單的示例中,使用新的2.4運行時,RAM使用量減少了9MB。百分比這是應用程序的整體RAM使用量減少15%。
這是如何實現的?
這些改進確實很大,特別是在嵌入式設備上,所以有人可能想知道新版本中的改變是什么?我們所做的是使用與Qt 3D Studio 1.x版本相同的運行時架構,而不是在Qt 3D上運行。3D引擎的核心邏輯仍然與之前相同,但它直接在OpenGL上運行,而不是使用Qt 3D。這提供了顯着改進的性能,尤其是在嵌入式設備上,而且在更強大的桌面系統上。通過直接在OpenGL上運行Studio的3D引擎,我們可以避免渲染開銷並簡化架構。更簡單的體系結構轉換為內部信令更少,內存中的對象更少,並且多個呈現線程之間的同步需求減少。所有這些使我們能夠對Qt 3D Studio 1進行進一步的優化。
3D運行時的更改不需要對大多數項目進行任何更改。只需更改import語句(導入QtStudio3D.OpenGL 2.4而不是 導入QtStudio3D 2.3)然后用新的Qt 3D Studio 2.4重新編譯就足夠了。由於API和與應用程序相關的3D引擎部分與之前相同,所有相同的材質,着色器等都像以前一樣工作。在極少數情況下需要進行一些更改,例如某些自定義材料,這些變化相當小。
獲得Qt 3D Studio 2.4
如果您還沒有嘗試過Qt 3D Studio 2.4預發行版,那么您應該采取這種方式。它可以在預覽節點下的在線安裝程序中使用。目前我們已經發布了第三個Beta版,很快就會發布候選版本。最終版本的目標是在6月底之前發布。Qt 3D Studio在商業和開源許可下均可使用。
11條評論
https://blog.qt.io/blog/2019/06/18/significant-performance-improvements-qt-3d-studio-2-4/
涼!
我們可以期待Qt3d也能利用這些變化嗎?目前Qt3d的表現還不錯。對於有許多物體的大場景,渲染器遠不及像Godot這樣的其他3D引擎的性能。
干杯
@Eli:遺憾的是,由於結構上的差異,無法利用Qt 3D進行這些改進。
“我們所做的是使用與Qt 3D Studio 1.x版本相同的運行時架構,而不是在Qt 3D上運行。3D引擎的核心邏輯仍然與之前相同,但它直接在OpenGL上運行,而不是使用Qt 3D。“
這是否意味着Qt3D的結束?難道我們不能擁有一個清晰直觀的聲明性3d層,它在易用性和性能之間取得了適當的平衡嗎?直接使用OpenGL就像在Qt C ++中編寫程序時一樣編程......在編程語言中類比:我並不主張通過Java獲得的易用性或更糟糕的javascript(無骨架語言如此非結構化,如此敏捷,如此前衛,最好的框架稱為BACKBONE :))))Qt3D不是IT,不是那種神奇的平衡嗎?好難過…
@Dediu:不,這對Qt 3D沒有影響。它繼續是完全支持的模塊,具有自己的編程API。只是Qt 3D Studio 2.4運行時不再使用Qt 3D,而是直接適應OpenGL。對Qt 3D的任何其他用戶沒有影響。
嗨Tuukka Turunen感謝您回答我們的問題
Qt3d studio現在有一個獨立的渲染后端完全與qt3d解耦而不是修復當前的設計,這有點奇怪。從我的角度來看,這只能意味着當前的qt3d架構存在一些缺陷。必須保持兩個單獨的渲染后端有點奇怪。
我希望我聽起來不苛刻
干杯
似乎Qt3D中的開發優先級有一段時間是顛倒的,其中添加了操縱角色動畫等功能,而基本原理是錯誤的,並且在許多情況下無法使用。它最近變得更好(Qt 5.13有明顯的質量改進)。我希望對Qt3D的投資繼續。即使性能不等於使用原始OpenGL,在GL,Metal,Vulkan等上運行一個代碼庫的長期好處也值得追求。很想看到更多用於AR / MR的Qt3D示例,特別是圍繞來自ARKit等幀的高效處理,性能損失最小。
@TTGil:是的,Qt 3D正在接受改進和新功能。例如,即將發布的Qt 5.13將支持glTF 2.0場景導入到Qt 3D。
您好TTGil,
您可以在這里找到由Felgo提供的Qt解決方案:https://felgo.com/cross-platform-development/qt-ar-why-and-how-to-add-augmented-reality-to-
您-移動應用
干杯,克里斯
我不知道為什么Nvidia引擎在2D渲染中沒有更好的性能。許多客戶正在使用2D集群。
這個(Qt 3D Studio 2.4)是NVIDIA引擎(或多或少)。2D界面應繼續使用Qt Quick,如https://blog.qt.io/blog/2019/04/02/optimizing-real-time-3d-entry-level-hardware/所示
我認為Qt3D將從這些改進中受益。然后我研究了博客和評論,並意識到事實並非如此。Qt3D API很好,有很多潛力。