MMORPG手遊合理的性能參數

1)MMORPG手遊合理的性能參數
​2)使用ScriptableBuildPipeline打包的疑問
3)如何獲取到Animation修改材質球顏色後的顏色值
4)嵌套預設AssetBundle打包的疑問
5)LWRP渲染下,Profiler中函數開銷高
css


UWA QQ技術交流羣2:793972859(原羣已滿員)html

Performance

Q:想請教一下你們,一款MMORPG遊戲上線時的性能參數是如何制定的?有沒有可參考的性能參數能夠指導一下?網絡

A1:制定指標要根據多方維度來綜合考慮,包括產品定位、團隊水平、成本預算和時間預算等等,很難一律而論,如下是咱們針對新項目立項要指定美術指標時一向的作法,能夠參考:函數

  1. 拿對標美術表現的競品來看他們各項性能指標如何,用RenderDoc或者NSight可以獲得比較準確的數據,也能夠抽出他們資源來作下一步操做。
  2. 製做效果Demo,嘗試技術上還原競品的效果,這時儘可能作到表現上和性能上都能還原。
  3. 有了效果Demo後,基本指標已經有了,不過仍是得本身團隊從美術到技術再到策劃完整地把流程跑通,並且可能還要對錶現的要求進行提升以提高產品競爭力,這時候儘量根據上線時間推斷合適的目標機型,稍微超前地指定渲染能力指標。

感謝鄧永健@UWA問答社區提供了回答oop

A2:能夠參考UWA的藍皮書《Unity手遊性能藍皮書》性能

感謝jessica@UWA問答社區提供了回答測試


Build

Q:我使用ScriptableBuildPipeline打包AssetBundle比原始Build Pipeline慢,有人使用ScriptableBuildPipeline打包得到更快的打包速度了嗎?想弄清楚是我本身某些作法不對,仍是自己ScriptableBuildPipeline就是打包更慢。優化

通過測試獲得如下數據:
全量打包 增量打包(資源無變化)
原生 560s 7s
SBP 610s 480s
動畫

A:測試的數據(AssetBundle的數量大概在3200個左右, 統計耗時:ms)網站

因此我的以爲SBP + CacheServer, 可以在必定程度上提高打包速度。

感謝楊宇傑@UWA問答社區提供了回答


Rendering

Q:若是用Animation動態更新_Color後,材質球上的_Color顏色獲取不到,GetColor獲取到的顏色始終是Animation運行前的顏色,求教怎麼獲取動畫更新後材質球的顏色?

復現步驟:
1. 新建材質球A,隨便使用Shader帶Color屬性的,(我這裏使用Shader: Legacy Shaders/Diffuse),_Color默認白色;
2. 新建物體Cube,將材質球A拖到Cube上;
3. 建立Animation,修改Cube上A的_Color顏色,給藍色或者非白色;
4. 建立一個腳本在Update中打印_Color的顏色(mat.GetColor("_Color"));
5. 運行後顏色值使用時初始值白色,不是動畫Animation修改後的顏色。

A1:實測使用MaterialPropertyBlock是能夠獲取到的。代碼以下:

void Start()
    {
        render = GetComponent<MeshRenderer>();

        mpb = new MaterialPropertyBlock();        
    }

    void Update()
    {
        render.GetPropertyBlock(mpb);
        Color color= mpb.GetColor("_Color"); ;
        Debug.Log(color);
    }

 

感謝Xuan@UWA問答社區提供了回答

A2:最後發現是美術在Animation裏把_Color指定一個固定值,沒有勾選刷新,因此一直不對。

感謝題主王@UWA問答社區提供了回答


AssetBundle

Q:嵌套預設AssetBundle打包存在兩份資源冗餘,目前解決方法有預設b的材質球和Mesh單獨打成AssetBundle,可是這樣會致使AssetBundle打得太散。求問有什麼解決方法?

目前解決方法以下:
1. 空工程,預設b帶了貼圖tex_b和tex_c.使用嵌套預設把b嵌套在預設a裏面(Unity版本2018.4.24)。
2. 預設a和b都單獨打成AssetBundle。
3. 打包AssetBundle後,使用AssetStudio後查看預設a的AssetBundle,包含了預設b的貼圖和Mesh。

A:設計使然:在運行時不存在預製體的概念。預製體在構建過程當中是被 「烘焙」好的,所以每一個預製體(不管嵌套與否)都是完整且彼此獨立的。

https://issuetracker.unity3d.com/issues/nestedprefabs-when-building-assetbundles-with-nested-prefab-assets-are-duplicated-in-parent-prefab-assetbundle

能夠將子預製體依賴的資源顯式地與子預製體打包在一塊兒(若是能區分出哪一個是子預製體)。

感謝Welkin_Totoro@UWA問答社區提供了回答


Rendering

Q:升級工程到了Unity 2019.3,而且使用LWRP輕量渲染管線,PostLateUpdate.FinishFrameRendering的耗時高達54ms。真機Profiler以下圖:

A:出現了著名的API Gfx.WaitForPresent,說明大家是GPU Bound。同時,能夠看到DoRenderLoop 22ms,確實GPU比較重度,CPU這邊丟Command Buffer都丟了22ms。

因此,建議優化GPU,大機率用了很多後效?用了重度Shader?繪製了很多東西?可讓渲染負責人看看。

感謝王爍@UWA問答社區提供了回答

封面圖來源於網絡


 

今天的分享就到這裏。固然,生有涯而知無涯。在漫漫的開發週期中,您看到的這些問題也許都只是冰山一角,咱們早已在UWA問答網站上準備了更多的技術話題等你一塊兒來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之「石」,也能攻你之「玉」。


官方技術QQ羣:793972859(原羣已滿員)

相關文章
相關標籤/搜索