《A1--歐曉東--大世界手游前端性能質量保障體系.pdf》由會員分享,可在線閱讀,更多相關《A1--歐曉東--大世界手游前端性能質量保障體系.pdf(57頁珍藏版)》請在三個皮匠報告上搜索。
1、大世界手游前端性能質量保障體系歐曉東騰訊IEG光子工作室群歐曉東7年游戲測開與專項測試工作經驗,先后就職于西山居和騰訊公司,當前在騰訊主要從事游戲客戶端性能專項測試和分析工具開發建設等工作,從2018年至今,負責PUBGM和其他在研項目的客戶端性能測試和分析,客戶端性能質量保障體系的建設。騰訊IEG光子工作室群 高級專項技術測試工程師目錄CONTENTS大世界手游前端性能的重要性和挑戰01 前端性能質量保障全流程管線02 前端性能質量保障體系建設實踐03 項目性能優化實戰經驗和案例分享04 小結&未來展望05 01大世界手游前端性能的重要性和挑戰一、大世界手游前端性能的重要性和挑戰1、前端性能
2、的重要性游戲怎么那么卡?手機怎么那么燙?耗電怎么那么快?前端性能問題對玩家體驗帶來非常負面的影響,甚至影響線上運營的數據表現前端性能表現直接影響游戲能支持到的最低機型配置,影響玩家的覆蓋范圍畫面不流暢卡頓發燙一、大世界手游前端性能的重要性和挑戰2、海外移動設備的硬件能力挑戰海外各國低端機型占比高TOP300機型低端硬件芯片占比高10年前的芯片、Arm-A53架構、核心數少/頻率低、內存低、28nm工藝1x.x%海外海外17個國家低端機占比個國家低端機占比運算能力差 內存空間小 功耗發熱高低端機占比高GPU占比Mali-T830Mali-T720Adreno(TM)306其他芯片參數對比驍龍41
3、0驍龍8Gen1平臺架構ARM Cortex-A53ARM-Kryo集成顯卡Adreno 306Adreno 730制程工藝28 nm4 nm核心/線程4C/4T8C/8T核心頻率4(1.20GHz)4(1.8GHz)+3(2.5GHz)+1(3.0GHz)三級緩存6 MB內存類型LPDDR2/3-533LPDDR5-3200TDP功耗3W6W一、大世界手游前端性能的重要性和挑戰3、PUBG Mobile項目的性能挑戰版本迭代周期短,玩法內容多超大地圖,場景資源量大FPS百人大逃殺,主題元素豐富大DAU產品,對游戲性能表現要求極高GPUCPUMEMORY大量場景物件加載高OverDraw復雜著
4、色器指令復雜玩法邏輯大量RT資源加載卸載物理動畫移動計算場景繪制提交渲染狀態切換大量貼圖采樣高頂點數OOM、卡頓、耗電、發燙02前端性能質量保障全流程管線二、前端性能質量保障全流程管線1、前端性能測試全流程管線性能測試前置性能標準制定早期性能工具接入性能流程制定鋪量研發期性能需求支持運營期性能測試、監控、優化閉環項目研發期項目早期項目運營期1、前端性能測試全流程管線-基線標準基礎性能:制定各檔機型的基礎性能目標,維度包括FPS均值、卡頓、FPS抖動、內存、溫度等機型分檔:結合市場機型占比,根據硬件評分制定各檔機型和基線機型。硬件評分參考維度包括CPU核數、CPU頻率、RAM、GPU、OpenG
5、L ES版本等美術資源:內容包括紋理尺寸/格式,mesh頂點數/面數,骨骼數,LOD等級,LOD ScreenSize,材質指令數等二、前端性能質量保障全流程管線2、立體化的測試分析與監控覆蓋全流程全面的性能測試方案高效深入的性能分析完善的監控體系針對性的優化建議引擎特性驗收商業化資源新地圖場景核心重度場景功耗發熱同品類對比玩法機制廠商合作對局摸底內存泄漏大廳UI主題活動ArtResource分析平臺單幀性能調試工具Vulkan API耗時分析關卡資源分布截幀自動分析XUPPerfDogUnreal ProfilerRenderDocSnapdragon ProfilerXcodeInstru
6、mentArm Mobile StudioSimplePerfPerfettoGoogle benchmarkLoliProfilerAndroidStudio功耗儀:N6705Profiler美術資源Config包體每日性能冒煙地圖關卡UI響應速度啟動和Loading耗時CPUGPUMemorySOC外網性能閉環黃色字體內容后續重點介紹二、前端性能質量保障全流程管線03前端性能質量保障體系建設實踐三、前端性能質量保障體系建設實踐1.性能測試方案制定引擎合版驗收商業化資源新地圖場景三、前端性能質量保障體系建設實踐1、性能測試方案制定-引擎合版驗收特性開發引擎分支項目引擎分支項目主干引擎引擎開發
7、Merge性能測試驗收版本引擎作為整個項目的基礎,牽一發而動全身,需要完善的流程和測試方案評估引擎底層的改動對前端性能的影響引擎修改合版流程性能驗收測試方案引擎合版評審專項性能驗收全量性能驗收1、性能測試方案制定-商業化資源商業化資源包括avatar套裝,槍械和載具等。版本內的商業化內容量級已上萬級別,如何在有限的人力和時間成本上保證每次新的商業化內容都符合性能上線要求?性能驗收測試方案美術資源標準特定場景同屏壓測重度場景驗收專項性能驗收基礎性能數據對比普通套裝無明顯差異功耗發熱影響在誤差浮動范圍內性能達標基線三、前端性能質量保障體系建設實踐1、性能測試方案-新地圖場景大地圖場景的性能測試痛點
8、:難以人工跑測全覆蓋、測試周期短、場景邏輯資源改動頻繁解決思路:性能測試左移,早期建立制作標準,配合輔助分析工具,盡早發現問題,解決問題性能驗收測試方案地圖制作參考基準地圖資源規格掃描資源分布熱力圖性能測試左移自動化跑圖性能熱力圖熱點區域性能分析單點性能驗收核心場景和玩法機制性能評估性能瓶頸分析優化性能全量驗收三、前端性能質量保障體系建設實踐重點介紹內容1、性能測試方案-新地圖場景三、前端性能質量保障體系建設實踐地圖制作參考基準制定減少Drawcall和面數減少狀態切換降低Shader復雜度降低帶寬消耗性能友好場景 母材質數量:N個 材質復雜度:流暢畫質VS指令數N以內、PS指令數N以內,采樣
9、數量N個 材質要求 模型制作標準:模型面數、LOD切換距離、裁剪距離設置等 貼圖制作標準:不同類型貼圖尺寸、制作方式等 美術資源標準 同區域模型種類:密集城區N種、空曠區域N種 同區域模型數量:密集城區N個、空曠區域N個 密集城區分布:密集城區間距保持N米以上場景制作要求1、性能測試方案-新地圖場景三、前端性能質量保障體系建設實踐地圖資源規格掃描大世界場景的內存和渲染類問題大部分都是由于資源制作不規范導致,如面數過高或未制作LOD,紋理尺寸過大或No Mip,小物件SceneSizeCulling設置過大等等。地圖資源掃描主要是為了提前發現關卡中用到的不規范資源,降低后期美術返工制作和性能測試
10、成本。1、性能測試方案-新地圖場景三、前端性能質量保障體系建設實踐關卡性能+資源分布熱力圖工具運行方式目的目標用戶維度優缺點性能熱力圖RealTime,真機運行全場景覆蓋的性能監控、分析和調優性能TM/開發/美術/策劃FPS、FrameTime、GameTime、RenderTime、GPU TimeDrawCall、Primitives等等優點:真機實時運行,性能數據準確度高缺點:依賴關卡制作進度和穩定版本輸出,開發期難以提前介入,版本中后期性能優化壓力大資源分布熱力圖Offline,編輯器離線分析及時發現在關卡制作上不合理或影響性能的地方策劃/美術Mesh渲染類型(BlendMode不同)
11、、Mesh種類(頂點結構/材質不同)、Mesh個數、Mesh實例數等等優點:1.直接通過編輯器針對關卡進行分析,無需依賴版本性能分析前置2.從制作上提供實時分析,提前發現一些問題,降低中后期的性能優化壓力缺點:缺乏實時運行的裁剪和剔除特性、無法準確獲取某一坐標方向上準確的性能和渲染數據三、前端性能質量保障體系建設實踐2.研發&運營性能監控Profiler數據美術資源Config配置外網性能2、研發性能監控-Profiler數據三、前端性能質量保障體系建設實踐通過自動化監控日迭代版本的深度Profiler分析數據,從更細粒度的數據上及時感知版本性能的變化,發現問題Profiler監控維度UE s
12、tats1.游戲內細分模塊函數耗時均值、峰值2.單函數耗時大于預設值出現次數3.各階段提交渲染耗時,場景(裁剪,遮擋剔除,不透明繪制,masked繪制,半透明繪制)和UI4.drawcall、面數等Simpleperf1.游戲內各線程耗時占比2.函數自身耗時(底層系統調用,第三方SDK,游戲邏輯和引擎層)RenderDoc各render pass的Drawcall,頂點數/面數,紋理采樣數,紋理尺寸,Shader復雜度等Memreport1.objects數量,component數量2.模塊劃分內存占用(RHI、內存池、Shader、物理、動畫、音頻、表格、貼圖、mesh等)Smaps1.動態
13、庫的內存和代碼段占用2.驅動層渲染資源內存占用不同目標幀率下,幀耗時對幀率的影響程度Frame time AFPS AFrame time BFPS BFPS time differenceFPS difference16.6ms6017.6ms56.61ms3.433.3ms3034.3ms29.10.9三、前端性能質量保障體系建設實踐2、研發性能監控-美術資源美術資源容易引起內存和渲染類問題,監控版本間美術資源改動和修復情況,及時發現資源改動引起的性能問題紋理尺寸,格式和大小等Mesh各級LOD信息,面數,骨骼數,裁剪距離等材質的紋理采樣數,動態合批,Early-Z,混合類型等貼圖尺寸變大
14、三、前端性能質量保障體系建設實踐2、研發性能監控-Config配置背景:項目大部分優化特性開關或者機型畫質分檔都是通過ini配置實現的,為了靈活控制,支持外網熱更,降低風險。每個版本開發、美術、策劃都可能會調整配置內容,某些配置修改導致性能降低追查起來有時候會特別困難機型分檔、畫質幀率、特性參數、優化開關自動化流水線的ini配置監控對比三、前端性能質量保障體系建設實踐2、運營版本性能閉環背景:游戲外網運營期的環境與研發期的本地環境差異較大,外網的性能問題可能會造成玩家體驗問題,導致玩家流失和口碑崩塌,因此需要對外網的性能問題進行反饋收集并優化FPSJankCPU內存電量自定義數據版本場景畫質幀
15、率機型硬件信息反饋發現收集復現優化外網性能問題(卡頓、發熱降頻)方案:接入Wetest PerfSight組件服務,采集分析外網真實用戶的性能數據,發現并優化性能問題三、前端性能質量保障體系建設實踐3.自動化和測試分析工具鏈建設自動化建設背景和應用實踐ArtResource分析平臺單幀性能調試工具Vulkan API耗時分析工具1、自動化建設背景三、前端性能質量保障體系建設實踐自研游戲版本節奏快(日交付版本,全量版本,TDR版本.)前端性能測試對測試精度要求高存在大量耗費人力需求(全地圖遍歷,商業化資源遍歷)1、自動化建設實現RPC調用:func2 v v1Lua _Statevoid fun
16、1()void fun2(int v,intv1).x.lua游戲組件(Component)業務邏輯(Lua Script)fun1()fun2(v,v1).反射lua_dofile1、自動化建設應用實踐三、前端性能質量保障體系建設實踐基于AI的性能測試自動化:通過使用AI代替真人實現復雜場景的自動化測試,降低時間和人力成本,提升性能測試的效率、準確性和穩定性初始化AI環境創建AI主端發送指令驅動AI開火拾取物資切換武器使用載具移動使用投擲物AI接收指令并執行操作,可執行的操作包括但不限于:投擲物瞄準切換武器傳送AI性能自動化測試視頻演示測試分析工具鏈建設-思路業容易引發嚴重性能問題環節的分析
17、支持多引擎,可復用到大部分項目中提升測試分析效率,能快速定位到問題根因三、前端性能質量保障體系建設實踐引擎層XUP、UWA、UE/Unity Profiler代碼Google benchmark、Xcode/instrument資源ArtResource分析平臺、資源預加載測試工具、高耗時組件掃描、性能熱力圖、關卡資源分布熱力圖渲染RenderDoc、SnapDragon、自動化渲染分析、自動化截幀分析、單幀性能調試工具、Vulkan API耗時分析工具系統Systrace、DS-streamline、XUP、PerfDog功耗Battery Life、功耗儀:N6705有需求、抓重點、可落地
18、、高復用2、測試分析工具鏈建設-ArtResource分析平臺背景美術資源豐富,高品質要求,移動設備運算能力有限,極易造成性能瓶頸資源制作和修改管線長,需及時發現問題資源,避免影響項目進度資源類問題分析人力投入量大,美術資源規則復雜三、前端性能質量保障體系建設實踐建設美術資源分析平臺:主要功能:資源靜態掃描、特效復雜度動態掃描、Shader掃描支持Unity3D和Unreal引擎高復用,持續集成2、測試分析工具鏈建設-ArtResource分析平臺三、前端性能質量保障體系建設實踐美術資源全面屬性解析版本資源修改對比監控掃描規則配置、告警資源詳情和消息通知資源靜態掃描2、測試分析工具鏈建設-Ar
19、tResource分析平臺三、前端性能質量保障體系建設實踐背景游戲特效不規范容易導致渲染壓力過大帶來性能瓶頸現有的工具無法實現對項目中所有特效進行逐一分析和排查游戲工程中特效資源多,逐一分析人力和時間成本高難點需要實時渲染才能準確獲取數據如何判斷特效已播放完一個完整的生命周期如何計算播放過程中的最大drawcall數和overdraw層數粒子復雜度動態掃描2、測試分析工具鏈建設-ArtResource分析平臺三、前端性能質量保障體系建設實踐實現方案:通過修改渲染管線實現像素級的特效分析檢測通用方案,在編輯器中遍歷播放特效實時獲取特效overdraw,drawcall,渲染面積,粒子數等數據判斷
20、發射器和粒子的存活時間實現Drawcall計算粒子復雜度動態掃描3、測試分析工具鏈建設-單幀性能調試工具三、前端性能質量保障體系建設實踐背景針對存在渲染瓶頸的場景,一般只能通過截幀去分析場景中繪制不合理的地方,而分析出來的問題很難去量化評估對場景性能帶來多少性能收益解決方案開發逐對象分析的場景單幀性能調試工具,通過控制單幀中每個場景物件的隱藏和顯示,分析出每個物件在該場景下的性能消耗效果視頻演示4、測試分析工具鏈建設-Vulkan API耗時分析工具三、前端性能質量保障體系建設實踐背景 Vulkan作為OpenGL的接替者,其通過給開發者提供訪問硬件底層資源的能力而大幅提升圖形渲染的性能 項目
21、需求:廠商合作,提升游戲性能表現(幀率、功耗等)、需要優于OpenGL版本 實際情況:Vulkan平均幀率比OpenGL低5.7幀/s,Streamline分析GameThread和GPU同時出現了Stall等待,GMem讀寫也沒有工作,懷疑驅動層異常,Vulkan API執行消耗過高或出現阻塞痛點:如何分析API執行耗時?4、測試分析工具鏈建設-Vulkan API耗時分析工具三、前端性能質量保障體系建設實踐調研 LunarG為開發者提供了不同的Vulkan Layer來調試Vulkan應用,https:/ 其中VK_LAYER_LUNARG_api_dump的Layer可以追蹤vk函數調用
22、方案和實現 基于VK_LAYER_LUNARG_api_dump的Layer進行二次開發,在API Dump中增加新增耗時統計功能并輸出圖表04項目性能優化實戰經驗和案例分享性能問題分析思路四、項目性能優化實戰經驗和案例分享基礎性能測試分析性能瓶頸深度性能分析結合性能數據,觀察CPU運行情況,是否出現核休眠、持續低頻、鎖核鎖頻等現象分析線程調度是否合理,是否存在異常線程、異步線程阻塞主線程等問題分析熱點函數,GPU Counter等指標,找出性能問題1.CPU瓶頸優化總結和案例Level Streaming卡頓優化渲染狀態排序優化四、項目性能優化實戰經驗和案例分享1、CPU瓶頸優化總結四、項目
23、性能優化實戰經驗和案例分享CPU邏輯優化Tick剔除無用組件降低tick頻率復雜邏輯C+實現資源加載卸載預處理異步分幀對象池物理碰撞降低物理模擬頻率幾何碰撞體限制物理集數量獨立的level管理骨骼動畫UROOnlyTickPoseWhenRenderedLOD減骨骼UIUI拆分SlateLayoutCachingInvalidation Box系統資源調度優化綁核動態調頻SceneCullPrepareSortDriverCPU渲染優化監控美術資源和場景資源掃描性能/關卡資源分布熱力圖關卡掃描減少提交物件數量裁剪遮擋剔除(軟光柵、硬件遮擋查詢,PVS)將合適并行的計算從CPU轉移到GPUGPU
24、 Skin減少渲染狀態切換Draw policy減少Drawcall合批1、CPU瓶頸優化案例-Level Streaming卡頓優化四、項目性能優化實戰經驗和案例分享問題:關卡切換LOD時,卸載舊LOD導致卡頓(低端機/單幀耗時200ms+)UE4的Level Streaming(關卡流送)特性允許美術將整個游戲世界切分為多個小關卡,游戲運行時根據可見性加載和卸載關卡,從而實現超大無縫地圖的游戲體驗優化前優化后思路:通過分幀平滑性能毛刺,降低單幀耗時峰值優化:添加待卸載LOD關卡隊列,每幀輪詢,限制每幀卸載耗時效果:單幀耗時分散到多幀,關卡切換LOD的幀最大耗時從200ms+降低到50ms+
25、,基本降到玩家無感知卡頓水平1、CPU瓶頸優化案例-渲染狀態排序優化四、項目性能優化實戰經驗和案例分享問題:低端機上在建筑密集區幀率不滿,CPU渲染線程存在性能瓶頸分析:截幀發現同材質和頂點結構的mesh繪制不相鄰,存在一定的渲染狀態切換開銷優化:針對Dynatic Mesh做渲染狀態排序優化2.GPU瓶頸優化總結和案例AlphaTest的Early-Z優化VRS可變分辨率渲染優化四、項目性能優化實戰經驗和案例分享2、GPU瓶頸優化總結四、項目性能優化實戰經驗和案例分享移動端TBDR渲染架構,容易出現瓶頸的地方:Vertex Shading、Fragment Shading,Bandwidth
26、主要優化手段:a.降低場景復雜度,資源簡化b.合理使用alpha Test/Blend材質,按材質類型渲染Opaque-Masked-Translucentc.降低shader復雜度,代碼優化,材質分級d.渲染流程簡化,減少renderpass,RT的使用e.降低像素著色計算次數,使用VRS可變率著色,利用Early-Z降低overdrawf.減面LOD&BillBoardOcclusion CullingLightmapShader指令優化Early-Z渲染順序Variable Rate ShadingMaterial Quality LevelShader指令優化FragmentShadi
27、ngVertexShading降低VBO貼圖mipmap、采樣簡化貼圖壓縮、通道合并降低RT精度和回讀減少renderpass和RT的使用Bandwidth2、GPU瓶頸優化案例-AlphaTest的Early-Z優化四、項目性能優化實戰經驗和案例分享問題:早期低端機在植被密集區存在明顯的GPU瓶頸,eglswapbuffers耗時40ms分析:植被使用的Mask材質,會打斷硬件Early-Z優化,導致嚴重overdraw10 x Overdraw1x Overdraw優化:通過PrePass提前獲取植被深度,利用硬件Early-Z優化剔除不可見片段,降低overdraw,平均幀率從21.9幀
28、/s提升到28.5幀/s。2、GPU瓶頸優化案例-VRS可變分辨率渲染優化四、項目性能優化實戰經驗和案例分享背景:由于手機內存與性能限制,在PUBGM中,大部分紋理的分辨率并不高。當用戶接近物體的時候,紋理常常要被拉伸,使得1個texel被著色貼圖到多個pixelQCOM VRS技術(QOCM 855及855以上SOC支持)允許著色器程序以 2、4、8或16個像素為一組進行著色,實現DrawCall為單位的可變分辨率渲染ShadingRate 1x1ShadingRate 2x1優化:借助VRS技術,使用1個pixel shader對多個pixel進行著色,可降低GPU的運算量效果:某驍龍88
29、8芯片機型,煙霧彈場景,ShadingRate 2x1的GPU使用率比默認1x1降低40%3.內存優化總結和案例讀文件內存泄漏優化四、項目性能優化實戰經驗和案例分享3、內存分布和管理視圖四、項目性能優化實戰經驗和案例分享UE4主要通過FMallocBinned箱式分配器來管理內存。使用不同粒度類型的Pool來緩存各個粒度大小的內存塊,每個Pool的大小為64KB,由于地址對齊,存在一定的內存浪費。將FMallocBinned分配改成FMallocAnsi 原生C分配,通過instrument定位內存池問題3、內存優化總結四、項目性能優化實戰經驗和案例分享資源類內存是游戲內存占用的大頭,需重點關
30、注各類資源是否存在超標,泄漏等情況Unreal默認使用Binned內存池分配器來管理內存,謹慎使用原生的new/delete,合理控制結構體大小,避免內存泄漏和浪費去除引擎和項目中無用的模塊和第三方組件梳理資源引用關系,避免關聯的無用資源加載到內存按需動態加載,包括不限于音頻動畫、UI和shader等3、內存優化案例-讀文件內存泄漏優化四、項目性能優化實戰經驗和案例分享問題:版本日常性能測試需求發現,戰斗內靜置不動,30分鐘后內存泄漏48MB分析:主要是Unknown引擎層的內存增長,內存快照對比,主要增長在Async File Handle Memory文件讀寫內存上優化:調用引擎接口Get
31、ReadResults()讀取文件默認使用FMemory:Malloc內存池分配內存,需對應使用FMemory:Free釋放內存調用原生的delete,導致內存無法釋放,造成泄漏五、小結標準和流程制定的思路項目早期建議制定項目的美術資源標準、畫質機型分檔、性能基線機型及性能標準,提供開發和美術參考,降低中后期性能優化壓力規范化性能測試流程,制定基準和核心測試場景,建立性能需求轉測流程規范,降低人力和溝通成本測試左移和性能質量把控早期提前接入各類性能測試平臺和工具,提高性能測試效率和質量建立完善的性能監控體系,把控版本性能質量,避免性能問題發現太晚或暴露到外網上結合業界的測試分析工具和項目中遇到
32、的性能分析痛點,建設性能測試和分析方法論和工具鏈,完善和開發目前欠缺的測試和分析類工具和平臺,做到深入且高效的性能分析通用性能問題總結和優化思路性能問題往往大多數都是共性問題,在日常測試過程中注意多總結和復盤,逐步完善一套全面的性能測試方案根據游戲定位,結合美術品質要求,細化各檔位機型的美術表現,選擇玩家和項目都能接受的美術表現和性能水平,不太建議追求極致優化五、未來展望前端性能深挖圖形驅動深度數據獲取AI驅動的性能分析、監控和優化游戲效果提升渲染方案(性能允許的前提下如何提升畫質效果)前沿技術預研AI在前端性能測試領域的應用探索(代碼質量檢測、智能分析、硬件/負載評測、自動化測試、AIGC等等)Forward+、Deferred Rendering、Ray tracing、GPU Driven渲染技術移動端應用性能測試分析方案評估感謝聆聽關注QECon公眾號