-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

游戲引擎架構(第2版)

( 簡體 字)
作者:葉勁峰類別:1. -> 多媒體 -> 遊戲引擎 -> 其它
譯者:
出版社:電子工業出版社游戲引擎架構(第2版) 3dWoo書號: 51971
詢問書籍請說出此書號!

缺書
NT售價: 1095

出版日:10/1/2019
頁數:972
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121375293
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

推薦序 1
最初拿到 Game Engine Architecture 一書的英文版 , 是電子工業出版社博文視點公司的編輯俠少郵寄給我的打印版。他建議我接下翻譯此書的重任。當時我正在杭州帶領一個團隊開發 3D 游戲引擎 , 我和我的同事都對這本書的內容頗有興趣 , 兩大本打印的英文書稿立刻在同事間傳開。可惜那段時間個人精力實在有限 , 精讀近千頁的英文讀物后再將其翻譯成中文對個人的業余時間來說是一個極大的挑戰 , 不能擔此翻譯任務頗為遺憾。
不久以后聽說 Milo Yip ( 葉勁峰 ) 已開始著手翻譯 , 甚為欣喜。翻譯此巨著 , 他一定是比我更合適的人選。我和 Milo 雖未曾謀面 , 但神交已久 , 在網絡上讀過一些他的成長經歷 , 和我頗為相似 , 心有戚戚。他對游戲 3D 實時渲染技術研究精深為我所不及 , 我們曾通過 Google Talk 討論過許多技術問題 , 他都有獨到的見解。 Milo 是香港人 , 英文技術術語在香港的中文譯法和內地有許多不同 , 但此書由內地出版社出版 , 考慮到面對的讀者主要是內地程序員 , Milo 希望能更符合內地程序員的用詞習慣 , 所以在翻譯開始時就通過 Google Docs 創建了協作頁面 , 邀請大家共同探討書中技術術語的中文譯法。從中我們可以一窺他作為譯者的慎重。
三年之后 , 有幸在出版之前就拿到了完整的譯本。這是一本用 LATEX 精心排版的 1000 多頁的電子書 , 我只花了一周時間 , 幾乎是一口氣讀完。流暢的閱讀享受 , 絕對不僅僅是因為原著精彩的內容 , 精美的版面和翔實的譯注也加分不少。
在閱讀本書的過程中 , 我不止一次地與作者產生共鳴。例如在第 5 章的內存管理系統的介紹中 , 作者介紹的幾種游戲特有的內存管理方法我都曾在項目中用過 , 而這是第一次有書籍專門將這些方法詳盡地記錄下來 ; 又如第 11 章動畫系統的介紹 , 我同樣也有在 3D 引擎開發過程中改進原有動畫片段混合方法的經歷。雖然書中介紹的每個技術點都可能在某篇論文、某本書的某個章節、某篇網絡博客上見過 , 但之前卻無一本書可以把這些內容放在一起相互參
照。對于從事游戲引擎開發的程序員來說 , 了解各種引擎在處理每個具體問題時的方案是相當重要的。而每種方案又各有利弊 , 即使不做引擎開發工作而是在某一特定游戲引擎上做游戲開發 , 也可以從中理解引擎的局限性以及可能的改進方法。尤其是第 14 章介紹的對游戲性相關系統的設計 , 每個開發人員幾乎都是憑經驗設計 , 很少有書籍對這些知識點進行總結。對于基于渲染引擎做開發的游戲程序員 , 這是必須面對的工作 , 這一章有很大的借鑒意義。
本書作者是業內資深的游戲引擎開發者 , 他所參與研發的《神秘海域》和《最后生還者》游戲都是我個人的最愛。在玩游戲的過程中 , 出于游戲程序員的天性 , 自然會不斷地猜想各個技術點是如何實現的 , 背后需要怎樣的工具支持。這些能在書中一一得到印證是一件讓人特別開心的事情。另外 , 作者反復強調代碼實踐的重要性 , 在書中遍布著 C++ 代碼。我不認為這些代碼有直接取來使用的價值 , 但它們極大地幫助了讀者理解書中的技術點。書中列出的頑皮狗工作室用 lisp 方言編寫游戲配置腳本的范例也給了我很大的啟發 , 有了這些具體的代碼示例以及作者本身一線工程師的背景 , 讓我確信書中那些與主機游戲開發相關等我所沒有接觸過的內容都絕非泛泛之談。
國內游戲開發社區的壯大 , 主要隨最近十年的 MMO 風潮而生。而就在大型網絡游戲于國內有些偏離電子游戲的游戲性趨勢時 , 我們有幸迎來了為移動設備開發游戲的大潮。游戲開發的重心重新回到游戲性本身。我們更需要借鑒單機游戲是如何為玩家帶來更純粹的游戲體驗的 , 我相信書中記錄的各種技術點會變得對廣大讀者更有幫助。
云風
推薦序 2
在我認識的許多游戲業開發同仁中 , 只有少數香港同胞 , Milo Yip ( 葉勁峰 ) 卻正是這樣一位讓我印象非常深刻的、優秀的香港游戲開發者。我倆認識是在 Milo 加入騰訊互動娛樂研發部引擎技術中心后 , 至今也只是兩年多的時間。其間 , 他謙遜務實的為人 , 對待技術問題的嚴謹求真態度 , 對算法設計和性能優化的嫻熟技術 , 都為人所稱道。 Milo 一絲不茍的工作風格 , 甚至表現在對待技術文檔排版這類事情上 (Milo 常執著地用 LATEX 將技術文檔排版到完美 ), 我想這一定是他在香港讀大學、碩士及在香港理工大學的多媒體創新中心從事研究員 , 一貫沿襲至今的好作風。
我很高興騰訊游戲有實力吸引到這樣優秀的技術專家 , 即使 Milo 已從上海遷回香港家中 ,依然選擇到深圳騰訊互動娛樂總部工作。從此 , Milo 工作日每天早晚過關 , 來往香港和深圳兩地 , 雖有舟車勞頓 , 但是兼顧了對家庭的照顧和在游戲引擎方面的專業研究 , 希望這樣的狀況是令他滿意的。
認識 Milo 時 , 我便知道他在進行 Jason Gregory 所著的 Game Engine Architecture 一書的翻譯工作。因為自己從前也有業余翻譯游戲開發相關書籍的經歷 , 所以我能理解其中的辛苦和責任重大 , 對 Milo 也更多了一分欽佩。我以為 , 本書以及本書的中文讀者最大的幸運便是 , 遇到 Milo 這位對游戲有著如同對家對國般強烈責任感 , 猶如“游戲科學工作者”般的專業譯者 !
現在 (2013 年年末 ) 無疑是游戲史上對獨立游戲制作者最友好的年代 , 開發設備方便獲得 ( 相對過去僅由主機廠商授權才能獲得專利開發設備 , 現在有一臺智能手機和一臺個人電腦就可以開發游戲 ) 、技術工具友好、調試過程簡單方便 , 且互聯網上有豐富的教程和開源代碼可供參考 , 還有網上社區便于交流。很多游戲愛好者能夠很快地制作出可運行的游戲原型 , 其中一些還能發布到應用商店。
但是不全面掌握各方面知識 , 尤其是游戲引擎架構知識 , 往往只能停留在勉強修改、湊合重用別人提供的資源的應用程度上 , 難以做到極限的性能改進 , 更妄談革命式的架構創新。這樣的程度是很難從成千上萬的游戲中脫穎而出的。我們所認可的真正的游戲大作必定是在某方面大幅超越用戶期待的產品。為了打造這樣的產品 , 游戲內容創作者 ( 策劃、美工等 ) 需要“戴著鐐銬跳舞” ( 在當前的條件下爭取更多的創作自由度 ), 而引擎架構合理的游戲可以經得
起 —— 也值得進行 —— 反復優化 , 最終可以提供更多的自由度 , 這是大作出現的技術前提。
書的作者、譯者、出版社的編輯 , 加上讀者 , 大家是因書而結緣的有緣人。因 Milo 這本《游戲引擎架構》譯著而在線上線下相識的讀者們 , 你們是不是因“了解游戲引擎架構 , 從而制作 / 優化好游戲”這樣的理想而結了緣呢 ?
親愛的讀者 , 愿你的游戲作品有一天因謎題巧妙絕倫、趣味超凡、虛擬世界氣勢磅?、視覺效果逼真精美等專業因素取得業界褒獎 , 并得到玩家真誠的贊美。希望屆時曾讀過 Milo 這本《游戲引擎架構》譯著的你 , 也可以回饋社會 , 回饋游戲開發的學習社區 , 幫助新人。希望你也可以建立微信公眾號、博客等 , 或翻譯游戲開發書籍 , 造福外語不好的讀者 , 所以如果你的外語 ( 英語、日語、韓語對于游戲行業來說比較重要 ) 水平仍須精進 , 現在也可以同步加油了 !
沙鷹
第 1 版前言
歡迎來到《游戲引擎架構》的世界。本書旨在全面探討典型商業游戲引擎的主要組件。游戲編程是一個龐大的主題 , 有許多內容需要討論。不過相信你會發現 , 我們討論的深度將足以使你充分理解本書所涵蓋的工程理論及常用實踐的方方面面。話雖如此 , 令人著迷的漫長游戲編程之旅其實才剛剛啟程。與此相關的每項技術都包含豐富內容 , 本書將為你打下基礎 , 并引領你進入更廣闊的學習空間。
本書的焦點在于游戲引擎的技術及架構。我們會探討商業游戲引擎中各個子系統的相關理論 , 以及實現這些理論所需要的典型數據結構、算法和軟件接口。游戲引擎與游戲的界限頗為模糊。我們將把注意力集中在引擎本身 , 包括多個低階基礎系統 (low-level foundation sys-tem) 、渲染引擎 (rendering engine) 、碰撞系統 (collision system) 、物理模擬 (physics simulation) 、人物動畫 (character animation), 以及一個我稱之為游戲性基礎層 (gameplay foundation layer)的深入討論。此層包括游戲對象模型 (game object model) 、世界編輯器 (world editor) 、事件系統 (event system) 及腳本系統 (scripting system) 。我們也將會接觸游戲性編程 (gameplay programming) 的多個方面 , 包括玩家機制 (player mechanics) 、攝像機 (camera) 及人工智能 (artificial intelligence, AI) 。然而 , 這類討論會被限制在游戲性系統和引擎接口范圍內。
本書可以作為大學中級游戲程序設計中兩到三門課程的教材。當然 , 本書也適合軟件工程師、業余愛好者 , 以及游戲行業的從業人員閱讀。通過閱讀本書 , 資歷較淺的游戲程序員可以鞏固他們所學的游戲數學、引擎架構及游戲科技方面的知識 , 專注某一領域的資深程序員也能從本書更為全面的介紹中獲益。
為了更好地學習本書的內容 , 你需要掌握基本的面向對象編程概念并至少擁有一些 C++編程經驗。盡管游戲行業已經開始嘗試使用一些新的、令人興奮的編程語言 , 然而工業級的 3D 游戲引擎仍然是用 C 或 C++ 編寫的 , 任何對自己有較高要求的游戲程序員都應該掌握 C++ 。
我們將在第 3 章重溫一些面向對象編程的基本原則 , 毫無疑問 , 你也會從本書學到一些 C++第 1 版的小技巧 , 不過 C++ 的基礎最好還是通過閱讀參考文獻 [41] 、 [31] 及 [32] 來獲得。如果你對 C++ 已經有點生疏 , 建議你在閱讀本書的同時最好能重溫這幾本書籍或者類似書籍。如果你完全沒有 C++ 經驗 , 在看本書之前 , 可以考慮先閱讀參考文獻 [41] 的前幾章 , 或者嘗試學習一些 C++ 的在線教程。
學習編程技能最好的方法就是寫代碼。在閱讀本書時 , 強烈建議你選擇一些特別感興趣的主題付諸實踐。舉例來說 , 如果你覺得人物動畫很有趣 , 那么可以首先安裝 OGRE, 并測試一下它的蒙皮動畫示范。接著還可以嘗試用 OGRE 實現本書談及的一些動畫混合技巧。下一步你可能會打算用游戲手柄控制人物在平面上行走。等你能玩轉一些簡單的東西了 , 就應該以此為基礎 , 繼續前進 ! 之后可以轉移到另一個游戲技術范疇 , 循序漸進。這些項目是什么并不重要 , 重要的是你在實踐游戲編程的藝術 , 而不是紙上談兵。
游戲科技是一個活生生、會呼吸的家伙 , 你永遠不可能將之束縛于書本之上。因此 , 附加的資源、勘誤、更新、示例代碼、項目構思等已經發到本書的網站。


