使用QML來做3D應(yīng)用開發(fā),優(yōu)化3D場景和優(yōu)化設(shè)計對3D應(yīng)用程序?qū)⒂兄@著性能影響。本文描述幾種優(yōu)化3D場景的規(guī)則和方法。
一、四種3D場景設(shè)計方式
3D場景有多種不同的創(chuàng)建組合方式。例如:高級場景、低級場景、混合場景和Vertex顏色場景。與其他版本的場景相比,高級場景中包含了更多的對象。
低級、混合和Vertex場景包含的對象相對更少,因為它們已經(jīng)通過將幾何形狀和烘烤材料結(jié)合到紋理中進行了優(yōu)化。下圖顯示了Navigator視圖中每個場景中的組件,用于對比說明場景之間的結(jié)構(gòu)差異:
(1-1)低級場景
如上圖所示,低級場景總共包含12個對象。每個模型(例如櫥柜、燈、盤子和水槽)都是獨立的網(wǎng)格。
(1-2)高級場景
如上圖所示,高場景總共包含27個對象。這個場景在其他方面與低級場景相似,但含有更多的細節(jié)和動畫組件(如可以打開的櫥柜門和烤箱的門閂)
(1-2)混合場景
混合場景是將所有的網(wǎng)格組合成一個單獨對象,所有材料都被烘焙成單一的紋理。
(1-3)Vertex顏色場景
該場景將所有的網(wǎng)格組合成一個單獨的對象,網(wǎng)格的顏色由.mesh文件的頂點數(shù)據(jù)描述,其中包括材質(zhì),沒有紋理。
在本小節(jié)中,出現(xiàn)的高級場景、低級場景、混合場景和Vertex顏色場景四種場景,本質(zhì)上是一種組織3D場景的方法。在高級場景中,包含的3D對象就非常多,為什么需要包含這么多的3D對象呢,多數(shù)情況下,就是為了將小對象分離出來做動畫效果和動畫控制。如果一個場景中沒有動畫需求,則完全可采用混合場景和Vertex顏色場景的方法來設(shè)計3D場景,還提升了應(yīng)用渲染性能。
二、3D場景優(yōu)化規(guī)則
為了優(yōu)化3D場景的圖形渲染性能,首先應(yīng)考慮是否需要給3D對象、燈光、相機或場景中的組件添加動畫,如果不需要就盡可能簡化場景結(jié)構(gòu),例如:可以將幾何圖形和烘烤材料結(jié)合到紋理中。理想情況下,將3D圖像預(yù)渲染為2D圖像是很好的選擇。檢查場景是否存在相同網(wǎng)格的多個實例,如果存在,則只導(dǎo)入一個網(wǎng)格實例,然后在場景中復(fù)制它,并為每個副本使用相同的材質(zhì)。
(2-1)Scene Graph
在Qt Design Studio中,由Navigator中的樹形視圖表示場景圖。同時,我們還可以在Code視圖中查看節(jié)點的層次結(jié)構(gòu)。通過最小化場景圖,可以減少運行場景時所需的工作。因為具有復(fù)雜功能的深層層級嵌套將增加性能成本,為了優(yōu)化場景圖,應(yīng)盡可能避免不必要的組和復(fù)雜的層次結(jié)構(gòu)。
(2-2)資源文件優(yōu)化
盡可能減少資源文件的使用和加載,可以提高渲染性能(在實際3D應(yīng)用開發(fā)過程中,由于多種因素,設(shè)計過程中資源文件往往都非常多,一般的做法是:一邊開發(fā)一邊優(yōu)化資源文件)。
在設(shè)計3D素材模型時,應(yīng)盡量使用最少的三角形或頂點來達到預(yù)期的建模效果。因為在3D場景渲染時,較少的圖形數(shù)量可以降低內(nèi)存需求量并有助于快速渲染。
(2-3)CPU性能優(yōu)化
顯示3D對象需要CPU或者GPU的大量處理工作。處理每個3D組件都會消耗資源,因此減少可見對象的數(shù)量可以減少CPU的工作量。優(yōu)化建議如下:
(1)合并位置相鄰且共享紋理的對象。
注意:合并不共享紋理的對象不會在運行場景時提高CPU性能。
(2)將不同的紋理組合成一個紋理圖集,以此方法來減少材料的使用。
(3)避免多次渲染對象。
(2-4)優(yōu)化模型的幾何形狀
(1)減少模型中三角形的使用數(shù)量。
(2)減少用加倍頂點創(chuàng)建的UV映射接縫和硬邊的數(shù)量。
三、總結(jié)
下表總結(jié)了優(yōu)化3D場景相關(guān)的最佳實踐:
序號 | 3D行為 | 最佳實踐建議 |
---|---|---|
1 | 從3D場景中獲得最佳性能 | 如果不需要動畫,可以將3D場景預(yù)渲染成2D圖像。 |
2 | 場景中物體的動畫 | 合并所有靜態(tài)對象,只導(dǎo)出每個動畫組件中的一個。 |
3 | 相機動畫 | 雖然在這種情況下使用2D圖像是不可取的,但應(yīng)該將所有的幾何圖形、烘焙光照和材質(zhì)合并到一個單一的材質(zhì)中 |
4 | 光照動畫 | 優(yōu)化方法與“相機動畫”一樣 |
5 | 在網(wǎng)格分離的3D場景中獲得最佳性能 | 對于同一個網(wǎng)格的每個實例使用相同的材質(zhì) |
6 | 在運行時禁用網(wǎng)格渲染 | 保持特定的網(wǎng)格分離,合并其他組件。 |
7 | 使用低內(nèi)存的烘焙紋理 | 將網(wǎng)格顏色烘焙成頂點顏色 |
現(xiàn)代軟件,3D開發(fā)屬于較高級的開發(fā)了(做游戲的除外啦,哈哈),Qt Quick提供的3D開發(fā)基礎(chǔ)組件的功能也非常強大,高版本的Qt對3D性能做了較多優(yōu)化,且3D開發(fā)作為Quick的未來發(fā)展方向之一,也得到了官方的大量優(yōu)化和維護。
下列為官方提供的一個車載中控終端軟件demo,在軟件中融入了3D元素,形象直觀且炫酷。
審核編輯:劉清
-
cpu
+關(guān)注
關(guān)注
68文章
10825瀏覽量
211146
原文標題:QML性能優(yōu)化 | 3D場景優(yōu)化
文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論