去年年初寫的一個粗版的大世界的設計需求和方案,方案部分就不方便公佈。目前大世界大部分功能都已經實現,也有一些調整,也投入了實際的使用。雖然功能比較簡單,但真實現起來也涉及到方方面面,整個過程還是比較糾結,也踩了不少坑。
設計目的:
- 希望支持至少2Kx2K的超大無縫世界,地形支持滿視距,Streaming加載切不卡頓
- 希望支持無縫晝夜天氣變化
- 希望還原逼真的效果表現,PBR材質
- 希望支持美術和策劃的多人編輯,部分數據是文本支持Merge
- 自動生成HLOD,自動動態加載,自動碰撞數據生成,自動合批,自動LOD切換
- 部分場景數據可自動生成
- 動態音效,可觸發生態
- 場景可破壞可交互,場景可編輯
- 支持熱更
- 支持無縫室內
- 支持海底世界
- 支持雲海
- 支持遮擋剔除
- 部分自動化生產
規格指標:
- 大世界相關內存控制在300M以內(包括地形、貼圖、Lightmap,碰撞等,不包括後處理Shader,動畫,角色,UI,技能,音頻,MONO堆,引擎等)
- 至少2Kx2K的可行走區域,3Kx3K的可視距離
- 12m/s高速移動不卡頓,無GC,無明顯穿幫
- 任意傳送無明顯穿幫
- 場景內大範圍尋路,跨場景尋路無明顯卡頓
- 反覆切地圖以及超長時間掛機無洩漏
- 地圖熱點分佈均勻無明顯性能瓶頸點
- 大量動態物件音效無卡頓無明顯熱點
- 純場景100幀
- iPhone6S+,SamsungGalaxyS8+
功能點:
- 編輯器
- 地形的分塊切割和加載(包含Lightmap,instance,動態LOD等)
- 場景模型的分塊切割和加載(包含Lightmap)
- 美術多人聯合大世界編輯
- 策劃多人聯合大世界編輯(區域,刷怪,刷NPC,事件等邏輯數據)
- 體素物理引擎和體素自動化生產
- 加載管理器
- 智能可預測加載系統(依據玩家行為,狀態預測性加載)
- 可視範圍管理(場景分層,可視距離動態可調)
- 基於九宮的多線程加載和下載
- TextureStreaming
- MeshStreaming
- 體素Streaming和合並(壓縮,稀疏矩陣等)
- HPA尋路數據Streaming和合並
- 音頻Streaming
- 邏輯數據Streaming
- 性能優化
- 智能動態性能調節系統
- 場景HLOD系統
- 場景自動一次化動態管理
- 角色智能(玩家配置,策劃配置,機型,所處環境,是否插電等)動態LOD管理(模型,材質,動畫,替代模型,陰影,音效,特效,最簡數據,UI等)
- 材質Shader動態LOD
- Animation和AnimatorLOD(動態調節頂點受骨骼影響數,動畫更新頻率,GPU運算,動畫壓縮)
- 粒子LOD(表現LOD,粒子發射器數量LOD,GPU運算)
- 植被LOD
- Animation不可見優化
- 粒子不可見優化
- 遮擋剔除
- 緩存池
- 自動合併和Instance
- 每幀低GC
- Lightmap的動態加載(遠景Lightmap的處理)
- 邏輯層和表現層分離,分層限幀和動態負載均衡
- 高性能運算遷移到C++
- 陰影(實時,靜態動態調節和融合)
- 渲染
- 基於PBR渲染
- 24小時無縫時辰系統
- 可交互植被系統(風,碰撞,陰影)
- 雲海
- 海水系統
- lightweight渲染管線,自動合批排序(植被,石頭等)
- 物件漸顯漸隱
- 高效能弱化實時Shadowmask
- 大氣散射霧效,高度深度霧效
- 其他
- 可破壞場景
- 動態音效,可觸發生態
- 全地圖跨場景尋路
- 分塊熱更
- 調試
- 各個層(角色,地形,遠景,近景,細節,碰撞,音效等)實時(PC,手機)性能顯示和開關
- 各種數據(貼圖,Mesh,動畫,Shader)實時(PC,手機)性能顯示和開關
- 運行時CPU,GPU負載獲取
- 超標數據熱點實時Debug顯示
- 自動生成可視化熱力圖
閱讀更多 Mack 的文章