第 1 版序言
最早的電子游戲完全由硬件構成 , 但微處理器 (microprocessor) 的高速發展完全改變了游戲的面貌。現在的游戲是在多用途的 PC 或專門的電子游戲主機 (video game console) 上玩的 ,憑借軟件帶來絕妙的游戲體驗。從最初的游戲誕生至今已有半個世紀 , 但很多人仍然認為游戲是一個未成熟的產業。即使游戲可能是一個年輕的產業 , 若仔細觀察 , 會發現它正在高速發展。
現在游戲已成為一個價值上百億美元的產業 , 覆蓋不同年齡、性別的廣泛受眾。千變萬化的游戲 , 可以分為從紙牌游戲到大型多人在線游戲 (massively multiplayer online game, MMOG) 等多個種類 (category) 和類型 (genre) 1 , 也可以運行在任何裝有微芯片 (microchip) 的設備上。你現在可以在 PC 、手機及多種特別為游戲而設計的手持 / 電視游戲主機上玩游戲。家用電視游戲通常代表最尖端的游戲科技 , 又由于它們會周期性地推出新版本 , 因此有游戲機“世代” (generation) 的說法。最新一代 2 的游戲機包括微軟的 Xbox 360 和索尼的 PlayStation 3, 但一定不可忽視長盛不衰的 PC, 以及最近非常流行的任天堂 Wii 。
最近 , 劇增的下載式休閑游戲 , 使這個多樣化的商業游戲世界變得更復雜。雖然如此 , 大型游戲仍然是一門大生意。今天的游戲平臺非常復雜 , 有讓人難以置信的運算能力 , 這使軟件的復雜度得以進一步提升。所有這些先進的軟件都需要由人創造出來 , 這導致團隊人數增加 , 開發成本上漲。隨著產業變得成熟 , 開發團隊要尋求更好、更高效的方式去制作產品 , 可復用軟件 (reusable software) 和中間件 (middleware) 便應運而生 , 以補償軟件復雜度的提升。
由于有這么多風格迥異的游戲及多種游戲平臺 , 因此不可能存在單一理想的軟件方案。然而 , 業界已經發展出一些模式 , 也有大量的潛在方案可供選擇。現今的問題是如何找到一個合適的方案去滿足某個項目的需要。再進一步 , 開發團隊必須考慮項目的方方面面 , 以及如何把各方面集成。對于一個嶄新的游戲設計 , 鮮有可能找到一個完美適配游戲設計各方面的軟件包。
如今業界的老手 , 入行時都是“開荒牛”。我們這代人很少是計算機科學專業出身的 (Matt 的專業是航空工程、 Jason 的專業是系統設計工程 ), 但現在很多學院已設有游戲開發的課程和學位。時至今日 , 為了獲取有用的游戲開發信息 , 學生和開發者必須找到好的途徑。對于高端的圖形技術 , 從研究到實踐都有大量高質量的信息。可是 , 這些信息經常不能直接應用到游戲的生產環境中 , 或者沒有一個生產級質量的實現。對于圖形以外的游戲開發技術 , 市面上有一些所謂的入門書籍 , 沒提及參考文獻就描述很多內容細節 , 像自己發明的一樣。這種做法根本沒有用處 , 甚至經常帶有不準確的內容。另一方面 , 市場上有一些高端的專門領域書籍 , 例如物理、碰撞、人工智能等。可是 , 這類書或者?唆到讓你難以忍受 , 或者高深到讓部分讀者無法理解 , 又或者內容過于零散而難于融會貫通。有一些甚至會直接和某項技術掛鉤 , 軟硬件一旦發生變化 , 其內容就會迅速過時。
此外 , 互聯網也是收集相關知識的絕佳工具。可是 , 除非你確實知道要找些什么 , 否則鏈接失效、不準確的資料、質量差的內容也會成為學習的障礙。
好在 , 我們有 Jason Gregory, 他是一位擁有在頑皮狗 (Naughty Dog) 工作經驗的業界老手 ,而頑皮狗是全球高度矚目的游戲工作室之一。 Jason 在南加州大學教授游戲開發課程時 , 找不到概括游戲架構的教科書。值得慶幸的是 , 他承擔了這個任務 , 填補了這一空白。
Jason 把可應用到實際發行游戲的生產級別知識 , 以及整個游戲開發的大局編集于本書。他憑經驗 , 不僅融匯了游戲開發的概念和技巧 , 還用實際的代碼示例及實現例子去說明怎樣貫通知識來制作游戲。本書的引用及參考文獻可以讓讀者更深入探索游戲開發過程的各個方面。雖然例子經常是基于某些技術的 , 但是概念和技巧是用來實際創作游戲的 , 它們可以超越個別引擎或 API 的束縛。
本書是一本我們入行做游戲時想要的書。我們認為本書能讓入門者增長知識 , 也能為有經驗者開拓更大的視野。


