內容簡介
《游戲引擎架構》同時涵蓋手機游戲引擎軟件開發的理論及實踐,并對多方面的題目進行探討。本書討論到的概念及技巧實際應用于現實中的游戲工作室,如藝電及頑皮狗。雖然書中采用的例子通常依據一些專門的技術,但是討論范圍遠超于某個引擎或API。文中的參考及引用也非常有用,可讓讀者繼續深入游戲開發過程的任何特定方向。
《游戲引擎架構》為一個大學程度的游戲編程課程而編寫,但也適合軟件工程師、業余愛好者、自學游戲程序員,以及游戲產業的從業人員。通過閱讀《游戲引擎架構》,資歷較淺的游戲工程師可以鞏固他們所學的游戲技術及引擎架構的知識,專注某一領域的資深程序員也能從本書更為全面的介紹中獲益。
內容包括:
游戲開發中的大規模C 軟件架構
游戲編程所需的數學
供調試、源代碼控制及性能剖析的游戲開發工具
引擎基礎系統、渲染、碰撞、物理、角色動畫、游戲世界對象模型等引擎子系統
多平臺游戲引擎
多處理器環境下的游戲編程
工作管道及游戲資產數據庫
作者/譯者簡介
作者介紹:Jason Gregory在1994年開始任職專業軟件工程師,自1999年3月開始在游戲產業中任職軟件工程師。在圣迭哥Midway Home Entertainment公司開始游戲編程的他,為《瘋狂飛行員(Freaky Flyers)》及《Crank the Weasel》開發PlayStation 2/Xbox上的動畫系統。在2003年,他轉到洛杉磯藝電,為《榮譽勛章:血戰太平洋(Medal of Honor: Pacific Assault)》開發游戲引擎及游戲性技術,并在《榮譽勛章:空降神兵(Medal of Honor: Airborne)》中擔任首席工程師。他現時是頑皮狗公司的通才程序員,為《神秘海域:德雷克船長的寶藏(Uncharted: Drake’s Fortune)》及《神秘海域:縱橫四海(Uncharted: Among Thieves)》開發引擎及游戲性軟件。他也在南加州大學教授游戲技術的課程。
譯者簡介:葉勁峰(Milo Yip)從小自習編程,并愛好計算機圖形學。上中學時兼職開發策略RPG《王子傳奇》,該游戲在1995年于臺灣發行。其后他獲取了香港大學認知科學學士、香港中文大學系統工程及工程管理哲學碩士。畢業后在香港理工大學設計學院從事游戲引擎及相關技術的研發,職至項目主任。除發表學術文章外,也曾合著《DirectX9游戲編程實務》。2008年往上海育碧擔任引擎工程師開發《美食從天而降(Cloudy with a Chance of Meatballs)》Xbox360/PS3/Wii/PC,2009年起于麻辣馬開發《愛麗絲:瘋狂回歸(Alice: Madness Returns)》Xbox360/PS3/PC,2011年加入騰訊互動娛樂引擎技術中心擔任專家工程師,所研發的技術已用于《斗戰神》、《天涯明月刀》、《眾神爭霸》等項目中。
推薦序1
最初拿到《Game Engine Architecture》一書的英文版,是編輯俠少郵寄給我的打印版。他建議我接下翻譯此書的合同。當時我正在杭州帶領一個團隊開發3D游戲引擎,我和我的同事都對這本書的內容頗有興趣,兩大本打印的英文書立刻在同事間傳開。可惜那段時間個人精力顧及不來,把近千頁的英文讀物精讀而后翻譯成中文對個人的業余時間是個極大的挑戰,不能擔此翻譯任務頗為遺憾。
不久以后聽說Milo Yip(葉勁峰)已開始著手翻譯,甚為欣喜。翻譯此巨著,他一定是比我更合適的人選。我和Milo雖未曾蒙面,但神交已久。在網絡上讀過一些他的成長經歷,和我頗為相似,心有戚戚。他對游戲3D實時渲染技術研究精深為我所不及,我們曾通過Google Talk討論過許多技術問題,他都有獨到的見解。翻譯工作開始后,Milo是香港人,英文技術術語在香港的中文譯法和大陸的有許多不同。但此書由大陸出版社出版,考慮到面對的讀者主要是大陸程序員,Milo希望能更符合大陸程序員的用詞習慣,所以在翻譯一開始就通過Google Docs創建了協作頁面,邀請大家共同探討書中技術名詞的中譯名。從中我們可以一窺他作為譯者的慎重。
三年之后,有幸在出版之前就拿到了完整的譯本。這是一本用LaTeX精心排版的800頁的電子書,我只花了一周時間,幾乎是一口氣讀完。流暢的閱讀享受,絕對不僅僅是因為原著精彩的內容,精美的版面和翔實的譯注也加了不少分。
在閱讀本書的過程中,我不只一次地獲得共鳴。例如在第5章的內存管理系統的介紹中,作者介紹的幾種游戲特有的內存管理方法我都曾在項目中用過,而這是第一次有書籍專門將這些方法詳盡記錄;又如第11章動畫系統的介紹,我們也同樣在3D引擎開發過程中改進原有動畫片段混合方法的經歷。雖然書中介紹的每個技術點,都可能可以在某篇論文,某本其他的書的章節,某篇網絡blog上見過,但之前卻無一本書可以把這些東西放在一起相互參照。對于從事游戲引擎開發的程序員來說,了解各種引擎在處理每個具體問題時的方案是相當重要的。而每種方案又各有利弊,即使不做引擎開發工作而是在某一特定游戲引擎上做游戲開發,從中也可以理解引擎的局限性以及可能的改進方法。尤其是第14章介紹的對**手機游戲平臺**性相關系統的設計,各個開發人員幾乎都是憑經驗設計,很少見有書籍對這些做總結。對于基于渲染引擎做開發的游戲程序員,這是必須面對的工作,這一章會有很大的借鑒意義。
本書作者是業內資深的游戲引擎開發人,他所參于的《神秘海域》和《最后生還者》都是我的個人最愛。在玩游戲的過程中,作為游戲程序員的天性,自然會不斷地猜想各個技術點是如何實現的,背后需要怎樣的工具支持。能在書中一一得到印證是件特別開心的事情。作者反復強調代碼實踐的重要性,在書中遍布著C 代碼。我不認為這些代碼有直接取來使用的價值,但它們極大地幫助了讀者理解書中的技術點。書中列出的頑皮狗工作室用lisp方言作為游戲配置腳本的范例也給我很大的啟發,有了這些具體的代碼示例以及作者本身的一線工程師背景,也讓我確信書中那些關于主機游戲開發相關等,我所沒有接觸過的內容都也絕非泛泛而談。
國內的游戲開發社區的壯大,主要是隨最近十年的MMO風潮而生。而就在大型網絡游戲在中國有些畸形發展,讓這類游戲偏離電子游戲游戲性的趨勢時,我們有幸迎來了為移動設備開發游戲的大潮。游戲開發的重心重新回到游戲性本身。我們更需要去借鑒單機游戲是如何為玩家帶來更純粹的游戲體驗,我相信書中記錄的各種技術點會變的更有幫助。
資深游戲開發及創業者
云風 @簡悅云風
推薦序2
在我認識的許多游戲業開發同仁中,只有少數香港同胞,Milo Yip(葉勁峰)卻正是這樣一位給我印象非常深刻的優秀香港游戲開發者。我倆認識,是在Milo加入騰訊互動娛樂研發部引擎技術中心后,說來到現在也只是兩年多時間。其間,他為人的謙遜務實,對待技術問題的嚴謹求真態度,對算法設計和性能優化的嫻熟技術,都為人所稱道。Milo一絲不茍的工作風格,甚至表現在對待技術文檔排版這類事情上(Milo常執著地用LaTeX將技術文檔排到完美),我想這一定是他在香港讀大學、碩士及在香港理工大學的多媒體創新中心從事研究員,一貫沿襲至今的好作風。
我很高興騰訊游戲有實力吸引到這樣優秀的技術專家;即使在其已從上海遷回香港家中,依然選擇到深圳騰訊互動娛樂總部工作。葉兄從此工作日每天早晚過關,來往香港和深圳兩地,雖有舟車勞頓,但是兼顧了對家庭的照顧和在游戲引擎方面的專業研究,希望這樣的狀況是令他滿意的。
認識葉兄當時,我便知道他在進行Jason Gregory所著《游戲引擎架構》一書的中譯工作。因為自己從前也有業余翻譯游戲開發有關書籍的經歷,所以我能理解其中的辛苦和責任重大,對葉兄也更多一分欽佩。我以為,本書以及本書的中文讀者最大的幸運便是,遇到葉兄這位對游戲有著如同對家對國般強烈責任感,猶如“游戲科學工作者”般的專業譯者!
現在(2013年年末)無疑是游戲史上對獨立游戲制作者最友好的年代。開發設備方便獲得(相對過往僅由主機廠商授權才能獲得專利開發設備,現在有一臺智能手機和一臺個人電腦就可以開發)、技術工具友好、調試過程簡單方便,且互聯網上有豐富的例程和開源代碼參考,也有網上社區便于交流。很多愛好者能夠很快地制作出可運行的游戲原型,其中一些也能發布到應用商店。
但是不全面掌握各方面知識,尤其是游戲引擎架構知識,往往只能停留在勉強修改、湊合重用別人提供的資源的應用程度上,難以做極限的性能改進,更妄談革命式的架構創新。這樣的程度是很難在成千上萬的游戲中脫穎而出的。我們所認可的真正的游戲大作,必定是在某方面大幅超越用戶期待的產品。為了打造這樣的產品,游戲內容創作者(策劃、美術等)需要“戴著鐐銬跳舞”(在當前的機能下爭取更多的創作自由度),而引擎架構合理的游戲可以經得起──也值得進行──反復優化,最終可以提供更多的自由度,這是大作出現的技術前提。
書的作者、譯者、出版社的編者,加上讀者,大家是因書而結緣的有緣人。因葉兄這本《游戲引擎架構》譯著而在線上線下相識的讀者們,你們是不是因“了解游戲引擎架構,從而制作/優化好游戲”這樣的理想而結了緣呢?
親愛的讀者,愿你的游戲有一天因謎題巧妙絕倫、趣味超凡、虛擬世界氣勢磅礴、視覺效果逼真精美等專業因素取得業界褒獎,并得到玩家真誠的贊美。希望屆時曾讀葉兄這本《游戲引擎架構》譯作的你,也可以回饋社會,回饋游戲開發的學習社區,幫助新人。希望你也可以建立微信公眾號、博客等,或翻譯游戲開發書籍,造福外語不好的讀者,所以如果你的外語(英語、日語、韓語之于游戲行業比較重要)水平仍需精進,現在也可以同步加油了!
騰訊《天天愛消除》游戲團隊Leader
沙鷹 @也是沙鷹
譯序
數千年以來,藝術家們通過文學、繪畫、雕塑、建筑、音樂、舞蹈、戲劇等傳統藝術形式充實人類的精神層面。自20世紀中葉,計算機的普及派生出另一種藝術形式──電子游戲。游戲結合了上述傳統藝術以及近代科技派生的其他藝術(如攝影、電影、動畫),并且完全脫離了藝術欣賞這種單向傳遞的方式──游戲必然是互動的,“玩家”并不是“讀者”、“觀眾”或“聽眾”,而是進入游戲世界、感知并對世界做出反應的參與者。
基于游戲的互動本質,游戲的制作通常比其他大眾藝術復雜。商業游戲的制作通常需要各種人才的參與,而他們則需要依賴各種工具及科技。游戲引擎便是專門為游戲而設計的工具及科技集成。之所以稱為引擎,如同交通工具中的引擎,提供了最核心的技術部分。因為復雜,研發成本高,人們不希望制作每款游戲(或車款)時都重新設計引擎,重用性是游戲引擎的一個重要設計目標。
然而,各游戲本身的性質以及平臺的差異,使研發完全通用的游戲引擎變得極困難,甚至不可能。市面上出售的游戲引擎,有一些雖然已經達到很高的技術水平,但在商業應用中,很多時候還是需要因應個別游戲項目對引擎改造、整合、擴展及優化。因此,即使能使用市面上最好的商用引擎或自研引擎,我們仍需要理解當中的架構、各種機制和技術,并且分析及解決在制作中遇到的問題。這些也是譯者曾任于上海兩家工作室時的主要工作范疇。
選擇翻譯此著作,主要原因是在閱讀中得到共鳴,并且能知悉一些知名游戲作品實際上所采用的方案。有感坊間大部分游戲開發書籍并不是由業內人士執筆,內容只足夠應付一些最簡單的游戲開發,欠缺宏觀比較各種方案,技術與當今實際情況也有很大差距。而一些Gems類叢書雖然偶有好文章,但受形式所限欠缺系統性、全面性。難得本書原作者身為世界一流游戲工作室的資深游戲開發者(注1),在繁重的游戲開發工作外,還在大學教授游戲開發課程以至編寫本著作。此外,從與內陸同事的交流中,了解到許多從業者不愿意閱讀外文書籍。為了普及知識及反饋業界社會,希望能盡綿力。
或許有些人以為本著作是針對單機/游戲機游戲的,并不適合國內以網游為主的環境。但譯者認為這是一種誤解,許多游戲本身所涉及的技術是具通用性的。例如游戲性相關的游戲性系統、場景管理、人工智能、物理模擬等部分,許多時候也會同時用于網游的前臺和后臺。現時,一些動作為主、非MMO的國內端游甚至會直接在后臺運行傳統意義上的游戲引擎。至于前臺相關的技術,單機和端游的區別更少。此外,隨著近年移動終端的興起,其硬件性能已超越傳統掌上游戲機,開發手游所需的技術與傳統掌上游戲機并無太大差異。還可預料,現時單機/游戲機的一些較高級的架構及技術,將在不遠的未來著陸移動終端平臺。
譯者認為,本書涵括游戲開發技術的方方面面,同時適合入門及經驗豐富的游戲程序員。書名中的架構二字,并不單是給出一個系統結構圖,而是描述每個子系統的需求、相關技術及與其他子系統的關系。對譯者本人而言,本書的第11章(動畫系統)及第14章(運行時游戲性基礎系統)是本書特別精彩之處,含有許多少見于其他書籍的內容。而第10章(渲染引擎)由于是游戲引擎中的一個極大的部分,有限的篇幅可能未能覆蓋廣度及深度,推薦讀者參考1,人工智能方面也需參考其他專著。
本譯作采用LaTeX排版(注3),以Inkscape編譯矢量圖片。為了令閱讀更流暢,內文中的網址都統一改以腳注標示。另外,由于現時游戲開發相關的文獻以英文為主,而且游戲開發涉及的知識面很廣,本譯作盡量以括號形式保留英文術語。為了方便讀者查找內容,在附錄中增設中英文雙向索引(索引條目與原著的不同)。
本人在香港成長學習及工作,至2008年才赴內陸游戲工作室工作,不黯內陸的中文寫作及用字習慣,翻譯中曾遇到不少困難。有幸得到出版社人員以及良師益友的幫助,才能完成本譯作。特別感謝周筠老師支持本作的提案,并耐心地給予協助及鼓勵。編輯張春雨老師和盧鶇翔老師,以及好友余晟給予了大量翻譯上的知識及指導。也感謝游戲業界專家云風、大寶和Dave給予了許多寶貴意見。此書的翻譯及排版工作比預期更花時間,感謝妻子及兒女們的體諒。此次翻譯工作歷時三年半,因工作及家庭事宜導致嚴重延誤,唯有在翻譯及排版工作上更盡心盡力,希望求得等待此譯作的讀者們諒解。無論是批評或建議,誠希閣下通過電郵miloyip@gmail.com、新浪微博、豆瓣等渠道不吝賜教。
葉勁峰(Milo Yip)
2013年10月
原作者是頑皮狗(Naughty Dog)《神秘海域(Uncharted)》系列的通才程序員、《最后生還者(The Last of Us)》的首席程序員,之前還曾在EA和Midway工作。
中括號表示引用附錄中的參考文獻。一些參考條目加入了其中譯本的信息。
具體是使用CTEX套裝,它是在MiKTeX的基礎上增加中文的支持。
前言
最早的電子游戲完全由硬件構成,但微處理器(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的束縛。
本書是一本我們入行做游戲時想要的書。我們認為本書能讓入門者增長知識,也能為有經驗者開拓更大的視野。
Jeff Lander(注3)
Matthew Whiting(注4)
譯注:Genre一詞在文學中為體裁。電影和游戲里通常譯作類型。不同的游戲類型可見1.2節。
譯注:按一般說法,2005年至今屬于第7個游戲機世代。這3款游戲機的發行年份為Xbox 360(2005)、PlayStation 3(2006)、Wii(2006)。有關游戲機世代可參考維基百科。
譯注:Jeff Lander現時為Darwin 3D公司的首席技術總監、Game Tech公司創始人,曾為藝電首席程序員、Luxoflux公司游戲性及動畫技術程序員。
譯注:Matthew Whiting現時為Wholesale Algorithms公司程序員,曾為Luxoflux公司首席軟件工程師、Insomniac Games公司程序員。
序言
歡迎來到《游戲引擎架構》世界。本書旨在全面探討典型商業游戲引擎的主要組件。游戲編程是一個龐大的主題,有許多內容需要討論。不過相信你會發現,我們討論的深度將足以使你充分理解本書所涵蓋的工程理論及常用實踐的方方面面。話雖如此,令人著迷的漫長游戲編程之旅其實才剛剛啟程。與此相關的每項技術都包含豐富內容,本書將為你打下基礎,并引領你進入更廣闊的學習空間。
本書焦點在于游戲引擎的技術及架構。我們會探討商業游戲引擎中,各個子系統的相關理論,以及實現這些理論所需要的典型數據結構、算法和軟件接口。游戲引擎與游戲的界限頗為模糊。我們將把注意力集中在引擎本身,包括多個低階基礎系統(low-level foundation system)、渲染引擎(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 的小技巧,不過C 的基礎最好還是通過閱讀[39]、[31]及[32]來獲得。如果你對C 已經有點生疏,建議你在閱讀本書的同時,最好能重溫這幾本或者類似書籍。如果你完全沒有C 經驗,在看本書之前,可以考慮先閱讀[39]的前幾章,或者嘗試學習一些C 的在線教程。
學習編程技能最好的方法就是寫代碼。在閱讀本書時,強烈建議你選擇一些特別感興趣的主題付諸實踐。舉例來說,如果你覺得人物動畫很有趣,那么可以首先安裝OGRE,并測試一下它的蒙皮動畫示范。接著還可以嘗試用OGRE實現本書談及的一些動畫混合技巧。下一步你可能會打算用游戲手柄控制人物在平面上行走。等你能玩轉一些簡單的東西了,就應該以此為基礎,繼續前進!之后可以轉移到另一個游戲技術范疇,周而復始。這些項目是什么并不重要,重要的是你在實踐游戲編程的藝術,而不是紙上談兵。
游戲科技是一個活生生、會呼吸的家伙 ,永遠不可能將之束縛于書本之上 。因此,附加的資源、勘誤、更新、示例代碼、項目構思等已經發到本書的網站。
來源:https://www.icode9.com/content-4-891351.html