作者Apache (為寺川愛美瘋狂打call)
看板C_BOO
標題Re: [MLTD] 39mode
時間Mon Sep 23 00:25:58 2019
複習一下去年的文 剛好跟工作有關
https://new.qq.com/omn/20180605/20180605A1YKJ8.html
原視頻:
https://www.youtube.com/watch?v=8MDkPLEUtgI
--
整個優化分為四個主要部分:
1、重審項目設定;
2、3D繪製的高速化,提高CPU和GPU的效率;
3、2D繪製的高速化,從畫布Canvas轉向圖像拼合Sprite ,判斷是否存在無效的透明繪圖
,集成圖片(Atlas);
4、防卡頓,不做垃圾數據回收(GC),更不能讓它出現。
所需要達成的目標也有四項:首先要減少SetPassCall(DrawCall)。
其次要減少GPU負載,包括集成貼圖、整合Index Buffer、削減材質、調整繪製順序。
接下來要減少CPU負載,提高擺動物件的計算速度,線程化,合理分配CPU運算量。
最後是優化內存,尋找不用做垃圾數據回收的方法。
最終目的是讓遊戲FPS平均穩定在60左右,這意味著16.6666毫秒內要完成所有的運算處理
基於以上的一套優化流程,MLTD最重大的一個功能“13人LIVE”才得以迅速實現。
在2017年底的時候,製作人提出了“能不能讓五名以上的角色同台演出”的問題,
於是項目組開始嘗試製作。
但實際上在壓力測試的時候,項目組已經採用了超過5人的功能模式,
所以這塊的功能是驗證過可以實現的。在他們只做了15人演出的測試功能後,
發現居然能順暢的運行,於是最終只花了3個月不到的時間,
優化成了13人同台演出的完成版。
其實在優化過程中,優化團隊並沒有針對13人模式去實行專用的內存優化、
負載優化方案,這得益於他們在整個優化過程中,對系統平衡性進行持續調整的積累。
--
所以2017~2018的時候 (非?)旗艦機就已經能>=15人Live了
加上這一兩年的硬件更新,旗艦機要運行應該是有機會
以下對一些技術細節的個人理解
CPU GPU各自的優化其實跟這邊提的差不多
https://dev.twsiyuan.com/2017/06/unity-developers-conference.html
CPU就是減少垃圾回收(GC)
垃圾回收指的是runtime會暫停程式 來回收無用的heap memory
因此對於app的卡頓影響會很明顯
可以透過減少編程中使用的動態物件來避免發生
特別是foreach(物件會被複製)和toarray(大概是用buffer+toarray來建物件的狀況?)
以及物件的動態建立和刪除(Object Pooling)(不過MLTD好像不常出現?)
並且在允許卡頓的時候(e.g.場景切換)強制執行GC
DrawCall就是把物件繪製指令發送到GPU上
根據Mali的手冊:
http://bit.ly/353HWvu
"性能限制的原因是每個DrawCall都有處理開銷。DrawCall所需的處理包括分配內存,複製
數據和其他數據處理。無論您繪製單個三角形還是數千個三角形,開銷都是相同的。"
所以名字乍看之下是GPU優化 其實CPU優化也占了很大一部分
因為手機CPU效能比較差 這樣的開銷算是蠻顯著的
對於相同材質的物件 多個DrawCall可以合併成一個batch來減少次數
在MLTD中 開發團隊遇到的是人物的mesh會被拆成多個submesh
submesh指的是一個mesh中帶有不同材質的各組mesh,所以不能被batch
透過unity shader中直接合併submesh並不可行
但是由於輪廓線的頂點跟索引buffer是和本體共用的共用 可以稍微hack一下
把各submesh的index合併成新的indexBuffer 再建一個輪廓線材質
最後走同一個pass出去
這樣的話就能把輪廓線部分的DrawCall大幅削減而不影響畫面
除此之外 透過減少DrawCall也能部分避免OverDraw的出現
OverDraw是指螢幕上同一個像素被複寫
比方說先畫了背景再畫人物 背景就會被人物蓋掉 之前背景畫的像素就沒用了
OverDraw次數太多的話就可能會頂到GPU性能的上限
Unity原本就會把物件由前往後繪製來減少OverDraw
不過如果設定不當的話還是有可能出現
比方說多組物件在幾何上重疊
這種就要透過把物件預先刪除不可能出現的頂點來避免
另外一個狀況就是透明物件
因為透明或半透明物件必須由後往前繪製才能展現效果
開發時需要檢視是否真的需要設定為透明
或是分拆透明部分
先這樣好惹
原文還有提到設定LOD(細節等級) CommandBuffer
簡單來說就是離鏡頭很遠的時候可以控制細節
不要繪製反射之類的
不過又說做好了但還沒想到怎麼實裝
--
我朋友0
https://i.imgur.com/ZjPRKHj.jpg 我朋友1
https://i.imgur.com/JxPsQkB.jpg
我朋友2
https://i.imgur.com/D2t4lJt.jpg 我朋友3
https://i.imgur.com/mSv36W4.png
我朋友4
https://i.imgur.com/110pY83.png 我朋友5
https://i.imgur.com/2MMMmtc.png
我朋友6
https://i.imgur.com/eZWpOcz.png 我朋友7
https://i.imgur.com/6wDhxSl.jpg
我朋友8
https://i.imgur.com/eNR0j45.jpg 我朋友9
https://i.imgur.com/MHsT5So.jpg
我朋友a
https://i.imgur.com/PUEDH4D.jpg 我朋友~
https://i.imgur.com/9wC9C45.png
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.214.33 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_BOO/M.1569169564.A.7F9.html
→ sc95819200: 這裡是什麼版 09/23 00:26
→ Shisonin: 我看不懂 所以你跟我說手機會不會炸掉就好 09/23 00:27
考量到
1. 2018年的硬件性能提升
2. 特寫的顯示量
3. 全景時的面數控制
應該是有機會在旗艦機流暢運行
※ 編輯: Apache (1.161.214.33 臺灣), 09/23/2019 00:32:53
→ tomuy: 太長 懶人包 09/23 00:37
推 helba: 哎鳳11買下去 09/23 00:37
→ s50189: 好啦還久我存個錢 09/23 00:49
→ yulis: 懶人包就是 A13買下去 選我正解 09/23 01:02
→ Apache: 換機建議不要太急 等實裝再看看 還有明年會上很多5G晶片 09/23 01:08
→ Apache: 不過39人光靠基本優化跟硬體可能還是不夠 09/23 01:34
→ Apache: 期待實裝後來談進一步的優化 09/23 01:34