第 1 版譯者序
數千年以來 , 藝術家們通過文學、繪畫、雕塑、建筑、音樂、舞蹈、戲劇等傳統藝術形式充實人類的精神層面。自 20 世紀中葉起 , 計算機的普及派生出另一種藝術形式 —— 電子游戲。
游戲結合了上述傳統藝術以及近代科技派生的其他藝術 ( 如攝影、電影、動畫 ), 并且完全脫離了藝術欣賞這種單向傳遞的方式 —— 游戲必然是互動的 , “玩家”并不是“讀者”、“觀眾”或“聽眾”,而是進入游戲世界、感知并對世界做出反應的參與者。
基于游戲的互動本質 , 游戲的制作通常比其他大眾藝術復雜。商業游戲的制作通常需要各種人才的參與 , 而制作人員需要依賴各種工具及科技。游戲引擎便是專門為游戲而設計的工具及科技的集成。之所以稱為引擎 , 如同交通工具中的引擎 , 提供了最核心的技術部分。因為復雜、研發成本高 , 人們不希望制作每款游戲時都重新設計引擎 , 重用性是游戲引擎的一個重要設計目標。
然而 , 各游戲本身的性質以及平臺的差異 , 使研發完全通用的游戲引擎變得極為困難 , 甚至不可能。市面上出售的游戲引擎 , 有一些雖然已經達到很高的技術水平 , 但在商業應用中 , 很多時候還需要因不同的游戲項目對引擎進行改造、整合、擴展及優化。因此 , 即使能使用市面上最好的商用引擎或自研引擎 , 我們仍需要理解其中的架構、機制和技術 , 并且分析及解決在制作中遇到的問題。這些也是譯者就職于上海兩家工作室時的主要工作范疇。
選擇翻譯此著作 , 主要原因是在閱讀時產生了共鳴 , 并且從中能了解一些知名游戲作品實際中所采用的方案。有感市面上大部分游戲開發書籍并不是由業內人士執筆的 , 內容只夠應付一些簡單的游戲開發 , 欠缺宏觀比較各種方案的內容 , 技術與當今實際情況也有很大的差距。
而一些 Gems 類叢書雖然偶有好文章 , 但受形式所限欠缺系統性、全面性。難得本書原作者身為世界一流游戲工作室的資深游戲開發者 1 , 他在繁重的游戲開發工作之余 , 還在大學教授游戲開發課程以及編寫本著作。此外 , 從與內地同事的交流中 , 我了解到許多從業者不愿意閱讀外文書籍。為了普及知識及回饋業界 , 譯者希望能盡自己的一份綿薄之力。
或許有些人以為本著作是針對單機/游戲機游戲的 , 并不適合國內以網絡游戲為主的環境。但譯者認為這是一種誤解 , 許多游戲本身所涉及的技術是具有通用性的。例如 , 與游戲性相關的游戲性系統、場景管理、人工智能、物理模擬等部分 , 許多時候也會同時用于網絡游戲的前臺和后臺。現在 , 一些以動作為主、非 MMO 的國內端游甚至會直接在后臺運行傳統意義上的游戲引擎。至于與前臺相關的技術 , 單機游戲和端游的區別更小。此外 , 隨著近年移動終端的興起 , 其硬件性能已超越傳統掌上游戲機 , 開發手游所需的技術與開發傳統掌上游戲機游戲的并無太大差異。還可預料 , 現在單機/游戲機的一些較高級的架構及技術將在不遠的將來著陸移動終端平臺。
譯者認為 , 本書涵蓋游戲開發技術的方方面面 , 同時適合入門及經驗豐富的游戲程序員閱讀。書名中的架構二字 , 并不只是表示給出一個系統結構圖 , 還表示描述了每個子系統的需求、相關技術及與其他子系統的關系。對譯者本人而言 , 本書的第 11 章 ( 動畫系統 ) 及第 15 章 ( 運行時游戲性基礎系統 ) 是本書特別精彩之處 , 包含許多少見于其他書籍的內容。而第 10 章 ( 渲染引擎 ) 由于是游戲引擎中的一個極大的部分 , 有限的篇幅可能未能覆蓋廣度及深度 , 推薦讀者閱讀參考文獻 , 人工智能方面也須參考其他專著。
本譯作采用 LATEX 排版 , 以 Inkscape 編譯矢量圖片。為了令閱讀更流暢 , 內文中的網址都統一改為腳注標示。另外 , 由于現在游戲開發相關的文獻以英文為主 , 而且游戲開發涉及的知識面很廣 , 本譯作盡量以括號注釋的形式保留英文術語。為了方便讀者查找內容 , 在附錄中增設中英文雙向索引 ( 索引條目與原著中的不同 ) 。
本人在香港成長、學習及工作 , 至 2008 年才赴內地游戲工作室工作 , 不諳內地的中文寫作及用詞習慣 , 翻譯中曾遇到不少困難。有幸得到出版社人員以及良師益友的幫助 , 這才得以完成本譯作。特別感謝周筠老師支持本書的提案 , 并耐心地給予協助及鼓勵。編輯張春雨老師和盧鶇翔老師 , 以及好友余晟給予了大量翻譯方面的幫助及指導。也感謝游戲業界專家云風、大寶和 Dave 給予了許多寶貴意見。此書的翻譯及排版工作比預期更花時間 , 感謝妻子及兒女們的體諒。此次翻譯工作歷時三年半 , 因工作及家庭事宜導致嚴重延誤 , 唯有在翻譯及排版工作上更盡心盡力 , 希望得到等待此譯作的讀者們的諒解。無論是批評或建議 , 誠希讀者朋友通過電子郵件、新浪微博、豆瓣等渠道不吝賜教。
葉勁峰 (Milo Yip)
2013 年 10 月



