編輯推薦
√ 本書來自產業第一線前線的經驗案例
√ 所有方案皆出自騰訊遊戲上線項目
√ 精選遊戲產業內具有du創性的技術
√ 騰訊遊戲研發原創技術方案與經驗
√ 代表騰訊遊戲團隊的集體研究成果
√ 涵蓋多個至關重要的核心技術領域
√ 中國版Game Programming Gems
√ 提升全國遊戲從業人員整體開發水平
內容簡介
《騰訊遊戲開發精粹》是騰訊遊戲研發團隊的技術結晶,由10多位騰訊遊戲資深技術專家撰寫而成,整理了團隊在自主遊戲研發的道路上積累沉澱的技術方案,具有較強的通用性時效性,內容涵蓋遊戲腳本系統及開發工具、數學與物理、電腦圖形、人工智慧與後台架構等。
作者簡介
騰訊遊戲十多位從事第一線技術研發和前沿創新的骨幹開發技術專家。
目錄
目錄
第一部分遊戲數學
第1 章基於SDF的搖桿移動2
摘要2
1.1 引言3
1.2 有號距離場(SDF 3
1.3 利用柵格資料預計算SDF 4
1.4 SDF 的碰撞偵測與碰撞響應5
1.5 避免往返8
1.6 利用多邊形資料預計算SDF 9
1.7 其他需求10
1.7.1 如何將角色從障礙區域移出10
1.7.2 角色不能越過障礙物的遠距離移動11
1.8 動態障礙物12
1.9 AI尋路14
1.10 動態地圖14
1.11 總結17
參考文獻17
第2 章高效能的定點數實現方案18
摘要18
2.1 引言18
2.1.1 浮點數簡介18
2.1.2 32 位元浮點數(單精確度)表示原理19
2.2 基於整數的二進位表示的定點數原理19
2.2.1 32 位元定點數表示原理19
2.2.2 64 位元定點數表示原理20
2.3 定點數的四則運算21
2.3.1 加法與減法22
2.3.2 乘法22
2.3.3 除法23
2.4 定點數開方與超越函數實現方法23
2.4.1 多項式擬合24
2.4.2 正弦/餘弦函數25
2.4.3 指數函數26
2.4.4 對數函數27
2.4.5 開方運算27
2.4.6 開方求倒數28
2.4.7 為什麼不用查表法30
2.5 定點數的誤差比較與性能測試30
2.5.1 超越函數及開方的誤差測試30
2.5.2 性能測試30
2.6 總結31
參考文獻31
第二部分遊戲物理
第3 章一種高效率的弧長參數化路徑系統34
摘要34
3.1 引言34
3.2 端點間二次樣條的建構35
3.3 路徑的建構38
3.4 曲線的弧長參數化39
3.5 曲線上的簡單運動42
3.5.1 跑動42
3.5.2 跳躍43
3.5.3 相鄰路徑的切換44
3.5.4 曲線上的旋轉插值45
3.6 總結46
參考文獻46
第4 章船的實體模擬及同步設計47
摘要47
4.1 浮力系統48
4.1.1 浮力48
4.1.2 升力52
4.1.3 拉力52
4.1.4 拍擊力53
4.1.5 阻力上限54
4.2 引擎系統55
4.2.1 移動、轉向模擬55
4.2.2 向心力計算56
4.3 Entity-Component 及同步概覽56
4.4 浮力系統物理更新機制57
4.5 總結59
參考文獻59
第5 章3D 遊戲碰撞之體素記憶體、效率優化60
摘要60
5.1 背景介紹60
5.2 體素生成62
5.3 體素內存優化62
5.3.1 體素合併的原理62
5.3.2 體素合併的演算法64
5.3.3 地面處理65
5.3.4 水的處理66
5.3.5 範圍控制67
5.3.6 內存自管理67
5.3.7 體素記憶體最佳化演算法的效果68
5.3.8 體素效率優化69
5.4 NavMesh 生成69
5.4.1 體素生成NavMesh 69
5.4.2 取得地面高度70
5.4.3 後台阻擋圖71
5.4.4 前台優先級NavMesh 71
5.4.5 鋸齒72
5.5 行走、輕功、攝影機碰撞73
5.5.1 行走73
5.5.2 輕功75
5.5.3 攝影機碰撞75
參考文獻76
第三部分電腦圖形
第6 章行動端體育類寫實模型最佳化78
摘要78
6.1 引言79
6.2 方案設計思路79
6.2.1 角色統一與差異元素分析79
6.2.2 角色表現=人體+服飾80
6.2.3 角色資源整理83
6.2.4 資源製作與實現84
6.3 具體實現92
6.3.1 實現流程92
6.3.2 CPU 邏輯93
6.3.3 GPU 渲染97
6.4 效果收益、性能分析與結語97
6.4.1 方案優劣勢98
6.4.2 方案補充99
6.4.3 應用場景99
參考文獻100
第7 章大規模3D 模型資料的最佳化壓縮與精細漸進載入101
摘要101
7.1 引言102
7.2 頂點資料優化102
7.2.1 頂點資料合併去重103
7.2.2 索引資料合併104
7.2.3 頂點資料排序104
7.2.4 子網格的拆分與合併105
7.2.5 頂點資料編碼壓縮105
7.3 有利於漸進式載入的資料組織方式112
7.4 總結113
參考文獻114
第四部分人工智慧及後台架構
第8 章遊戲AI 開發框架組件behaviac 與元程式設計116
摘要116
8.1 behaviac 的工作原理117
8.1.1 類型資訊117
8.1.2 什麼是行為樹118
8.1.3 例1 119
8.1.4 執行說明119
8.1.5 進階120
8.1.6 例2 120
8.1.7 再進階123
8.1.8 總結123
8.2 元編程在behaviac的應用125
8.2.1 模板特化126
8.2.2 加載中的特例化126
8.2.3 運行中的特例化129
第9 章跳點搜尋演算法的效率、記憶體、路徑最佳化方法131
摘要131
9.1 引言132
9.2 JPS算法133
9.2.1 演算法介紹133
9.2.2 A*演算法流程133
9.2.3 JPS演算法流程135
9.2.4 JPS演算法的「兩個定義、三個規則135
9.2.5 演算法舉例137
9.3 JPS演算法優化138
9.3.1 JPS效率最佳化演算法138
9.3.2 JPS內存優化144
9.3.3 路徑優化145
9.4 GPPC 比賽解讀146
9.4.1 GPPC 比賽與地圖資料集146
9.4.2 GPPC 的評估系統148
9.4.3 GPPC 參賽演算法及其比較150
參考文獻151
第10 章優化MMORPG開發效率及效能的有限多執行緒模型152
摘要152
10.1 引言152
10.1.1 多進程單執行緒模型153
10.1.2 單進程多執行緒模型153
10.1.3 單進程單執行緒模型153
10.2 有限多執行緒模型154
10.3 使用OpenMP框架快速實現有限多執行緒模型156
10.4 控制多執行緒邏輯程式碼158
10.5 非同步化解決資料安全問題159
10.6 對「不安全」訪問的防範160
10.7 拆解大鎖161
10.8 其他建議163
參考文獻164
第五部分遊戲腳本系統
第11 章Lua翻譯工具—C#轉Lua 166
摘要166
11.1 設計初衷166
11.2 實現原理167
11.2.1 參考比較產業內類似的解決方案167
11.2.2 翻譯原理168
11.2.3 翻譯流程168
11.3 翻譯範例170
11.4 實作細節174
11.4.1 連續賦值175
11.4.2 switch 175
11.4.3 continue 176
11.4.4 不定參數177
11.4.5 條件式178
11.5 運行性能179
11.6 TKLua 翻譯藍圖179
11.6.1 類關係180
11.6.2 類成員180
11.6.3 方法體181
11.7 發展方向182
11.8 總結184
參考文獻185
第12 章Unreal Engine 4整合Lua 186
摘要186
12.1 引言186
12.2 UE4 元資訊187
12.2.1 介紹187
12.2.2 Lua 透過元資訊與UE4互動189
12.2.3 讀寫成員變數189
12.2.4 函數呼叫190
12.2.5 C++呼叫Lua 191
12.2.6 小結192
12.3 透過模板元編程產生「膠水」代碼192
12.3.1 介面設計193
12.3.2 實現195
12.3.3 讀寫成員變數197
12.3.4 引用型別198
12.3.5 導出函數199
12.3.6 預設實參200
12.3.7 預設產生的函數202
12.3.8 C++呼叫Lua 203
12.3.9 小結203
12.4 優化203
12.4.1 UObject 指標與Table 203
12.4.2 結構體204
12.4.3 運行時熱加載205
第六部分開發工具
第13 章使用FASTBuild輔助Unreal Engine 4 208
摘要208
13.1 引言209
13.2 UE4 分散式工具209
13.2.1 Derived Data Cache(DDC 209
13.2.2 Swarm 210
13.2.3 IncrediBuild 210
13.2.4 FASTBuild 211
13.3 在Windows系統下建置FASTBuild 工作環境213
13.3.1 網路架構213
13.3.2 搭建基本環境214
13.3.3 可用性驗證215
13.4 使用FASTBuild 分散式編譯UE4程式碼和專案碼219
13.4.1 準備工作219
13.4.2 部署多機FASTBuild 環境220
13.4.3 編譯UE4 程式碼及比較測試220
13.4.4 優化FASTBuild 224
13.4.5 再次測試分散式編譯UE4程式碼227
13.5 “秒”編UE4著色器228
13.5.1 準備工作229
13.5.2 大規模著色器編譯測試237
13.5.3 材質編輯器內著色器編譯測試240
13.6 總結243
第14 章一種高效率的幀同步全過程日誌輸出方案244
摘要244
前言/序言
編者序
遊戲開發對於一般軟體開發者來說,總像蒙上了一層神秘面紗。這可能是由多個原因造成的。首先,遊戲開發的技術範疇比較廣,有些技術如電腦圖形、物理模擬、即時網路同步等比較少應用在一般軟體開發中。其次,遊戲開發屬於創意產業,對各類型遊戲的需求有許多差異,不少技術沒有形成標準,各家的技術方案、工作流程等也會有不少差異。最後,公司之間甚至公司之內也可能有技術壁壘,影響知識和技術的流通。這些情況不利於有興趣的朋友進入此行業,從業者的進步也會受限,長遠影響產業的發展,難以面對全球激烈的競爭。
編者在20 世紀90 年代的香港,互聯網未普及之前,只能透過BBS收集一些國外「漂流」過來的遊戲開發技術文檔,例如《德軍總部3D》的三維室內場景渲染及紋理貼圖技術、如何使用非標準的Mode X 去做VGA 256 色雙緩衝區渲染等。在那個資訊匱乏的年代,每次遇到新技術的解密文檔,編者都興奮得如獲至寶。
而在國內做遊戲開發的“老鳥”,大概都會翻過千禧年代的《遊戲程式設計精粹(Game Programming Gems)》系列叢書。這套叢書影響了一整代的開發者,讓我們能一窺世界各地遊戲開發者的各種秘技,解決在遊戲開發中遇到的各種共同問題,同時可以激發靈感,研發比書中更好的解決方案。
進入網路資訊爆炸的年代,我們能在網路上接觸無數的部落格、問答等訊息,可以更快速地知悉各種新技術。但同時,網路資訊相對於傳統出版來說,通常較為零散,品質參差不齊。從業者也基於保密原因,不會隨便公開一些遊戲開發中所使用的新技術。
本書受《遊戲程式設計精粹》系列叢書的啟發,希望鼓勵騰訊遊戲的工程師與業界同行分享一些實際應用在遊戲中的技術,與業界共享。透過內部審核及編輯等機制,盡量篩選可對外公開、品質的文章,也確保技術具有一定的通用性及時效性。對國內業界而言,希望這本書能成為一小步,促進更開放的未來,提升整體技術水準。
本書從提案到出版長達一年半的時間,除了依靠各位作者在忙碌的開發任務中抽空撰文,還必須感謝騰訊遊戲學院院長夏琳女士的大力支持,也要感謝騰訊遊戲學院的董磊、劉雅和陳若毅讓計畫成功推進。我也衷心感謝本書的編委郭智、劉安健、匡西尼、安柏霖、王楊軍和沙鷹(排名不分先後),他們都是騰訊遊戲各部門的技術專家,悉心為文章的內容把關。也非常感謝電子工業出版社的張春雨和葛娜協助出版事宜。
最後,希望本書能對讀者有所幫助,如有任何意見請不吝透過電子郵件回饋給我們:tencentgamesgems@tencent.com,期望在續篇再見。
——葉勁峰《騰訊遊戲開發精粹》主編騰訊互動娛樂魔術方塊工作室群技術總監
推薦序
前不久,一位高中生物老師,也是我小孩同班同學的媽媽,主動問我這幾年新開設的遊戲設計和電競專業是否值得報考,她的孩子對製作遊戲非常有興趣。聽到這個諮詢,我長舒了一口氣:遊戲正逐漸被越來越多的人認可。
我們知道,電子遊戲是“第九藝術”,是各種藝術和技術能力的集大成者。記得在10 多年前,我參與開發騰訊第一款自研遊戲《QQ 幻想》的時候,隨著專案的進展,我深深體會到,開發出一款高品質的MMORPG 遊戲需要很強的、綜合的技術能力。例如一些技術細節:如何在最大限度限制瞬移外掛的情況下,處理弱網路環境下角色的移動拉扯和同步?如何有效率地實現基於決策樹的各種NPC 的AI,使得NPC 的行為更貼近自然和有趣?遊戲內經濟系統的平衡,各種角色之間能力的平衡,還有上百萬用戶同時在線時的穩定性、熱更新、熱切換……諸如此類,在當時的技術背景下,是頗為嚴峻的挑戰。
我們也知道,知識只有分享才更有價值。站在巨人的肩膀上,會看得更遠;有了前輩的經驗加持,也會成長得更快。 《騰訊遊戲開發精華》這本書匯集了騰訊遊戲在遊戲開發中的部分精華,從客戶端到伺服器端,從實體引擎到工具鏈,從圖形學到AI,各領域均有被驗證過的解決方案呈現。騰訊是一家具有高度社會責任感的企業,它願意將這些能力和經驗無私奉獻給大家,為產業的發展貢獻自己的一點力量。互相學習,一起進步,是我們的希望。
我們也知道,電子遊戲的特徵之一是互動,在飯桌、在房間、在地鐵……我們都可以看到各種玩遊戲情景的開心愉快,它已經融入我們的日常生活之中。娛樂是人的天性,但讓生活更美好,是我們每個遊戲從業者的使命。從虛擬世界到現實生活,再從現實生活到虛擬世界,用科技的手段改變生活,未來就靠你了!
——崔曉春騰訊互動娛樂公共研發營運體系負責人
評論{{'('+ commentList.posts_count + ')'}}
分享您的感受,幫助更多用戶做出選擇。
撰寫評論{{i}}星
{{i}} 星
{{ parseInt(commentRatingList[i]) }}%
{{ showTranslate(comment) }}收起
{{ strLimit(comment,800) }}查看全部
Show Original{{ comment.content }}
{{ formatTime(comment.in_dtm) }} 已購買 {{groupData}}
{{ showTranslate(comment) }}收起
{{ strLimit(comment,800) }}查看全部
Show Original{{ comment.content }}
{{ formatTime(comment.in_dtm) }} 已購買 {{groupData}}
暫無符合條件的評論~
評論詳情
{{commentDetails.user_name}}
{{ showTranslate(commentDetails) }}收起
{{ strLimit(commentDetails,800) }}查看全部
Show Original{{ commentDetails.content }}
{{ formatTime(commentDetails.in_dtm) }} 已購買 {{groupData}}
回覆{{'(' + replyList.length + ')'}}
{{ reply.reply_user_name }}回覆{{ reply.parent_user_name }}
{{ showTranslate(reply) }}收起
{{ strLimit(reply,800) }}查看全部
Show Original{{ reply.reply_content }}
{{ formatTime(reply.reply_in_dtm) }}
這是到目前為止的所有評論!
請輸入評論
舉報
確認刪除該評論嗎?
取消