Unity 遊戲優化(第2版)

Unity 遊戲優化(第2版)
定價:588
NT $ 488
  • 作者:(英)克里斯•迪金遜
  • 出版社:清華大學出版社
  • 出版日期:2020-05-01
  • 語言:簡體中文
  • ISBN10:7302550514
  • ISBN13:9787302550518
  • 裝訂:平裝 / 268頁 / 16k / 19 x 26 x 1.34 cm / 普通級 / 單色印刷 / 初版
 

內容簡介

使用Unity Profiler查找程式中任何地方的瓶頸,並發現解決它們的方法。
實現C#腳本編寫的更佳實踐,避免常見誤區。
深入理解渲染管線,通過減少繪製調用和避免填充率瓶頸來更大化渲染管線的性能。
以大多數開發者都能理解的方式增強著色器,通過微妙而有效的性能調整優化它們。
充分利用物理引擎使場景盡可能保持動態。
組織、過濾並壓縮藝術資源,保持高品質的同時更大化性能。
發現VR專案中各種嚴重的性能問題,找到解決它們的方法。
使用Mono框架和C#實現底層強化以更大化記憶體使用,避免垃圾回收。
瞭解專案組織的*實踐,通過改進工作流來節省時間。

 

作者介紹

Chris Dickinson在英格蘭一個安靜的小角落裡長大,對數學、科學,尤其是電子遊戲滿懷熱情。他喜歡玩遊戲並剖析遊戲的玩法,並試圖確定它們是如何工作的。Chris在獲得電子物理學的碩士學位後,他飛到美國加州,在矽穀中心的科學研究領域工作。不久後,他不得不承認,研究工作並不適合他的性格。在四處投簡歷之後,他找到了一份工作,最終讓他走上了軟體工程的正確道路(據說,這對於物理學畢業生來說並不罕見)。

Chris是IPBX電話系統的自動化工具開發人員,這段時間的工作更適合他的性格。現在,他正在研究複雜的設備鏈,説明開發人員修復和改進這些設備,並開發自己的工具。Chris學習了很多關於如何使用大型、複雜、即時、基於事件、使用者輸入驅動的狀態機的知識。在這方面,Chris基本上是自學成才的,他對電子遊戲的熱情再次高漲,促使他真正弄清楚電子遊戲是如何創建的。當他有足夠的信心時,他回到學校攻讀遊戲和模擬程式設計的學士學位。
 
當他獲得學位時,他已經在用C 編寫自己的遊戲引擎(儘管還很初級),並在日常工作中經常使用這些技能。然而,如果想創建遊戲,應該只是創建遊戲,而不是編寫遊戲引擎。因此,Chris選擇了他最喜歡的公開發行的遊戲引擎——一個稱為Unity3D的優秀小工具——並開始製作一些遊戲。

