Unity 游戲優化, 3/e (Unity Game Optimization, 3/e)

[意]大衛·阿韋爾薩(Davide Aversa)、[英]克裡斯·迪金森(Chris Dickinson)著 蔡俊鴻 譯

  • Unity 游戲優化, 3/e (Unity Game Optimization, 3/e)-preview-1
  • Unity 游戲優化, 3/e (Unity Game Optimization, 3/e)-preview-2
  • Unity 游戲優化, 3/e (Unity Game Optimization, 3/e)-preview-3
Unity 游戲優化, 3/e (Unity Game Optimization, 3/e)-preview-1

買這商品的人也買了...

商品描述

主要內容: 使用Unity Profiler發現程序中的瓶頸並找到解決方法 發現VR項目中關鍵的性能問題,並學習如何處理它們 以易用的方式增強著色器,通過細微而有效的性能調整優化它們 使用物理引擎使場景盡可能動態化 組織、過濾和壓縮藝術資源,在保持高品質的同時實現性能**化 使用Mono框架和C#實現內存利用**化,以及優化GC

目錄大綱

目    錄

 

 

 

第Ⅰ部分  基本的腳本優化

第1章  研究性能問題 2

1.1  使用Unity Profiler收集分析數據 3

1.1.1  啟動Profiler 4

1.1.2  Profiler窗口 8

1.2  性能分析的最佳方法 17

1.2.1  驗證腳本是否存在 18

1.2.2  驗證腳本次數 18

1.2.3  驗證事件的順序 19

1.2.4  最小化正在進行的代碼更改 20

1.2.5  最小化內部影響 20

1.2.6  最小化外部影響 22

1.2.7  代碼片段的針對性

分析 22

1.3  關於分析的思考 26

1.3.1  理解Profiler工具 27

1.3.2  減少乾擾 27

1.3.3  關註問題 28

1.4  本章小結 28

第2章  腳本策略 29

2.1  使用最快的方法獲取組件 30

2.2  移除空的回調定義 31

2.3  緩存組件引用 34

2.4  共享計算輸出 35

2.5  Update、Coroutines和InvokeRepeating 36

2.6  更快的GameObject空引用檢查 39

2.7  避免從GameObject中檢索字符串屬性 40

2.8  使用合適的數據結構 42

2.9  避免在運行時修改

Transform的父節點 43

2.10  關註緩存Transform的 變化 44

2.11  避免在運行時使用Find()和 SendMessage()方法 45

2.11.1  將引用分配給預先

存在的對象 48

2.11.2  靜態類 50

2.11.3  單例組件 52

2.11.4  全局消息傳遞系統 56

2.12  禁用未使用的腳本和  對象 66

2.12.1  通過可見性禁用對象 66

2.12.2  通過距離禁用對象 67

2.13  使用距離的平方而不是  距離 68

2.14  最小化反序列化行為 69

2.14.1  減小序列化對象 70

2.14.2  異步加載序列化對象 70

2.14.3  在內存中保存之前加載的序列化對象 70

2.14.4  將公共數據移入ScriptableObject 71

2.15  疊加、異步地加載

  場景 71

2.16  創建自定義的

  Update()層 72

2.17  本章小結 76

第Ⅱ部分  圖形優化

第3章  批處理的優勢 78

3.1  Draw Call 79

3.2  材質和著色器 81

3.3  Frame Debugger 83

3.4  動態批處理 85

3.4.1  頂點屬性 86

3.4.2  網格縮放 87

3.4.3  動態批處理總結 88

3.5  靜態批處理 89

3.5.1  Static標記 89

3.5.2  內存需求 90

3.5.3  材質引用 90

3.5.4  靜態批處理的警告 90

3.5.5  靜態批處理總結 91

3.6  本章小結 92

第4章  優化藝術資源 93

4.1  音頻文件 93

4.1.1  導入音頻文件 94

4.1.2  加載音頻文件 94

4.1.3  編碼格式與品質級別 97

4.1.4  音頻性能增強 98

4.2  紋理文件 101

4.2.1  紋理壓縮格式 101

4.2.2  紋理性能增強 103

4.3  網格和動畫文件 111

4.3.1  減少多邊形數量 112

4.3.2  調整網格壓縮 112

4.3.3  恰當使用Read-Write 

Enabled 112

4.3.4  考慮烘焙動畫 113

4.3.5  合並網格 113

4.4  Asset Bundle和Resource 114

4.5  本章小結 115

第5章  加速物理引擎 116

5.1  物理引擎的內部工作情況 117

5.1.1  物理和時間 117

5.1.2  靜態碰撞器和動態碰撞器 120

5.1.3  碰撞檢測 121

5.1.4  碰撞器類型 122

5.1.5  碰撞矩陣 124

5.1.6  Rigidbody激活和休眠狀態 124

5.1.7  射線和對象投射 125

5.1.8  調試物理 125

5.2  物理性能優化 127

5.2.1  場景設置 127

5.2.2  適當使用靜態碰撞器 129

5.2.3  恰當使用觸發體積 129

5.2.4  優化碰撞矩陣 130

5.2.5  首選離散碰撞檢測 131

