[UE4]性能优化指南(美术向)
參考自官方文檔:
Performance Guidelines for Artists and Designers
https://docs.unrealengine.com/en-us/Engine/Performance/Guidelines
但是官方文檔寫的太粗燥,對UE4沒有一定了解,很難理解文檔的意圖。這里我在官方文檔的基礎上,結合自己遇到的問題,重新整理了一下,適合對UE4不熟的美術查閱。
以下是針對美術人員和關卡設計師的常規提升性能的指導意見
面向美術
- 盡量減少每個物體上的元件數量。比如概設美術在設計角色形象時,有沒必要為了表現效果為角色加很多裝飾性部件,要把握好。如果是做靜幀動畫沒什么問題,但若是實時渲染的游戲角色,要做取舍。
- 為了讓元件的三角面數更合理(比如每個元件的面數為300+),建議相關模型合并起來。比如,如果游戲沒有換裝需求,那么就將角色的帽子、肩甲等身體部件和身體合并,以減少面數。
- Opaque貼圖(不透明貼圖)速度最快,因為它的Z buffer裁切速度最快;Masked貼圖(蒙版貼圖)稍微慢一點;Translucent貼圖(半透明貼圖)最慢,因為其性能消耗巨大。
- 限制UV接縫數量和硬邊(Maya中叫軟硬邊、Max和Blender中叫光滑組)數量,因為這兩項會在硬件中生成大量頂點。最壞的情況,帶硬邊的高模會生成3倍于建模軟件統計的頂點數(比如:Maya中顯示模型頂點數為1萬,顯卡中實際計算的頂點數為3萬)。
- Skined Mesh(蒙皮網格物體)的頂點處理性能消耗比Static Mesh(靜態網格物體)的高。比如,一個建筑從地面升起的動畫,這種只是整個模型坐標的變化,就不要讓動作美術去K動畫,而應該使用UE4的Timeline去控制StaticMesh的坐標變化,以提升性能;再比如門打開關閉的動畫,也不要手K,可以參考官方ContentExamples中的使用Timeline的做法。
- 當使用了morph targets(比如表情動畫)或者WorldPositionOffset(世界坐標偏移),頂點處理的消耗會大大增加。因為要做緩存,貼圖的查找過程也會非常慢。
UE4材質中的Morph Targets:
UE4材質中的WorldPositionOffset:
- Tessellation(曲面細分)的性能消耗巨大(UE4提供了的運行時曲面細分),盡量避免使用;Pre-tessellation(預處理曲面細分,就是手動在建模軟件中做好細分曲面)通常速度更快。(現在的次世代流程大部分都是使用法線貼圖+低模,也有部分次世代游戲在使用曲面細分,比如PS4游戲《地平線:黎明時分》) UE4材質中的Tessellation Multiplier(開啟方式:修改D3D11Tessellation Mode):
Maya中制作細分曲面流程
https://www.youtube.com/watch?v=L5fOwSmSaW8
- 非常大的物體建議拆成多塊,這樣可以更好的做視距裁切和燈光裁切
- 貼圖格式越小則材質性能越好。比如:DXT1格式為4 bpp(每像素的比特位數),DXT5格式為8 bpp,未壓縮的ARGB為32 bpp。
對于有Alpha通道的貼圖,默認的DXT1格式會壓縮過度,不支持Alpha通道,導致效果丟失,此時可以修改為低壓縮率的格式,比如:UserInterface2D(RGBA)
- 貼圖尺寸越小性能越好(當貼圖近距離顯示時)。有時更小的貼圖尺寸甚至更加平滑,作為雙線性過濾(bilinear filtering )時,比貼圖格式能提供更多的著色器(shader)效果。
- 材質減少著色器指令(shader instruction)和貼圖數量,運行時的查找過程更快。為了優化材質,可以使用UE4材質編輯器中的stats統計(材質編輯器頂部菜單)以及材質復雜度(ShaderComplexity,運行模式下F5,場景編輯模式下Alt + 8,綠色表示消耗極低,白色表示消耗極高)。
點擊Stats,查看貼圖采樣數、貼圖查找時長等。
點擊Platform Stats,查看各個平臺的性能統計(桌面級、安卓、iOS等)
- 如果貼圖在很小的范圍內還能看見(比如視線遠處的模型LOD),則不要禁用紋理貼圖(Mip Maps),否則會由于貼圖緩存缺失而導致性能下降。
Mip Gen Settings 設置為 NoMipmaps表示禁用。
- 一些材質藍圖的計算表達式比較耗,比如:sin、pow、cos、divide、Noise;消耗較低的計算表達式包括:multiply、add、subtract、clamp。
- 陰影模型(shading models,最常見的光照模型,游戲工業中用得多)的性能消耗標準:無光的區域消耗最低,有光的區域是消耗較大,這也是最常見的區域。其他光照模型(比如照明模型Illumination models,電影工業的光照模型)的性能消耗更大。
?
面向關卡設計
- 限制Stationary(固定光源,不是靜態光源)和 Dynamic(動態光源) 燈光的數量。
- 盡量避免使用區域光源(Area light)。4.20提供了區域光源 Rect Light。
- 對場景中較小的物體,編輯其屬性draw distance來獲得更佳的LOD裁切效果
確保LOD設置在一個激進變化的范圍內(比如攝像機從很近一下拉倒很遠,距離變化很小的不用做LOD),且LOD的定點數量變化倍數至少是兩倍。優化時,打開wireframe模式,然后查看是否存在大的色塊,如果有說明優化有問題。如果使用Simplygon(一款商業付費的UE4插件),幾分鐘就可以處理掉整個項目的LOD。
- 盡量將類似信息的光源合并。比如,車的頭燈可以用一個光源以及一個光照函數讓它看起來是兩個燈的效果。
- 靜態光照最快,固定光照稍慢一些,動態光照最慢。
- 按照需要,盡量限制光照的衰減半徑以及光錐的角度。
- 動態/固定點光源是最費的。方向光源要稍好一些,最好的是聚光燈光源。陰影貼圖生成的性能開銷和造成物體陰影的光照視錐體(light frustum)有關。
- 光照函數具有額外的性能開銷(實際開銷取決于材質),并能防止燈光被渲染成 Tiled Light。
- IES profiles 具有額外性能開銷(比光照函數好一些),并能防止燈光被渲染成 Tiled Light。但不要在可以用聚光燈光錐就能完成效果的情形下,還使用 IES。
- Billboards,imposter meshes,或 skybox textures 都能用來代替實際的幾何體物件并有效的提高性能。
- 好的關卡設計師能夠將遮蔽裁剪納入考慮優化關卡(添加一些阻擋視線的物件來提高性能)。使用 r.VisualizeOccludedPrimitives 可以直接查看。
控制臺命令開啟遮擋物件可視化:
- 避免使用 Light Propagation Volumes,如果要使用,使用 GIReplace 材質表達式,或者在大部分物件上禁用它,以提升性能。
- 在不需要的地方應該關閉陰影生成( shadow cast),一個個物件的關閉,或者一個個燈光來關閉。
- 在編輯器中使用 ProfileGPU(Ctrl + Shift + ,)快速了解信息以及哪部分比較慢。
- 貼花的性能開銷和它們覆蓋的像素數量有關。
總結
以上是生活随笔為你收集整理的[UE4]性能优化指南(美术向)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广发银泰信用卡怎么提额?提额失败怎么办
- 下一篇: 内联汇编用法