分析頂點格式
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
您可以利用影格剖析,診斷一些可能與頂點相關的效能問題。使用「Commands」(指令) 窗格,即可查看遊戲在特定影格中執行的所有繪製呼叫,以及每次繪製呼叫繪製的基本呼叫數。這可以估計在單一影格中提交的端點總數。
Vertex 屬性壓縮
遊戲可能會遇到的其中一個常見問題,就是平均頂點尺寸過大。如果提交的頂點數量達到較高的平均頂點大小,GPU 讀取作業時就會產生較大的頂點記憶體讀取頻寬。
如要觀察特定繪製呼叫的頂點格式,請完成下列步驟:
選取所需的繪圖通話。
這可以是一般的場景繪製呼叫、包含大量端點的繪製呼叫、複雜字元模型的繪製呼叫,或其他其他類型的繪製呼叫。
前往「Pipeline」窗格,然後按一下「IA」取得輸入組合。這會定義傳入 GPU 的頂點格式。
觀察一系列屬性及其格式;例如,R32G32B32_SFLOAT
是 3 元件的 32 位元帶正負號浮點值。
頂點屬性經常可以壓縮,並盡量減少繪製的模型品質。我們特別建議您採取以下做法:
- 將頂點位置壓縮為半精度 16 位元浮點值
- 將 UV 紋理座標壓縮為 16 位元無正負號整數 Ushort
- 透過四元數編碼法線、正切和雙面向量來壓縮切線空間
其他屬性也可能會依個案情況考慮至較低精確度類型。
頂點串流分割
您也可以調查頂點屬性串流是否正確分割。在行動裝置 GPU 等圖塊轉譯架構上,系統會先在繫結傳遞中使用頂點位置,建立每個圖塊處理的基本特徵分塊。如果頂點屬性與單一緩衝區交錯,所有頂點資料都會讀取到快取以進行繫結,即使只使用頂點位置亦然。
為減少頂點讀取記憶體頻寬並提升快取效率,並減少繫結傳遞耗費的時間,頂點資料應拆分為兩個不同的串流,一個用於頂點位置,另一個則用於所有其他頂點屬性。
如何調查頂點屬性是否正確分割:
選取所需的繪圖通話,並記下繪製通話號碼。
這可以是一般的場景繪製呼叫、包含大量端點的繪製呼叫、複雜字元模型的繪製呼叫,或其他其他類型的繪製呼叫。
前往「Pipeline」窗格,然後按一下「IA」取得輸入組合。這會定義傳入 GPU 的頂點格式。
觀察頂點屬性的繫結;通常這些屬性可能會線性增加 (0、1、2、3 等),但並非一定如此。頂點位置通常是所列的第一個頂點屬性。
在「State」窗格中找出 LastDrawInfos
,然後展開相符的繪製呼叫號碼。然後展開這個繪製呼叫的 BoundVertexBuffers
。
觀察指定繪製呼叫期間繫結的頂點緩衝區,索引與稍早的頂點屬性繫結相符。
展開繪製呼叫的頂點屬性繫結,然後展開緩衝區。
觀察緩衝區的 VulkanHandle
,代表端點資料來源的基礎記憶體。如果 VulkanHandle
不同,表示屬性來自不同的基礎緩衝區。如果 VulkanHandle
相同,但偏移值較大 (例如大於 100),則屬性可能依然來自不同的子緩衝區,但需要進一步調查。
如要進一步瞭解頂點串流分割,以及如何在不同遊戲引擎上解析端點,請參閱我們的網誌文章。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2023-12-01 (世界標準時間)。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"缺少我需要的資訊"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"過於複雜/步驟過多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"過時"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻譯問題"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/程式碼問題"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"容易理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"確實解決了我的問題"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u4e0a\u6b21\u66f4\u65b0\u6642\u9593\uff1a2023-12-01 (\u4e16\u754c\u6a19\u6e96\u6642\u9593)\u3002"}
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2023-12-01 (世界標準時間)。"]]