第 2 版前言
我對《游戲引擎架構》 ( 第 2 版 ) 的希望有三方面。首先 , 我希望更新本書 , 以包含最新、最令人興奮的內容 , 包括 C++ 編程語言的最新版本 C++11, 以及第 8 代游戲機 ——Xbox One和 PlayStation 4 。
第二 , 我希望填補原作內容中的空白。最顯著的是 , 我決定添加關于音頻的全新章節。此決定部分是因為你 —— 忠實及總是愿意幫忙的讀者 —— 的要求。此決定也部分基于 , 以我所知 , 市面上沒有講述開發 AAA 游戲音頻引擎的物理、數學及技術的書籍。在任何優秀的游戲中 , 音頻都扮演著重要的角色 , 我衷心地希望本書的音頻一章對推廣游戲音頻技術能做出微小的貢獻。
第三 , 我希望修正讀者反饋的眾多錯誤。謝謝你們 ! 我希望你們能發現 , 你們找到的所有錯誤都已被修正 , 以及為了本書第 3 版繼續反饋給我新出現的錯誤 !
當然 , 如我之前所說 , 游戲引擎編程的范疇幾乎是無法想象的廣和深 , 一本書無法包含所有主題。因此 , 本書的主要目的還是作為一個開闊視野的工具 , 以及進一步學習的跳板。我希望本版能幫助你走過游戲引擎架構那迷人、面向多景觀之旅。


第 2 版序言
游戲及計算機是緊緊相連的。從第一款數字電腦游戲的出現 ——1962 年的 Spacewar, 到今天最先進的游戲系統 , 通過計算機的邏輯及數學本質 , 使得游戲中的各個程序方面得以完美結合。數字游戲向我們展示出一個未來世界 , 系統思想、互動及編程基礎將帶來人類發明、發現及想象的新紀元。這個未來是復雜的 —— 所有人都需要好的指南。
開門見山 : 本人認為 , 本書是同類書籍中最好的 , 你找到它是一種幸運。本書以簡明、清楚的方式覆蓋游戲引擎架構這個龐大領域 , 并巧妙地平衡了此領域的廣度與深度 , 它提供了足夠的細節 , 即使初學者也能很容易地理解其中的各種概念。而作者 Jason Gregory 不單是該領域的世界級專家 , 他還是一位在職程序員 , 富有成品品質的知識 , 并參與過許多已發行的游戲項目。他與頑皮狗的游戲工程師一起工作 , 頑皮狗是世界一流的游戲制作工作室之一 , 制作了多款被廣泛認為是史上最佳的游戲。除此以外 , 他還是有著豐富經驗的教育家 , 曾在北美排名靠前的大學教授游戲開發課程。
為什么你應該相信我 , 因為你正在看的是一顆罕有的“寶石” , 這本書將會成為你的游戲開發參考藏書的重要成員。以下我將盡力加強你對我這一主張的信心。
成年以后 , 我一直以專業游戲設計師為業。其中大部分時間 , 我在頑皮狗以首席游戲設計師身份工作 , 而頑皮狗是索尼旗下的工作室 —— 對 , 就是那個創造了 Crash Bandicoot 及 Jak and Daxter 系統游戲的那個工作室。首次認識 Jason Gregory 是在頑皮狗 , 現在我認識他已很長時間了 , 在頑皮狗 , 他與我榮幸地參與了全部三集叫好又叫座的《神秘海域》 (Uncharted) 系列游戲。 Jason 還繼續參與了頑皮狗的下一個極其成功的講故事動作游戲《最后生還者》 (The Last of Us) 。
我的游戲設計師生涯始于英國的 MicroProse 公司 , 在加入頑皮狗之前 , 我在 Crystal Dynamics 工作 , 參與制作了 Gex 和 Legacy of Kain: Soul Reaver 等游戲系列。在頑皮狗工作的 8個奇妙年頭中 , 我學到了非常多的東西 , 現在成了南加州大學戲劇藝術學院互動媒體及游戲部門的老師。我教授南加州大學的游戲課程 , 并在該校的游戲創新實驗室設計游戲。南加州大學與頑皮狗工作室有著緊密的聯系 , Jason 也在南加州大學的 Viterbi 工程學院教授游戲課程中的編程課。
當我初識 Jason 時 , 他剛從我們附近的藝電轉到頑皮狗來 , 他任職于藝電時有許多非常優秀的工作成果 , 包括高技術水平及藝術驅動的游戲動畫方面的工作成果。我們兩人幾乎能即時合拍工作。他承擔了許多復雜的任務 , 其中之一是協助開發腳本語言及其專門的編輯環境 , 這讓我的游戲設計師前輩與我能把各種美術資源、動畫、音頻、視覺特效及代碼連接在一起 , 成為可以震撼《神秘海域》玩家的章節。所以我有第一手經驗 , 知道 Jason 如何把復雜的概念變得清晰。他有一套參與開發的工具 , 是我平生用過的最好的工具 ; 而且 , 通過與他一起工作 , 我知道他把同樣強大的技術與清晰的溝通能力帶進了專業生涯中的每一款游戲系統里 , 以及本著作。
當代的視頻游戲開發是一門大學科。從設計到開發 , 從 AAA到獨立游戲 , 從渲染、碰撞到工具編程 , 要做一個游戲 , 需要很多交叉的系統及技巧。說起我們現有的游戲制作工具 , 其功能與復雜度是不匹配的 , 本書中的許多詳細代碼示例及實現示例能幫助讀者讀取并理解這些碎片是如何拼湊成一個好游戲的。通過這種方式幫助讀者 , Jason 的書也許能令你超越史上最好的游戲設計師及實現開發者做過的最大膽的夢。
本書提供了一個概覽 , 但它不僅停留在知識表面 , 還挖掘至足夠深度 , 令我們有機會理解每個所提及的題目。我的好友 Ian Dallas (Giant Sparrow 的創意總監、 The Unfinished Swan 的創作者 ) 曾手按本書 , 以他帶有豐富感情色彩的語言發誓 : 這本書給了我們一個機會去“吃大象的一塊” —— 用這包含巨大學問的“大局觀”作為開始 , 不然我們難以踏出第一步去理解這么廣闊的題目。
現在也是接觸游戲軟件工程的好時機。全世界都有學校提供高質量的課程 , 由經驗豐富的游戲創作者教授各種技術及藝術方面的技能。游戲也正在進入難以想象的復興時期 , 受獨立游戲及藝術游戲的一些影響 , 它為我們的世界帶來了新聲音及新角度 , 這些都同時加強了主流計算機、游戲機及移動端游戲非常健康及創新的發展。
讓我們迎著眾多扣人心弦、未知的數字游戲未來而行 , 此領域對娛樂、藝術及商業來說 ,只會變得越來越有趣 , 對文化越來越有影響力 , 也越來越具創新性。沒有比這本書更好的跳板 ,或是比 Jason Gregory 更好、更明智的向導 , 讓它和他引領我們開始這個迷人的游戲開發世界終身學習之旅吧 !
Richard Lemarchand



