[UE4]性能优化指南(程序向)
生活随笔
收集整理的這篇文章主要介紹了
[UE4]性能优化指南(程序向)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
零散記錄
比如:場景中有幾百個角色,但不是每個角色都需要攝像機和彈簧臂,那么在構造函數中就不要創建攝像機和彈簧臂組件。
[Test] Blueprint vs C++ Performance vs Nativized BP
https://www.reddit.com/r/unrealengine/comments/6qtxy3/test_blueprint_vs_c_performance_vs_nativized_bp/
Min Screen Radius for Lights
Min Screen Radius for Early Z Pass
Min Screen Radius for Cascaded Shadow Maps
燈光優化
定向光/平行光(Directional Light) < 點光源(Point Light) < 聚光燈(Spot Light)。
這個標準不局限于UE4,其他引擎也是這樣。當光源數量在場景中達到一定量級時,3種燈光的性能差距也是數量級上差距。
陰影優化
測試用例: 500 個 Actor 同屏,攝像機高度4000,DirectionalLight 的屬性Dynamic Shadow Distance StationaryLight的值要大于攝像機到Actor的直線距離(注意:是到每個Actor的直線距離,所以值盡量要設置的大一些,比5000),否則幀率從200 fps 下降到 100 fps。
Dynamic Shadow Distance StationaryLight開啟后能提升性能的原因:
Dynamic Shadow Distance StationaryLight 表示在多少距離內使用動態陰影,超過這個距離之外Fade成靜態陰影,而Fate成靜態陰影后就可以提升性能
材質優化
Performance Guidelines for Artists and Designers
https://docs.unrealengine.com/latest/INT/Engine/Performance/Guidelines/
物理與碰撞優化
建議自己實現一個簡易的自定義Collision,比如球形Collision,然后計算該 Collision 與單位之間的直線距離,來判斷是否是否發生了碰撞,并且降低檢測間隔,比如 0.1秒一次。
動畫優化
USkinnedMeshComponent::MeshComponentUpdateFlag = OnlyTickPoseWhenRendered;
默認是AlwaysTickPoseAndRefreshBones,表示不管是否被渲染(在可見區域內),都執行 Tick 和 RefreshBoneTransforms。
舊版本中MeshComponentUpdateFlag叫做SkinnedMeshUpdateFlag。
如果關閉動畫Tick,和Tick相關的邏輯就會失效,比如Transform (Modify) Bone。
默認會被編譯優化的參數類型包括:
member variables;
negated boolean member variables;
members of a nested structure;
具體說明見官方文檔:
Animation Optimization
https://docs.unrealengine.com/en-us/Engine/Animation/Optimization
Animation Fast Path Optimization
https://docs.unrealengine.com/en-us/Engine/Animation/Optimization/FastPath
UI優化
比如場景內有一千個單位,每個單位上都創建有WidgetComponent,即使這些WidgetComponent沒有顯示任何東西,也會產生巨大的GPU開銷。
Epic Games工程師分享:如何在移動平臺上做UE4的UI優化?
http://youxiputao.com/articles/11743
位移優化
特效優化
AI優化
測試:500個角色,AI Controller Class 設置為:null、 AIController、PlayerController 的幀數分別為 120 fps、 100 fps、75 fps。
Dedicated Server優化
Project Settings -> Engine -> Animation -> 勾選 Strip Animation Data on Dedicated Server.
如果在動畫中添加了觸發修改數據的 Notify Event,勾選此選項會有問題。請確保動畫中掛載的 Notify 只是表現相關,不涉及游戲邏輯。
FBodyInstance->bSimulatePhysics 設置為false。默認為false。
SkeletalMeshComponent::bEnablePhysicsOnDedicatedServer 設置為 false , 默認為 true 。但這樣會導致物理驗算以客戶端為準,有被外掛hack的風險。bEnablePhysicsOnDedicatedServer 在 run-time 修改不生效。
UPrimitiveComponent->bGenerateOverlapEvents 設置為false,角色藍圖中的 CollisionComponent 默認為true。
參考資料
通過優化在UE4中實現良好性能和高質量視覺效果
http://gad.qq.com/program/translateview/7160166
CPU Profiling
https://docs.unrealengine.com/en-us/Engine/Performance/CPU
GPU Profiling
https://docs.unrealengine.com/en-us/Engine/Performance/GPU
總結
以上是生活随笔為你收集整理的[UE4]性能优化指南(程序向)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将结构体写入文件_将COCO检测结果写入
- 下一篇: UML类图与类间六种关系表示