用NVPerfHUD來分析3D程式

2021-04-15 13:54:16 字數 1346 閱讀 2905

nvperfhud

是乙個很好的3d

程式除錯工具,它是nvperfkit

的一部分,由nvidia

開發,在寫d3d

程式時(它不能檢視opengl

程式)加入簡單的語句就可以利用nvperfhud

來除錯察看顯示卡的工作情況了。

最近在使用時,感覺越來越方便,所以在這裡說一下最近用的最多的兩個功能。

1. 用frame debugger來檢視單獨一幀的渲染情況。

(1)在frame debugger中可以看到多邊形的渲染順序、每次渲染(如drawindexedprimtives)命令所使用的紋理、渲染的目標(後快取還是紋理等)、渲染命令的呼叫次數等。

(2)這些內容通常都是我們需要的,比如我們在使用引擎時,引擎通常會對物體和材質的渲染順序進行排序,就導致我們的顏色混合不能出現預期的效果,這時候通過framedebugger來檢視物體及其材質的各個pass是按如何的順序進行渲染的,就可以查出問題可能的原因,也幫助我們了解了引擎內部的工作原理。

(3)而像紋理等,我們可以檢視其是否是我們所期望的。我們將滑鼠放在framedebugger視窗中的紋理上,就可顯示出滑鼠所在位置的紋理的值(如rgba值),對於一些實時渲染出的紋理或者動態寫入資料的紋理,這樣尤其有用。

(4)在advanced頁面中還能看到所使用的頂點和片元shader程式。我們可以檢視傳給著色程式的引數的實際值,以確定其是否正確。

2. 確定效能瓶頸

對不是瓶頸的部分做優化時不會提高程式的效能的,所以要優化程式得先查出效能的瓶頸在**。如上圖,通常確定效能瓶頸的順序是從開始渲染管線的最末段開始進行分析,當然如果你大概能猜到瓶頸在**,你可以直接從那個部分查起。

(1)    在程式中將顏色快取從32位改為16位,檢視fps值是否增加,以確定瓶頸是否因為幀真快取頻寬引起。

(2)    在nvperfhud中按下ctrl+t將紋理強行設定為2*2大小,檢視fps值是否增加,以確定瓶頸是否因為紋理頻寬引起。

(3)    在nvperfhud中按下ctrl+1、ctrl+2……ctrl+9,nvperfhud會自動強行簡化各個profile的pixel shader程式,檢視fps值是否增加,以確定瓶頸是否因為複雜的畫素程式引起。

(4)    在nvperfhud中按下ctrl+v去掉頂點單元,檢視fps值是否增加,以確定瓶頸是否因為頂點處理引起,包括頂點/索引快取的傳輸、vertex shader程式和無效的快取lock。

(5)    在程式中更改頂點格式的大小,檢視fps值是否增加,如果增加則瓶頸在頂點/索引快取的傳輸。

(6)    可以利用ctrl+n去掉gpu的工作,也就是這個時候gpu的計算速度無限快,如果fps增加則瓶頸在cpu上。

--arenak--

用NVPerfHUD來分析3D程式

nvperfhud是乙個很好的3d程式除錯工具,它是nvperfkit的一部分,由nvidia開發,在寫d3d程式時 它不能檢視opengl程式 加入簡單的語句就可以利用nvperfhud來除錯察看顯示卡的工作情況了。最近在使用時,感覺越來越方便,所以在這裡說一下最近用的最多的兩個功能。1 用fra...

3d轉換經驗分析

總結 旋轉的時候 如 rotatex 角度 tansform origin left center 或者 right center rotatey 角度 transform origin center top 或者 center bottom 1.面朝前 y軸左側旋轉 角度旋轉為負值 相當於面在前 ...

用qt畫3d圓柱

qwidget是在2d座標第中,要畫3d的就要將3d圖抽象到2d座標中來。當乙個3d圓柱放到平面座標中,如果柱面方向和眼睛水平,則是乙個矩形 如果柱面和眼睛方向水平則是乙個圓,如柱面方向和眼睛垂直並繞x軸旋轉一定角度,那麼就是兩個個橢圓,且底面橢圓不能完全看見。這裡為了是圓柱圓更像圓柱面,我畫的是最...