第 2 版譯者序
不知不覺 , 《游戲引擎架構》 ( 第 1 版 ) 已出版十年。十年前 , iPhone 3GS 面世 , 《憤怒的小鳥》在同年上架 AppStore 。隨著智能手機的滲透率不斷增長 , 全球范圍內移動端游戲極速超越 PC 和游戲機 , 成為用戶最多及收入最高的游戲平臺。我開始翻譯本書時 , 正任職于麻辣馬開發 PC/ 游戲機平臺游戲 , 之后幸運地在 2011 年加入騰訊 , 從事游戲引擎技術的研發工作 , 因此親歷了這個浪潮。
2013 年 , 國內《天天愛消除》和《天天酷跑》這兩款 2D 手游成為行業爆款 , 而我在當年第 1 版譯序中寫下“還可預料 , 現時單機 / 游戲機的一些較高級的架構及技術 , 將在不遠的未來著陸移動終端平臺。”那時候 , 不少人認為手機只適合這些休閑游戲 , 也許不需要前沿技術。
然而 , 隨后各種游戲類型陸續出現 , MOBA 的王者屬《王者榮耀》 , ACT 有《火影忍者》 , FPS 有《穿越火線》以至本年的《和平精英》。我回看這十多年的游戲硬件發展 , 雖然移動平臺的性能和頂級游戲機有穩定十年的差距 , 但在架構和技術上 , 移動平臺的游戲已逐漸貼近前沿。
在端游時代 , 游戲項目的技術選型多姿多彩 , 有選擇自研游戲引擎的 ( 如《天涯明月刀》的 QuickSilver 引擎 ) , 也有選擇各種商業和開源游戲引擎的。但在 2013—2017 年間 , 除了網易繼續自研引擎 , 國內大部分手游項目都選擇了 Unity 。 Unity 引擎具有非常友好的工具及編程環境 , 它采用 C# 語言也減輕了開發者的負擔 , 令游戲團隊能非常高效地進行生產。但與此同時 , 它的黑盒性質也極大地影響了這一代游戲程序員。這種情況在我做公司內部晉級評審時深有感受 : 以往一些工作可能需要深入了解技術原理 , 并尋找適合項目的最優方案 , 然后把技術從無到有地實現出來 , 在這個過程中對開發人員的技術成長很有幫助 ; 而面對黑盒 , 很多時候是通過猜想個中的實現 , 再嘗試以打補丁的方式去解決問題 , 很少有機會完整地實現一些技術 , 使開發人員更易缺失對底層的開發能力。但當手游競爭越趨激烈時 , 游戲開發周期從 3 個月上升至 3 年 , 開發團隊的技術能力也變得越來越重要。
2015 年 , Unreal 提供源代碼給所有人 , 并且大力增強對移動平臺的支持 , 開始成為手游項目的另一可行選項。如果僅考慮對開發人員的成長 , 我會建議盡量使用具源代碼的工具 , 并多了解它的內部是如何運作的 , 在適當時候做出修改。期待我們能繼續提升技術水平 , 并發揮創新能力 , 進一步提升游戲的品質。
在《游戲引擎架構》 ( 第 1 版 ) 出版以來 , 我收到大量讀者反饋 , 一些錯漏之處也在每次印刷中進行修正。不時有朋友告訴我 , 他們因為讀這本譯作而對游戲引擎技術產生興趣 , 最后還加入了這個行業 , 身為譯者的我深感欣慰。 2014 年 , 我在美國三藩市游戲開發大會遇到原作者 Jason Gregory, 是令人十分興奮的時刻。但對于一直期待第 2 版的朋友 , 面對以年為單位的等待 , 本人實在難辭其咎。雖然百辭莫辯 , 也必須做出一些交代。除了繁忙的工作 , 在數年里我花了不少工余時間在知乎上回答問題及寫技術文章 , 學習并實踐多方面的興趣 , 也在近不惑之年才開始注重身體健康而去系統鍛煉。由于個人的能力及時間有限 , 我也希望能和其他人合作去推動知識分享 , 例如剛出版的《騰訊游戲開發精粹》便是我通過騰訊游戲學院發起的項目 ,而另一本和同事合譯的作品《基于物理的建模與動畫》也即將與大家見面。
由于有些讀者已讀過第 1 版 , 所以我特意在新增的章節標題中加入劍標符 ?, 以方便挑選閱讀。最后 , 期望這本書能引發你對游戲技術的興趣 , 在未來可以玩到你的游戲作品。
葉勁峰 (Milo Yip)
2019 年 9 月
內容簡介:

《游戲引擎架構》(第 2 版)涵蓋游戲引擎軟件開發的理論及實踐知識,并在第 1 版的基礎上對多個主題進行了更新。本書中討論的概念及技巧被實際應用于現實中的游戲工作室(如藝電及頑皮狗)。雖然書中采用的例子通常依托于一些專門的技術,但是討論范圍遠超某個引擎或API。另外,書中提供的參考文獻及引用也非常有價值,可讓讀者繼續深入游戲開發的任何特定方向。本書為大學程度的游戲編程課程而編寫,但也適合軟件工程師、游戲開發業余愛好者,以及游戲產業的從業人員閱讀。通過閱讀本書,資歷較淺的游戲工程師可以鞏固他們所學的游戲技術及引擎架構的知識,專注某一領域的程序員也能從本書全面的介紹中獲益。《游戲引擎架構》(第2版)不僅可作為知識掃盲的工具,以及延伸學習的跳板,更能讓讀者扎實地理解游戲引擎中每個工程范疇中的理論與典型實踐。本書將助你走過游戲引擎架構那迷人、全方位的難忘之旅。本書講解商業游戲引擎中各個子系統的理論基礎,并論述了實現這些子系統通常所需的數據結構、算法及軟件接口。本書聚焦在引擎本身,其中包括底層基礎系統、渲染引擎、碰撞系統、物理模擬、角色動畫及音頻。而在“游戲性基礎層”中深入探討游戲對象模型、世界編輯器、事件系統與腳本系統。書中還涉及一些游戲編程方面的技術,如玩家機制、攝像頭和人工智能。《游戲引擎架構》廣受歡迎,成為游戲引擎軟件開發理論和實踐的完整指南。第2版按當今游戲引擎架構發展趨勢更新大量內容,進一步完善對典型游戲引擎各主要模塊的講解,重點新內容包括:·更新了各個主題的信息,包括C++編程語言的最新版本C++11、第8代游戲機Xbox One 和PlayStation 4。·新增了音頻技術章節,包含AAA游戲音頻引擎所涉及的物理、數學和技術等方面的知識。·更新了多核編程、流水線CPU架構、優化、國際化、贗矢量、格拉斯曼代數、對偶四元數、SIMD矢量數學、內存對齊及抗鋸齒等章節。


目錄:

第 2 版序言 ...............xxxiii
第 1 版序言 ...............xxxv
第 2 版前言 ...............xxxvii
第 1 版前言 ...............xxxviii
致謝 ...............xl
第 I 部分 基 礎
第 1 章 導論 .............3
1.1 典型游戲團隊的結構 ............4
1.1.1 工程師 .............5
1.1.2 藝術家 .............5
1.1.3 游戲設計師 .............6
1.1.4 制作人 .............7
1.1.5 其他工作人員 ............7
1.1.6 發行商及工作室 ...........7
1.2 游戲是什么 .............8
1.2.1 電子游戲作為軟實時模擬...........8
1.3 游戲引擎是什么 .............10
1.4 不同游戲類型的引擎差異 ..........11
1.4.1 第一人稱射擊游戲 ............12
1.4.2 平臺及其他第三人稱游戲...........13
1.4.3 格斗游戲 ............15
1.4.4 競速游戲 ............17
1.4.5 實時策略游戲 ............18
1.4.6 大型多人在線游戲 ............20
1.4.7 玩家創作內容 ? ............21
1.4.8 其他游戲類型 ............23
1.5 游戲引擎概覽 ............24
1.5.1 雷神之錘引擎家族 ............24
1.5.2 虛幻引擎 ............25
1.5.3 Source 引擎 .............26
1.5.4 DICE 的寒霜引擎 ? ...........26
1.5.5 CryEngine ? .............26
1.5.6 索尼的 PhyreEngine ? ..........27
1.5.7 微軟的 XNA Game Studio..........27
1.5.8 Unity ? .............27
1.5.9 供非程序員使用的二維游戲引擎 ? .........28
1.5.10 其他商業引擎 ...........29
1.5.11 專有內部引擎 ...........29
1.5.12 開源引擎............29
1.6 運行時引擎架構 .............30
1.6.1 目標硬件 ............32
1.6.2 設備驅動程序 ............32
1.6.3 操作系統 ............32
1.6.4 第三方軟件開發包和中間件..........33
1.6.5 平臺獨立層 .............36
1.6.6 核心系統 ............36
1.6.7 資源管理器 .............37
1.6.8 渲染引擎 ............37
1.6.9 剖析和調試工具 ...........41
1.6.10 碰撞和物理.............42
1.6.11 動畫 ..............43
1.6.12 人體學接口設備 ............44
1.6.13 音頻 ..............45
1.6.14 在線多人/網絡游戲 ...........46
1.6.15 游戲性基礎系統 ............47
1.6.16 個別游戲專用子系統 ..........50
1.7 工具及資產管道 .............50
1.7.1 數字內容創作工具 ............50
1.7.2 資產調節管道 ............52
1.7.3 世界編輯器 .............54
1.7.4 資源數據庫 ? .............55
1.7.5 一些構建工具的方法 ...........55
第 2 章 專業工具 ............58
2.1 版本控制 .............58
2.1.1 為何使用版本控制 ............58
2.1.2 常見的版本控制系統 ...........59
2.1.3 Subversion 和 TortoiseSVN 概覽 .........60
2.1.4 在 Google 上設置代碼版本庫.........61
2.1.5 安裝 TortoiseSVN ............61
2.1.6 文件版本、更新和提交 ..........63
2.1.7 多人簽出、分支及合并 ..........64
2.1.8 刪除 ..............66
2.2 微軟 Visual Studio............66
2.2.1 源文件、頭文件及翻譯單元 ..........67
2.2.2 程序庫、可執行文件及動態鏈接庫.........67
2.2.3 項目及解決方案 ...........68
2.2.4 生成配置 ............69
2.2.5 調試代碼 ............75
2.3 剖析工具 .............81
2.3.1 剖析器列表 .............83
2.4 內存泄漏和損壞檢測 ............83
2.5 其他工具 .............84
第 3 章 游戲軟件工程基礎 ..........85
3.1 重溫 C++ 及最佳實踐 ...........85
3.1.1 扼要重溫面向對象編程..........85
3.1.2 編碼標準: 為什么及需要多少 .........91
3.1.3 C++11 ? ............92
3.2 C/C++ 的數據、代碼及內存 ..........99
3.2.1 數值表達形式 ............99
3.2.2 聲明、定義及鏈接規范 ..........109
3.2.3 C/C++ 內存布局 ............115
3.2.4 成員變量 ............119
3.2.5 對象的內存布局 ...........121
3.2.6 kilobyte 及 kibibyte ...........129
3.3 捕捉及處理錯誤 .............129
3.3.1 錯誤類型 ............129
3.3.2 錯誤處理 ............130
3.3.3 實現錯誤檢測及處理 ...........132
3.4 流水線、緩存及優化 ...........136
3.4.1 并行范式轉移 ............136
3.4.2 內存緩存 ............137
3.4.3 指令流水線及超純量 CPU ..........142
第 4 章 游戲所需的三維數學 ...........146
4.1 在二維中解決三維問題 ...........146
4.2 點和矢量 .............146
4.2.1 點和笛卡兒坐標 ...........147
4.2.2 左手坐標系與右手坐標系的比較 .........148
4.2.3 矢量 ..............149
4.2.4 矢量運算 ............150
4.2.5 點和矢量的線性插值 ...........160
4.3 矩陣 ...............160
4.3.1 矩陣乘法 ............161
4.3.2 以矩陣表示點和矢量 ...........162
4.3.3 單位矩陣 ............163
4.3.4 逆矩陣 .............163
4.3.5 轉置矩陣 ............163
4.3.6 齊次坐標 ............164
4.3.7 基礎變換矩陣 ............165
4.3.8 4 × 3 矩陣 .............168
4.3.9 坐標空間 ............168
4.3.10 基的變更............171
4.3.11 變換法矢量.............175
4.3.12 在內存中存儲矩陣 ...........175
4.4 四元數 ..............177
4.4.1 把單位四元數視為三維旋轉..........178
4.4.2 四元數運算 .............178
4.4.3 以四元數旋轉矢量 ............180
4.4.4 等價的四元數和矩陣 ...........181
4.4.5 旋轉性的線性插值 ............183
4.5 比較各種旋轉表達方式 ...........185
4.5.1 歐拉角 .............185
4.5.2 3 × 3 矩陣 .............186
4.5.3 軸角 ..............186
4.5.4 四元數 .............187
4.5.5 SQT 變換............187
4.5.6 對偶四元數 .............188
4.5.7 旋轉和自由度 ............188
4.6 其他數學對象 ............189
4.6.1 直線、光線及線段 ............189
4.6.2 球體 ..............190
4.6.3 平面 ..............190
4.6.4 軸對齊包圍盒 ............192
4.6.5 定向包圍盒 .............193
4.6.6 平截頭體 ............193
4.6.7 凸多面體區域 ............194
4.7 硬件加速的 SIMD 運算 ...........194
4.7.1 SSE 寄存器 .............195
4.7.2 __m128 數據類型 ............196
4.7.3 用 SSE 內部函數編碼 ..........197
4.7.4 用 SSE 實現矢量與矩陣的相乘 ..........199
4.8 產生隨機數 .............203
4.8.1 線性同余產生器 ...........204
4.8.2 梅森旋轉 ............204
4.8.3 所有偽隨機數產生器之母及 Xorshift .........205
第 II 部分 底層引擎系統
第 5 章 游戲支持系統 ...........209
5.1 子系統的啟動和終止 ............209
5.1.1 C++ 的靜態初始化次序 (是不可用的) ........209
5.1.2 行之有效的簡單方法 ...........212
5.1.3 一些實際引擎的例子 ...........214
5.2 內存管理 .............218
5.2.1 優化動態內存分配 ............218
5.2.2 內存碎片 ............227
5.3 容器 ...............231
5.3.1 容器操作 ............232
5.3.2 迭代器 .............233
5.3.3 算法復雜度 .............234
5.3.4 建立自定義的容器類 ...........236
5.4 字符串 ..............248
5.4.1 字符串的使用問題 ............248
5.4.2 字符串類 ............249
5.4.3 唯一標識符 .............249
5.4.4 本地化 .............253
5.5 引擎配置 .............263
5.5.1 讀/寫選項............263
5.5.2 個別用戶選項 ............264
5.5.3 真實引擎中的配置管理..........265
第 6 章 資源及文件系統 ............270
6.1 文件系統 .............270
6.1.1 文件名和路徑 ............271
6.1.2 基本文件 I/O ............274
6.1.3 異步文件 I/O ............277
6.2 資源管理器 .............281
6.2.1 離線資源管理及工具鏈..........281
6.2.2 運行時資源管理 ...........289
第 7 章 游戲循環及實時模擬 ...........305
7.1 渲染循環 .............305
7.2 游戲循環 .............306
7.2.1 簡單例子: 《乓》 ...........306
7.3 游戲循環的架構風格 ............308
7.3.1 視窗消息泵 .............308
7.3.2 回調驅動框架 ............309
7.3.3 基于事件的更新 ...........311
7.4 抽象時間線 .............311
7.4.1 真實時間 ............311
7.4.2 游戲時間 ............311
7.4.3 局部及全局時間線 ............312
7.5 測量及處理時間 .............313
7.5.1 幀率及時間增量 ...........313
7.5.2 從幀率到速率 ............314
7.5.3 使用高分辨率計時器測量實時時間 ........317
7.5.4 時間單位和時鐘變量 ...........318
7.5.5 應對斷點 ............321
7.5.6 一個簡單的時鐘類 ............322
7.6 多處理器的游戲循環 ............325
7.6.1 多處理器游戲機的架構..........326
7.6.2 SIMD..............331
7.6.3 分叉及匯合 .............331
7.6.4 每個子系統運行于獨立線程..........333
7.6.5 作業模型 ............334
7.6.6 異步程序設計 ............334
7.7 網絡多人游戲循環 ............337
7.7.1 主從式模型 .............337
7.7.2 點對點模型 .............339
7.7.3 案例分析: 《雷神之錘 II》...........339
第 8 章 人體學接口設備 ............342
8.1 各種人體學接口設備 ............342
8.2 人體學接口設備的接口技術 ...........344
8.2.1 輪詢 ..............344
8.2.2 中斷 ..............344
8.2.3 無線設備 ............345
8.3 輸入類型 .............345
8.3.1 數字式按鈕 .............345
8.3.2 模擬式軸及按鈕 ...........347
8.3.3 相對性軸 ............348
8.3.4 加速計 .............348
8.3.5 以 Wii 遙控器或 DualShock 做三維定向 .......349
8.3.6 攝像機 .............350
8.4 輸出類型 .............352
8.4.1 震動反饋 ............352
8.4.2 力反饋 .............353
8.4.3 音頻 ..............353
8.4.4 其他輸入/輸出 ...........353
8.5 游戲引擎的人體學接口設備系統 ..........353
8.5.1 典型需求 ............354
8.5.2 死區 ..............354
8.5.3 模擬信號過濾 ............355
8.5.4 輸入事件檢測 ............357
8.5.5 為多位玩家管理多個 HID ..........364
8.5.6 跨平臺的 HID 系統 ...........364
8.5.7 輸入的重新映射 ...........366
8.5.8 上下文相關控制 ...........367
8.5.9 禁用輸入 ............368
8.6 人體學接口設備使用實踐 ..........368
第 9 章 調試及開發工具 ............370
9.1 日志及跟蹤 .............370
9.1.1 使用 OutputDebugString() 做格式化輸出.......371
9.1.2 冗長級別 ............372
9.1.3 頻道 ..............373
9.1.4 把輸出同時抄寫至日志文件..........374
9.1.5 崩潰報告 ............374
9.2 調試用的繪圖功能 ............375
9.2.1 調試繪圖 API ............378
9.3 游戲內置菜單 ............382
9.4 游戲內置主控臺 .............385
9.5 調試用攝像機和游戲暫停 ..........386
9.6 作弊 ...............386
9.7 屏幕截圖及錄像 .............387
9.8 游戲內置性能剖析 ............387
9.8.1 層階式剖析 .............389
9.8.2 導出至 Excel ............394
9.9 游戲內置的內存統計和泄漏檢測 ..........394
第 III 部分 圖形、運動與聲音
第 10 章 渲染引擎 .............401
10.1 采用深度緩沖的三角形光柵化基礎 ........401
10.1.1 場景描述............403
10.1.2 描述表面的視覺性質 ..........410
10.1.3 光照基礎............423
10.1.4 虛擬攝像機.............432
10.2 渲染管道 ..............442
10.2.1 渲染管道概覽 ...........443
10.2.2 工具階段............444
10.2.3 資產調節階段 ...........446
10.2.4 GPU 簡史 .............447
10.2.5 GPU 管道 .............448
10.2.6 可編程著色器 ...........452
10.2.7 抗鋸齒 ? ............456
10.2.8 應用程序階段 ...........459
10.3 高級光照及全局光照 ............468
10.3.1 基于圖像的光照 ............468
10.3.2 高動態范圍光照 ............472
10.3.3 全局光照............473
10.3.4 延遲渲染............479
10.3.5 基于物理著色 ? ...........480
10.4 視覺效果和覆蓋層 ...........481
10.4.1 粒子效果............481
10.4.2 貼花 ..............482
10.4.3 環境效果............483
10.4.4 覆蓋層.............486
10.4.5 伽馬校正............487
10.4.6 全屏后期處理效果 ...........488
10.5 延伸閱讀 ..............489
第 11 章 動畫系統 .............490
11.1 角色動畫的類型 ............490
11.1.1 賽璐璐動畫.............490
11.1.2 剛性層階式動畫 ............491
11.1.3 每頂點動畫及變形目標 ...........492
11.1.4 蒙皮動畫............493
11.1.5 把動畫方法視為數據壓縮技術 ..........494
11.2 骨骼 ...............495
11.2.1 骨骼層階結構 ...........496
11.2.2 在內存中表示骨骼 ...........497
11.3 姿勢 ...............498
11.3.1 綁定姿勢............498
11.3.2 局部姿勢............499
11.3.3 全局姿勢............501
11.4 動畫片段 ..............502
11.4.1 局部時間線.............503
11.4.2 全局時間線.............506
11.4.3 比較局部和全局時鐘 ..........508
11.4.4 簡單的動畫數據格式 ..........511
11.4.5 連續的通道函數 ............512
11.4.6 元通道.............513
11.5 蒙皮及生成矩陣調色板 ...........514
11.5.1 每頂點的蒙皮信息 ...........515
11.5.2 蒙皮涉及的數學知識 ..........515
11.6 動畫混合 ..............519
11.6.1 線性插值混合 ...........519
11.6.2 線性插值混合的應用 ..........521
11.6.3 復雜的線性插值混合 ..........526
11.6.4 骨骼分部混合 ...........529
11.6.5 加法混合............531
11.6.6 加法混合的應用 ............533
11.7 后期處理 ..............536
11.7.1 程序式動畫.............536
11.7.2 逆運動學............537
11.7.3 布娃娃.............538
11.8 壓縮技術 ..............538
11.8.1 通道省略............539
11.8.2 量化 ..............539
11.8.3 采樣頻率及鍵省略 ...........543
11.8.4 基于曲線的壓縮 ............543
11.8.5 選擇性載入及串流 ...........544
11.9 動畫系統架構 ............544
11.10 動畫管道 .............545
11.10.1 數據結構 .............546
11.10.2 扁平的加權平均混合表示法 ..........549
11.10.3 混合樹 ............552
11.10.4 淡入/淡出架構 ............555
11.10.5 動畫管道的優化 ............557
11.11 動作狀態機 ............559
11.11.1 動畫狀態 .............559
11.11.2 過渡 .............565
11.11.3 狀態層 ............568
11.11.4 控制參數 .............570
11.11.5 約束 .............571
11.12 動畫控制器 ............579
第 12 章 碰撞及剛體動力學 ..........580
12.1 你想在游戲中加入物理嗎 ...........580
12.1.1 物理系統可以做的事情 ...........581
12.1.2 物理好玩嗎.............582
12.1.3 物理對游戲的影響 ...........583
12.2 碰撞 / 物理中間件 ............585
12.2.1 I-Collide、SWIFT、V-Collide 及 RAPID ........585
12.2.2 ODE .............585
12.2.3 Bullet .............586
12.2.4 TrueAxis .............586
12.2.5 PhysX.............586
12.2.6 Havok .............587
12.2.7 PAL..............587
12.2.8 DMM .............587
12.3 碰撞檢測系統 ............588
12.3.1 可碰撞的實體 ...........588
12.3.2 碰撞/物理世界 ...........589
12.3.3 關于形狀的概念 ............590
12.3.4 碰撞原型............592
12.3.5 碰撞測試及解析幾何 ..........596
12.3.6 性能優化............604
12.3.7 碰撞查詢............606
12.3.8 碰撞過濾............610
12.4 剛體動力學 .............611
12.4.1 基礎 ..............613
12.4.2 線性動力學.............614
12.4.3 運動方程求解 ...........616
12.4.4 數值積分............618
12.4.5 二維旋轉動力學 ............622
12.4.6 三維旋轉動力學 ............625
12.4.7 碰撞響應............629
12.4.8 約束 ..............636
12.4.9 控制剛體的運動 ............640
12.4.10 碰撞/物理步 ...........641
12.5 將物理引擎整合至游戲 ...........643
12.5.1 連接游戲對象和剛體 ..........643
12.5.2 更新模擬............646
12.5.3 游戲中碰撞及物理的應用例子 ..........649
12.6 展望 : 高級物理功能 ............656
第 13 章 音頻 ? ..............658
13.1 聲音的物理 .............658
13.1.1 聲波的屬性.............659
13.1.2 感知響度及分貝 ............660
13.1.3 聲波的傳播.............663
13.1.4 位置的感知.............668
13.2 聲音中的數學知識 ...........668
13.2.1 信號 ..............669
13.2.2 處理信號............670
13.2.3 線性時不變系統 ............671
13.2.4 LTI 系統的脈沖響應 ..........672
13.2.5 頻域與傅里葉變換 ...........677
13.3 聲音技術 ..............685
13.3.1 模擬音頻技術 ...........685
13.3.2 數字音頻技術 ...........690
13.4 三維音頻渲染 ............696
13.4.1 三維聲音渲染概覽 ...........697
13.4.2 為音頻世界建模 ............698
13.4.3 基于距離的衰減 ............698
13.4.4 偏移 ..............700
13.4.5 傳播、混響及聲學............705
13.4.6 多普勒頻移.............712
13.5 音頻引擎架構 ............712
13.5.1 音頻處理管道 ...........714
13.5.2 概念及術語.............714
13.5.3 音總線.............715
13.5.4 主控混音器.............718
13.5.5 主控輸出總線 ...........719
13.5.6 實現總線............720
13.5.7 資產管理............722
13.5.8 對游戲混音.............724
13.5.9 音頻引擎調查 ...........727
13.6 游戲專用的音頻功能 ............730
13.6.1 支持切割屏.............731
13.6.2 角色對話............732
13.6.3 音樂 ..............744
第 IV 部分 游 戲 性
第 14 章 游戲性系統簡介 ...........747
14.1 剖析游戲世界 ............748
14.1.1 世界元素............748
14.1.2 世界組塊............750
14.1.3 高級游戲流程 ...........751
14.2 實現動態元素 : 游戲對象 ..........752
14.2.1 游戲對象模型 ...........753
14.2.2 工具方的設計和運行時的設計 ..........754
14.3 數據驅動游戲引擎 ...........754
14.4 游戲世界編輯器 ............755
14.4.1 游戲世界編輯器的典型功能 .........758
14.4.2 集成的資產管理工具 ..........763
第 15 章 運行時游戲性基礎系統 .........766
15.1 游戲性基礎系統的組件 ...........766
15.2 各種運行時對象模型架構 ...........768
15.2.1 以對象為中心的各種架構 ..........769
15.2.2 以屬性為中心的各種架構 ..........781
15.3 世界組塊的數據格式 ............785
15.3.1 二進制對象映像 ............786
15.3.2 序列化游戲對象描述 ..........786
15.3.3 生成器及類型架構 ...........788
15.4 游戲世界的加載和串流 ...........792
15.4.1 簡單的關卡加載 ............792
15.4.2 向無縫加載進發: 阻隔室 ..........792
15.4.3 游戲世界的串流 ............794
15.4.4 對象生成的內存管理 ..........796
15.4.5 游戲存檔............798
15.5 對象引用與世界查詢 ............799
15.5.1 指針 ..............799
15.5.2 智能指針............800
15.5.3 句柄 ..............802
15.5.4 游戲對象查詢 ...........804
15.6 實時更新游戲對象 ...........806
15.6.1 一個簡單 (但不可行) 的方式.........807
15.6.2 性能限制及批次式更新 ...........809
15.6.3 對象及子系統的相互依賴 ..........811
15.6.4 為并行設計.............819
15.7 事件與消息泵 ............821
15.7.1 靜態類型的函數綁定帶來的問題 .........821
15.7.2 把事件封裝成對象 ...........822
15.7.3 事件類型............823
15.7.4 事件參數............824
15.7.5 事件處理器.............826
15.7.6 取出事件參數 ...........827
15.7.7 職責鏈.............827
15.7.8 登記對事件的關注 ...........829
15.7.9 要排隊還是不要排隊 ..........830
15.7.10 即時傳遞事件帶來的問題..........835
15.7.11 數據驅動事件/消息傳遞系統 ..........836
15.8 腳本 ...............839
15.8.1 運行時與數據定義的對比 ..........839
15.8.2 編程語言特性 ...........839
15.8.3 一些常見的游戲腳本語言 ..........841
15.8.4 腳本所需的架構 ............846
15.8.5 運行時游戲腳本語言的功能 .........847
15.9 高層次的游戲流程 ...........858
第 V 部分 總 結
第 16 章 還有更多內容嗎 ...........863
16.1 一些未談及的引擎系統 ...........863
16.1.1 影片播放器.............863
16.1.2 多人網絡............864
16.2 游戲性系統 .............864
16.2.1 玩家機制............864
16.2.2 攝像機.............864
16.2.3 人工智能............865
16.2.4 其他游戲性系統 ............866
參考文獻 ..............867
中文索引 ..............871
英文索引 ..............900
序: