? 最近中文字幕2019mv,水蜜桃精品导航网
聯(lián)系我們

給我們留言

聯(lián)系我們

地址:福建省晉江市青陽(yáng)街道洪山路國(guó)際工業(yè)設(shè)計(jì)園納金網(wǎng)

郵箱:info@narkii.com

電話:0595-82682267

(周一到周五, 周六周日休息)

當(dāng)前位置:主頁(yè) > 3D教程 > 圖文教程

UE4 性能優(yōu)化工具(Profiler Tool)

來(lái)源: 52vr | 責(zé)任編輯:傳說(shuō)的落葉 | 發(fā)布時(shí)間: 2019-06-11 08:29 | 瀏覽量:

Profiler Tool Reference

https://docs.unrealengine.com/latest/INT/Engine/Performance/Profiler/index.html

 

原文:

https://www.unrealengine.com/zh-CN/blog/how-to-improve-game-thread-cpu-performance

 

您游戲中的幀頻率是不是太低? 您了解為什么會(huì)發(fā)生這種現(xiàn)象嗎? 這是不是由于您同時(shí)生成了太多敵人?還是由于某個(gè)特定敵人過(guò)于消耗系統(tǒng)資源? 是由于您設(shè)置了過(guò)多的視覺(jué)特效,還是由于您所設(shè)計(jì)的戰(zhàn)斗系統(tǒng)所造成的?

放松一下,不要一下子就得出結(jié)論!

嘗試修復(fù)任何性能問(wèn)題的第一步是收集信息,這樣您可以做出明智的決策,以確定下一步該怎么做。 有些人會(huì)很自然地說(shuō)這樣的話“當(dāng)然慢啦! 這個(gè)關(guān)卡有100,000個(gè)actor耶!”,但如果您沒(méi)有收集適當(dāng)?shù)臄?shù)據(jù),您可能就會(huì)嘗試在關(guān)卡中花費(fèi)大量時(shí)間來(lái)降低actor的數(shù)量,而沒(méi)有嘗試修復(fù)真正造成性能表現(xiàn)瓶頸的問(wèn)題,這些問(wèn)題可能是完全無(wú)關(guān)的問(wèn)題,而且修復(fù)起來(lái)要容易得多。

明白! 可是從哪里開(kāi)始著手呢?

您要采集的第一份數(shù)據(jù)是需要了解,您的性能瓶頸到底是出現(xiàn)在游戲線程中、在渲染(描畫(huà))線程中、還是出現(xiàn)在GPU中。 要了解具體原因,您需要以非調(diào)試版本來(lái)啟用游戲,然后輸入控制臺(tái)命令“stat unit”,從而顯示完成各項(xiàng)任務(wù)需要花費(fèi)多少時(shí)間。

 

[UE4]性能優(yōu)化工具(Profiler Tool)

 

您的時(shí)間指的是生成游戲中每一幀所需要花費(fèi)的總體時(shí)間。 由于在完成一幀前會(huì)同時(shí)同步游戲和描畫(huà)線程,時(shí)間常常接近于這些線程中的時(shí)間。 GPU時(shí)間衡量的是顯卡需要多長(zhǎng)時(shí)間來(lái)渲染場(chǎng)景。 由于GPU時(shí)間與幀同步,它的值很可能也類似于時(shí)間。

如果時(shí)間非常接近于游戲時(shí)間,那么您的瓶頸是游戲線程。 如果時(shí)間非常接近于描畫(huà)時(shí)間,那么您的瓶頸是渲染線程。 如果兩者都與GPU時(shí)間不怎么接近,那么您的瓶頸就是顯卡。

本文中,我們僅僅討論如何處理游戲線程中的問(wèn)題。

哇!現(xiàn)在我知道游戲的瓶頸是游戲線程啦、 接下來(lái)怎么做?


查看游戲線程的性能表現(xiàn)的最佳工具是使用統(tǒng)計(jì)數(shù)據(jù)分析程序。 您可以在控制臺(tái)輸入“stat startfile”來(lái)啟用分析,您可以按下鍵盤上的波浪鍵 (~)來(lái)打開(kāi)控制臺(tái)。 讓我們至少運(yùn)行10秒左右,這樣可以獲得許多幀間的良好平均值。 更長(zhǎng)的分析時(shí)間也很好,而且我們可以使用它們來(lái)檢測(cè)間隙時(shí)間較長(zhǎng)的問(wèn)題,但一般不推薦讓分析時(shí)間超過(guò)30分鐘,因?yàn)檫@樣文件就太大了。 當(dāng)您獲得良好的時(shí)間樣本后,您可以輸入“stat stopfile”來(lái)終止分析。 在路徑Saved/Profiling/UnrealStats下,會(huì)有關(guān)于您項(xiàng)目文件夾的ue4stats文件。

好的,我進(jìn)行了分析。 我該如何打開(kāi)這個(gè)分析文件?

如果需要打開(kāi)您捕獲的分析文件,您必須使用UnrealFrontend(虛幻前端),它和UE4Editor位于同一個(gè)文件夾,或者您也可以打開(kāi)窗口菜單中的編輯器的Session Frontend(會(huì)話前端)選項(xiàng)卡。 當(dāng)您打開(kāi)了會(huì)話前端選項(xiàng)卡后,您需要切換到Profiler(分析程序)的小選項(xiàng)卡。 在該處,您可以選擇載入您最近捕獲的ue4stats分析文件。

 

[UE4]性能優(yōu)化工具(Profiler Tool)

 

我現(xiàn)在打開(kāi)了分析文件,我現(xiàn)在應(yīng)該查看哪些數(shù)據(jù)?

很重要的信息就是位于底部的功能樹(shù)。 展開(kāi)GameThread(游戲線程)項(xiàng)目,然后往下拉,直到您看到超過(guò)幾毫秒的“Inc Time”(包含時(shí)間)條目,而且其不包含許多子項(xiàng)或不包含任何子項(xiàng)。 同時(shí)關(guān)注一下“Calls”(調(diào)用)數(shù)列,它顯示了每幀調(diào)用的統(tǒng)計(jì)數(shù)據(jù)的平均次數(shù)。 不要被“CPU Stall”(CPU停滯時(shí)間)項(xiàng)目弄糊涂了。 它們顯示的是線程等待處理其他內(nèi)容時(shí)所花費(fèi)的時(shí)間,所以不是主要數(shù)據(jù),而且僅僅會(huì)在幀頻率受限或者游戲進(jìn)程不為瓶頸時(shí)才會(huì)顯示出來(lái)。 在下方的分析數(shù)據(jù)中,我們發(fā)現(xiàn)了存在問(wèn)題的字體緩沖時(shí)間。

 

[UE4]性能優(yōu)化工具(Profiler Tool)

 

這是本周在Fortnite中發(fā)現(xiàn)的真正問(wèn)題! 在本例中,我們顯示了基于相機(jī)和重要游戲?qū)ο箝g距離而變換大小的許多文本。 由于我們?cè)诿恳粠紝?duì)文本調(diào)整大小,所以在Slate和虛幻引擎用戶界面系統(tǒng)中的字體緩存中充滿了上百個(gè)相同的字符串。 修復(fù)的方法是停止基于距離來(lái)動(dòng)態(tài)縮放文本,也可以根據(jù)特定間距的閥值來(lái)分別變更文本大小。

這個(gè)方法對(duì)于Fortnite很好用,但我出現(xiàn)的問(wèn)題不是“字體緩存”。

您需要關(guān)注一些固定的需要注意的數(shù)據(jù)。

其中一個(gè)重要的項(xiàng)目是FTickFunctionTask。 此項(xiàng)目下是正在更新的每個(gè)actor和組件。 一般來(lái)說(shuō),降低每幀更新的actor和組件的數(shù)量都可以很好地加速游戲。

 

[UE4]性能優(yōu)化工具(Profiler Tool)

 

如果您的游戲中存在著應(yīng)永不更新的actor并且您正在使用C++代碼,您可以將其放置在actor的構(gòu)造函數(shù)中,以完全防止其更新:

PrimaryActorTick.bCanEverTick = false;

如果actor僅在某些時(shí)候進(jìn)行更新,您可以轉(zhuǎn)而將其放置在構(gòu)造函數(shù)中:

PrimaryActorTick.bCanEverTick = true;

PrimaryActorTick.bStartWithTickEnabled = false;

然后您可以使用SetActorTickEnabled函數(shù)來(lái)啟用和禁用更新。

另一個(gè)要關(guān)注的是BlueprintTime(藍(lán)圖時(shí)間)。 找到這個(gè)值的最佳方法是切換到包含(合并)視圖并在列表中找到它。 這樣就可以把所有的BlueprintTime(藍(lán)圖時(shí)間)條目組合到單一行中。 如果您選擇BlueprintTime(藍(lán)圖時(shí)間),然后切換回層次視圖,則其會(huì)選擇所有藍(lán)圖代碼被執(zhí)行的位置,這樣能讓您很好地了解花費(fèi)時(shí)間進(jìn)行處理的位置及其位于哪個(gè)藍(lán)圖中。

 

[UE4]性能優(yōu)化工具(Profiler Tool)

 

另一個(gè)常見(jiàn)的問(wèn)題位置是TickWidgets(更新控件)。 如果這個(gè)統(tǒng)計(jì)數(shù)據(jù)值很高,這表示您可能同時(shí)顯示了太多控件,或者這些控件上的屬性代理過(guò)于復(fù)雜。 一些slate屬性,比如可見(jiàn)性,可能會(huì)在每幀被調(diào)用好幾次,這樣它們的值必須要小而且能及時(shí)返回。

您是不是在游戲中有很多骨架網(wǎng)格物體? SkinnedMeshComp更新時(shí)間有時(shí)也會(huì)消耗很多系統(tǒng)資源。 請(qǐng)嘗試降低顯示在分析文件中的骨架中的骨骼數(shù)量,或者降低動(dòng)畫(huà)藍(lán)圖的復(fù)雜度。 如果您不需要在無(wú)法看到骨架網(wǎng)格物體時(shí)更新動(dòng)畫(huà),請(qǐng)考慮將骨架網(wǎng)格物體組件上的MeshComponentUpdateFlag(網(wǎng)格物體組件更新標(biāo)識(shí))正確設(shè)置為OnlyTickPoseWhenRendered(僅在渲染時(shí)更新姿勢(shì))。 請(qǐng)注意,將此標(biāo)識(shí)設(shè)置為AnimNotifies(動(dòng)畫(huà)通知)將使得這些網(wǎng)格物體不被渲染時(shí)不再對(duì)其進(jìn)行觸發(fā)。

實(shí)際上,我正在查找為何游戲不斷地產(chǎn)生卡頓。

最好的方法是尋找時(shí)間軸中出現(xiàn)的頓卡,選擇其周圍的幀,然后將視圖變更為“最大“,而不是“平均“。 這樣會(huì)變更所有數(shù)字,從而在選擇的幀數(shù)范圍中顯示峰值,而不是顯示平均值。

 

[UE4]性能優(yōu)化工具(Profiler Tool)

 

謝謝!

對(duì)總體游戲性能來(lái)說(shuō),使用分析程序是很關(guān)鍵的。這樣可以通過(guò)防止您因無(wú)法了解真正的問(wèn)題而過(guò)度猜測(cè)。 如需了解分析程序中所有功能的更多信息,請(qǐng)?jiān)L問(wèn)我們的文檔頁(yè)面。https://docs.unrealengine.com/latest/INT/Engine/Performance/Profiler/index.html


相關(guān)文章
網(wǎng)友評(píng)論

您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)

關(guān)閉

全部評(píng)論:0條

推薦
熱門