經過一段時間的獨立遊戲開發,Chris遺憾地決定,這條特定的職業道路的要求並不適合他,但他在短短幾年積累的知識量,以大多數人的標準來看,都令人印象深刻,他喜歡利用這些知識説明其他開發人員創建作品。從那以後,Chris編寫了一本關於遊戲物理的教程((Learning Game Physics with Bullet Physics and OpenGL,Packt Publishing)和兩本關於Unity性能優化的書籍。
 
他娶了他一生的摯愛Jamie,並開始在加州聖馬特奧市的Jaunt公司工作,研究最酷的現代技術,擔任測試領域的軟體發展工程師(SDET),這是一家專注於提供VR和AR體驗(例如360視頻)的虛擬實境/增強現實初創公司。

工作之餘,Chris一直抵抗對棋盤遊戲的沉迷(特別是《太空堡壘:卡拉狄加與血腥狂怒》),他癡迷於暴雪的《守望先鋒》和《星際爭霸2》,專注地盯著Unity最新版本,在紙上勾畫出一組關於遊戲的構思。
 

目錄

第1 章  研究性能問題  1
1.1  Unity Profiler  2
1.1.1  啟動Profiler  3
1.1.2  Profiler窗口  7
1.2  性能分析的最佳方法  15
1.2.1  驗證腳本是否出現  16
1.2.2  驗證腳本次數  16
1.2.3  驗證事件的順序  17
1.2.4  最小化正在進行的代碼更改  18
1.2.5  最小化內部影響  18
1.2.6  最小化外部影響  20
1.2.7  代碼片段的針對性分析  20
1.3  關於分析的思考  25
1.3.1  理解Profiler工具  26
1.3.2  減少干擾  26
1.3.3  關注問題  27
1.4  本章小結  27

第2 章  腳本策略  29
2.1  使用最快的方法獲取元件  29
2.2  移除空的回檔定義  31
2.3  緩存組件引用  34
2.4  共用計算輸出  36
2.5  Update、Coroutines 和InvokeRepeating  36
2.6  更快的GameObject空引用檢查  40
2.7  避免從GameObject取出字串屬性  40
2.8  使用合適的資料結構  43
2.9  避免運行時修改Transform的父節點  44
2.10  注意緩存Transform的變化  44
2.11  避免在運行時使用Find()和SendMessage()方法  46
2.11.1  將引用分配給預先存在的對象  49
2.11.2  靜態類  51
2.11.3  單例組件  54
2.11.4  全域消息傳遞系統  58
2.12  禁用未使用的腳本和物件  69
2.12.1  通過可見性禁用物件  70
2.12.2  通過距離禁用對象  71
2.13  使用距離平方而不是距離  72
2.14  最小化反序列化行為  73
2.14.1  減小序列化物件  73
2.14.2  非同步載入序列化物件  74
2.14.3  在記憶體中保存之前載入的序列化物件  74
2.14.4  將公共資料移入ScriptableObject  74
2.15  疊加、非同步地載入場景  74
2.16  創建自訂的Update()層  76
2.17  本章小結  80

第3 章  批次處理的優勢  81
3.1  Draw Call  82
3.2  材質和著色器  84
3.3  Frame Debugger  86
3.4  動態批次處理  88
3.4.1  頂點屬性  89
3.4.2  網格縮放  91
3.4.3  動態批次處理總結  92
3.5  靜態批次處理  93
3.5.1  Static標記  93
3.5.2  記憶體需求  93
3.5.3  材質引用  94
3.5.4  靜態批次處理的警告  94
3.5.5  靜態批次處理總結  95
3.6  本章小結  96

第4 章  著手處理藝術資源  97
4.1  音訊  97
4.1.1  導入音訊檔  98
4.1.2  載入音訊檔  98
4.1.3  編碼格式與品質級別  101
4.1.4  音訊性能增強  103
4.2  紋理文件  106
4.2.1  紋理壓縮格式  106
4.2.2  紋理性能增強  108
4.3  網格和動畫文件  116
4.3.1  減少多邊形數量  117
4.3.2  調整網格壓縮  117
4.3.3  恰當使用Read-Write Enabled  118
4.3.4  考慮烘焙動畫  118
4.3.5  合併網格  119
4.4  Asset Bundle和Resource  119
4.5  本章小結  120

第5 章  加速物理  121
5.1  物理引擎的內部工作情況  122
5.1.1  物理和時間  122
5.1.2  靜態碰撞器和動態碰撞器  125
5.1.3  碰撞檢測  126
5.1.4  碰撞器類型  127
5.1.5  碰撞矩陣  129
5.1.6  Rigidbody啟動和休眠狀態  129
5.1.7  射線和物件投射  130
5.1.8  調試物理  130
5.2  物理性能優化  132
5.2.1  場景設置  132
5.2.2  適當使用靜態碰撞器  134
5.2.3  恰當使用觸發體積  134
5.2.4  優化碰撞矩陣  135
5.2.5  首選離散碰撞檢測  136
5.2.6  修改固定更新頻率  137
5.2.7  調整允許的最大時間步長  138
5.2.8  最小化射線發射和邊界體積檢查  139
5.2.9  避免複雜的網格碰撞器  140
5.2.10  避免複雜的物理元件  142
5.2.11  使物理物件休眠  143
5.2.12  修改處理器反覆運算次數  144
5.2.13  優化布娃娃  145
5.2.14  確定何時使用物理  147
5.3  本章小結  148

第6 章  動態圖形  149
6.1  管線渲染  150
6.1.1  GPU前端  151
6.1.2  GPU後端  152
6.1.3  光照和陰影  155
6.1.4  多執行緒渲染  159
6.1.5  低級渲染API  159
6.2  性能檢測問題  160
6.2.1  分析渲染問題  160
6.2.2  暴力測試  162
6.3  渲染性能的增強  163
6.3.1  啟用/禁用 GPU Skinning  163
6.3.2  降低幾何複雜度  164
6.3.3  減少曲面細分  164
6.3.4  應用GPU產生實體  164
6.3.5  使用基於網格的LOD  165
6.3.6  使用遮擋剔除  167
6.3.7  優化粒子系統  168
6.3.8  優化Unity UI  170
6.3.9  著色器優化  174
6.3.10  使用更少的紋理資料  181
6.3.11  測試不同的GPU紋理壓縮格式  181
6.3.12  最小化紋理交換  182
6.3.13  VRAM限制  183
6.3.14  照明優化  184
6.3.15  優化移動設備的渲染性能  186
6.4  本章小結  188

第7 章  虛擬速度和增強加速度  189
7.1  XR開發  190
7.1.1  模擬  191
7.1.2  用戶舒適度  192
7.2  性能增強  194
7.2.1  物盡其用  194
7.2.2  單通道立體渲染和多通道立體渲染  195
7.2.3  應用抗鋸齒  196
7.2.4  首選前向渲染  197
7.2.5  VR的圖像效果  197
7.2.6  背面剔除  197
7.2.7  空間化音訊  198
7.2.8  避免攝像機物理碰撞  198
7.2.9  避免歐拉角  198
7.2.10  運動約束  199
7.2.11  跟上最新發展  199
7.3  本章小結  199

第8 章  掌握記憶體管理  201
8.1  Mono平臺  202
8.2  代碼編譯  209
8.3  分析記憶體  210
8.3.1  分析記憶體消耗  210
8.3.2  分析記憶體效率  211
8.4  記憶體管理性能增強  212
8.4.1  垃圾回收策略  212
8.4.2  手動JIT編譯  213
8.4.3  數值型別和參考類型  214
8.4.4  字元串連接  221
8.4.5  裝箱(Boxing)  224
8.4.6  資料佈局的重要性  226
8.4.7  Unity API中的陣列  227
8.4.8  對字典鍵使用InstanceID  227
8.4.9  foreach迴圈  228
8.4.10  協程  229
8.4.11  閉包  229
8.4.12  .NET庫函數  230
8.4.13  臨時工作緩衝區  231
8.4.14  物件集區  231
8.4.15  預製池  234
8.4.16  IL2CPP優化  249
8.4.17  WebGL 優化  249
8.5  Unity、Mono和IL2CPP的未來  249
8.6  本章小結  252

第9 章  提示與技巧  253
9.1  編輯器熱鍵提示  254
9.1.1  GameObject  254
9.1.2  Scene 窗口  254
9.1.3  陣列  255
9.1.4  介面  255
9.1.5  在編輯器內撰寫文檔  256
9.2  編輯器UI提示  256
9.2.1  腳本執行順序  256
9.2.2  編輯器檔  256
9.2.3  Inspector 窗口  258
9.2.4  Project窗口  259
9.2.5  Hierarchy窗口  260
9.2.6  Scene 和 Game 窗口  260
9.2.7  Play模式  262
9.3  腳本提示  262
9.3.1  一般情況  262
9.3.2  特性  263
9.3.3  日誌  264
9.3.4  有用的連結  264
9.4  自訂編輯器腳本和功能表提示  265
9.5  外部提示  266
9.6  本章小結  268

網路書店 類別 折扣 價格
  1. 新書
    83
    $488