大世界設計需求

去年年初寫的一個粗版的大世界的設計需求和方案,方案部分就不方便公佈。目前大世界大部分功能都已經實現,也有一些調整,也投入了實際的使用。雖然功能比較簡單,但真實現起來也涉及到方方面面,整個過程還是比較糾結,也踩了不少坑。

設計目的:

希望支持至少2Kx2K的超大無縫世界,地形支持滿視距,Streaming加載切不卡頓希望支持無縫晝夜天氣變化希望還原逼真的效果表現,PBR材質希望支持美術和策劃的多人編輯,部分數據是文本支持Merge自動生成HLOD,自動動態加載,自動碰撞數據生成,自動合批,自動LOD切換部分場景數據可自動生成動態音效,可觸發生態場景可破壞可交互,場景可編輯支持熱更支持無縫室內支持海底世界支持雲海支持遮擋剔除部分自動化生產

規格指標:

大世界相關內存控制在300M以內(包括地形、貼圖、Lightmap,碰撞等,不包括後處理Shader,動畫,角色,UI,技能,音頻,MONO堆,引擎等)至少2Kx2K的可行走區域,3Kx3K的可視距離12m/s高速移動不卡頓,無GC,無明顯穿幫任意傳送無明顯穿幫場景內大範圍尋路,跨場景尋路無明顯卡頓反覆切地圖以及超長時間掛機無洩漏地圖熱點分佈均勻無明顯性能瓶頸點大量動態物件音效無卡頓無明顯熱點純場景100幀iPhone6S+,SamsungGalaxyS8+

功能點:

編輯器地形的分塊切割和加載(包含Lightmap,instance,動態LOD等)場景模型的分塊切割和加載(包含Lightmap)美術多人聯合大世界編輯策劃多人聯合大世界編輯(區域,刷怪,刷NPC,事件等邏輯數據)體素物理引擎和體素自動化生產
加載管理器智能可預測加載系統(依據玩家行為,狀態預測性加載)可視範圍管理(場景分層,可視距離動態可調)基於九宮的多線程加載和下載TextureStreamingMeshStreaming體素Streaming和合並(壓縮,稀疏矩陣等)HPA尋路數據Streaming和合並音頻Streaming邏輯數據Streaming性能優化智能動態性能調節系統場景HLOD系統場景自動一次化動態管理角色智能(玩家配置,策劃配置,機型,所處環境,是否插電等)動態LOD管理(模型,材質,動畫,替代模型,陰影,音效,特效,最簡數據,UI等)材質Shader動態LODAnimation和AnimatorLOD(動態調節頂點受骨骼影響數,動畫更新頻率,GPU運算,動畫壓縮)粒子LOD(表現LOD,粒子發射器數量LOD,GPU運算)植被LODAnimation不可見優化粒子不可見優化遮擋剔除緩存池自動合併和Instance每幀低GCLightmap的動態加載(遠景Lightmap的處理)邏輯層和表現層分離,分層限幀和動態負載均衡高性能運算遷移到C++陰影(實時,靜態動態調節和融合)渲染基於PBR渲染24小時無縫時辰系統可交互植被系統(風,碰撞,陰影)雲海海水系統lightweight渲染管線,自動合批排序(植被,石頭等)物件漸顯漸隱高效能弱化實時Shadowmask大氣散射霧效,高度深度霧效其他可破壞場景動態音效,可觸發生態全地圖跨場景尋路分塊熱更
調試各個層(角色,地形,遠景,近景,細節,碰撞,音效等)實時(PC,手機)性能顯示和開關各種數據(貼圖,Mesh,動畫,Shader)實時(PC,手機)性能顯示和開關運行時CPU,GPU負載獲取超標數據熱點實時Debug顯示自動生成可視化熱力圖