UE4-PS4開發渲染線程優化方法及記錄


先說方法:

  1. Launch 到 PS4 Devkit上,在PS4上輸入Stat unit 看瓶頸在哪里。我們發現Frame 和Draw數值幾乎一樣,其余兩項相對較小,這表明瓶頸在渲染線程上。
  2. 關於渲染線程的相關知識:https://docs.unrealengine.com/udk/Three/RenderThreadProfilingHome.html
  3. 在編輯器中打開Session Frontend,打開Profiler,在左邊的MySessions中找到並選擇當前激活的(后面有綠色點)Launch On Device>PS4 Development Kit
  4. 點擊右側的Data Capture,稍等一段時間(十幾秒以上)再次點擊DataCapture,會提示是否把數據傳輸到本地,選擇是
  5. 傳輸完成后在下方出現的提示信息中點擊“Load File”即可打開數據。注意,該數據存儲在開發機上,如果以后需要再次打開改數據,參考如下路徑:O:\開發機ip地址\data\工程名稱\工程名稱\saved\profiling\unrealstats\,所有的capture 文件都放在這里,文件夾名稱都包含了時間,這里O:是開發機硬盤在PC上的映射盤符。
  6. 打開后在graph view 中拖動選擇一定范圍的數據,然后選擇下方的Maximum,然后在Event Name中找到問題線程,(目前是Render Thread)。

  7.  

    逐層展開查找耗時最多的。重點看Inc Time(MS)和Inc Time(%)這兩項,點擊其標題可以以此項進行排序,默認即是以Inc Time遞減順序排序。注意CPU Stall - Wait For Events可以忽

    略,出現這個通常是cpu在等待GPU。

我們找到的問題記錄:


  1. Init View中的Init dynamic shadow,占據了13ms的渲染時間,並且下方給出了具體是那些actor的問題
    解決方法:
    a. 把streetLightActor中的燈光投影徹底關閉(這里不是很清楚,為什么沒有開啟他們的dynamic shadow,也出現在dynamic shadow的條目里)
    b. 把Directional Light的動態陰影關閉
    結果:平均幀率從20提高到30,幀率提高了10
  2.  第一個問題解決后,再次Profile,找到的問題是Occlusion Cull,占用了不到4ms,原因是場景中物體太多,culling帶來了負擔

    解決:
    a. 場景中的獨立物體采用distance culling,
    b. 刪除大量背景樹木,犧牲一點效果來換取效率
    這里提供兩篇很好的參考:
    http://timhobsonue4.snappages.com/culling-visibilityculling.htm
    https://answers.unrealengine.com/questions/173484/cpu-render-thread-optimization.html
    結果:似乎幀率並沒有大幅的提升……

  3. 經過多次測試,發現並不存在特別明顯的某方面的瓶頸,渲染線程每項的耗時都比較高,因此決定需要從減少同時渲染物體數量上着手。我們的場景類似於賽車類游戲的賽道,場景很大,道具(包括燈光)種類很少,但是由於路徑很長,重復量非常大。我們將整體場景沿玩家行進路線進行了場景切割(分成了16個區域),除路上的路燈模型、路燈燈光、路下方的支撐柱以及路上的標志牌燈,也同時把路旁的廣告牌等道具划分到相應的區域內,采取了Streaming Level的方式加載這些關卡。結果幀率得到了極大的提升,可以說從根本上解決了幀率低的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM