看板 C_BOO 關於我們 聯絡資訊
複習一下去年的文 剛好跟工作有關 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
Shisonin: https://i.imgur.com/Gnq1fTx.png 09/23 00:56
yulis: 懶人包就是 A13買下去 選我正解 09/23 01:02
Apache: 換機建議不要太急 等實裝再看看 還有明年會上很多5G晶片 09/23 01:08
Apache: 不過39人光靠基本優化跟硬體可能還是不夠 09/23 01:34
Apache: 期待實裝後來談進一步的優化 09/23 01:34