5.2.6  修改固定更新頻率 132

5.2.7  調整允許的最大時間步長 133

5.2.8  最小化射線投射和邊界體積檢查 133

5.2.9  避免復雜的網格碰撞器 135

5.2.10  避免復雜的物理組件 137

5.2.11  使物理對象休眠 137

5.2.12  修改處理器迭代次數 138

5.2.13  優化布娃娃 139

5.2.14  確定何時使用物理 141

5.3  本章小結 142

第6章  動態圖形 143

6.1  管線渲染 144

6.1.1  GPU前端 145

6.1.2  GPU後端 146

6.1.3  光照和陰影 149

6.1.4  多線程渲染 152

6.1.5  低級渲染API 153

6.2  性能檢測問題 153

6.2.1  分析渲染問題 153

6.2.2  暴力測試 155

6.3  渲染性能的增強 157

6.3.1  啟用/禁用GPU Skinning 157

6.3.2  降低幾何復雜度 157

6.3.3  減少曲面細分 157

6.3.4  應用GPU實例化 158

6.3.5  使用基於網格的LOD 159

6.3.6  使用遮擋剔除 160

6.3.7  優化粒子系統 161

6.3.8  優化Unity UI 163

6.3.9  著色器優化 167

6.3.10  使用更少的紋理數據 173

6.3.11  測試不同的GPU紋理壓縮格式 174

6.3.12  最小化紋理交換 174

6.3.13  VRAM限制 175

6.3.14  照明優化 176

6.3.15  優化移動設備的渲染

性能 178

6.4  本章小結 180

第Ⅲ部分  高級優化

第7章  虛擬現實和增強現實的優化 182

7.1  XR技術概述 182

7.2  XR開發 183

7.3  XR中的性能增強 187

7.3.1  物盡其用 187

7.3.2  單通道立體渲染和多通道立體渲染 188

7.3.3  應用抗鋸齒 190

7.3.4  首選前向渲染 190

7.3.5  VR的圖像效果 190

7.3.6  背面剔除 191

7.3.7  空間化音頻 191

7.3.8  避免攝像機物理

碰撞 191

7.3.9  避免歐拉角 192

7.3.10  運動約束 192

7.3.11  跟上最新發展 192

7.4  本章小結 193

第8章  掌握內存管理 194

8.1  Mono平臺 195

8.1.1  內存域 196

8.1.2.  垃圾回收 198

8.2  代碼編譯 201

8.2  代碼編譯 201

8.3  分析內存 204

8.3.1  分析內存消耗 204

8.3.2  分析內存效率 205

8.4  內存管理性能增強 205

8.4.1  垃圾回收策略 205

8.4.2  手動JIT編譯 206

8.4.3  值類型和引用類型 207

8.4.4  字符串連接 214

8.4.5  裝箱 217

8.4.6  數據佈局的重要性 218

8.4.7  Unity API中的數組 219

8.4.8  對字典鍵使用

InstanceID 220

8.4.9  foreach循環 221

8.4.10  協程 221

8.4.11  閉包 221

8.4.12  .NET庫函數 222

8.4.13  臨時工作緩沖區 222

8.4.14  對象池 223

8.4.15  預制池 225

8.4.16  IL2CPP優化 239

8.4.17  WebGL優化 239

8.5  本章小結 239

第9章  面向數據的技術棧 240

9.1  多線程的問題 241

9.2  Unity的作業系統 244

9.2.1  一個基本的作業 245

9.2.2  一個較復雜的示例 247

9.3  新的ECS 251

9.4  Burst編譯器 258

9.5  本章小結 259

第10章  使用GPU Instancing 優化大量動畫對象 260

10.1  應用場景 260

10.2  實現思路 261

10.3  主要實現步驟 261

10.4  部分核心邏輯偽代碼 261

10.5  第一個版本——實現 262

10.5.1  運行 262

10.5.2  項目概覽 265

10.5.3  編輯器烘焙代碼詳解 265

10.5.4  運行時代碼和Shader詳解 274

10.5.5  C#代碼詳解 281

10.6  第二個版本——優化 282

10.6.1  AnimationInfo 283

10.6.2  GPUInstancing

Animation 283

10.6.3  AnimatorBakeInfo 283

10.6.4  AnimationBaker 284

10.7  本章小結 289

第11章  提示與技巧 290

11.1  編輯器熱鍵提示 291

11.1.1  GameObject 291

11.1.2  Scene窗口 291

11.1.3  數組 292

11.1.4  界面 293

11.1.5  在編輯器內撰寫文檔 294

11.2  編輯器界面提示 294

11.2.1  腳本執行順序 294

11.2.2  編輯器文件 294

11.2.3  Inspector 窗口 296

11.2.4  Project窗口 297

11.2.5  Hierarchy窗口 298

11.2.6  Scene和Game窗口 299

11.2.7  Play模式 299

11.3  腳本提示 300

11.3.1  一般情況 300

11.3.2  特性 301

11.3.3  日誌 302

11.3.4  有用的鏈接 302

11.4  自定義編輯器腳本和 菜單提示 302

11.5  外部提示 303

11.6  其他提示 304

11.7  本章小結 305