看板 GameDesign 關於我們 聯絡資訊
網頁版 https://yekdniwue.blogspot.com/2020/08/MinimalLOD.html 通常開發跨平台遊戲的時候,會想要針對Static Mesh做LOD區隔。 而UE4提供好用的Minimal LOD功能, 讓開發者不用特別寫程式碼, 就可以根據不同平台調整LOD參數。 Minimal LOD的參數是可以每個static mesh設定的, 設定的地方可以在Static Mesh的編輯器內找到。如圖所示 [圖] 例如說Windows的Minimal LOD設為0,Android跟iOS設為1。 這樣的話在實際執行的時候, Android跟iOS平台只會看到1以後的LOD mesh, 可以有效的控制場景總面數。 還有另一個參數 r.StaticMeshLODDistanceScale 可以控制LOD切換的距離。 數字越大代表會越早切換到低階層的LOD。 這個參數也可以針對平台做設定,不過是影響全域的變數, 所以要在Device Profile的頁面設定。記得要Save as Default才會存檔。 [圖] 舉例來說 r.StaticMeshLODDistanceScale=2.0 然後LOD1的screen size設為0.3的話 代表在這個平台0.3*2的距離就會切換成LOD1了。 不過使用LODDistanceScale有個小缺點, 就是在編輯的時候預設都是使用 r.StaticMeshLODDistanceScale=1.0。 要把場景調整到1.0跟2.0外觀看起來不錯的狀態, 是需要很多人工檢查的。 上面提到的兩個參數可以控制Minimal LOD, 不過這兩個參數都是執行的時候,告訴系統該顯示哪一層LOD。 在打包的過程還是都會把全部的LOD都包進去,影響最後打包的容量。 如果想要避免比Minimal LOD更精細的LOD也被打包進平台內。 我們需要在打包的平台把Device Profile參數 r.StaticMesh.StripMinLodDataDuringCooking設為1。 或是使用文字編輯器打開 [Project Path]/Config/DefaultDeviceProfiles.ini 把以下區段 [Windows DeviceProfile] DeviceType=Windows BaseProfileName= 改為 [Windows DeviceProfile] DeviceType=Windows BaseProfileName= +CVars=r.StaticMesh.StripMinLodDataDuringCooking=1 這樣,如果Android跟iOS設為1的話,這兩個平台在打包的時候就會避免把LOD0做輸出。 可以有效的減少低規格平台的資料量。 要注意打包的平台指是你的打包那台機器所屬的平台, 而不是你的目標平台, 通常會是Windows,MacOS,或是Linux。 實作程式碼在 FStaticMeshLODResources::GenerateClassStripFlags FStaticMeshLODResources::IsLODCookedOut 可以參考看看。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.146.90 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1599013889.A.09D.html
metallican: 專業推 09/02 10:35