日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[置顶]《游戏引擎架构》信息总汇

發(fā)布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [置顶]《游戏引擎架构》信息总汇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


豆瓣??當當??亞馬遜??China-pub??京東??中國圖書網(wǎng)??淘寶

PDF樣章試讀微盤下載??微云下載

中英詞匯索引表

本頁內(nèi)容

基本信息

作者:Jason Gregory (杰森.格雷戈瑞)
譯者:Milo Yip(葉勁峰)
原書名:Game Engine Architecture
出版社:電子工業(yè)出版社
出版時間:2014-1-1
開本:16
頁數(shù):800
字數(shù):1093400
ISBN:9787121222887

內(nèi)容簡介

《游戲引擎架構》同時涵蓋游戲引擎軟件開發(fā)的理論及實踐,并對多方面的題目進行探討。本書討論到的概念及技巧實際應用于現(xiàn)實中的游戲工作室,如藝電及頑皮狗。雖然書中采用的例子通常依據(jù)一些專門的技術,但是討論范圍遠超于某個引擎或API。文中的參考及引用也非常有用,可讓讀者繼續(xù)深入游戲開發(fā)過程的任何特定方向。

《游戲引擎架構》為一個大學程度的游戲編程課程而編寫,但也適合軟件工程師、業(yè)余愛好者、自學游戲程序員,以及游戲產(chǎn)業(yè)的從業(yè)人員。通過閱讀《游戲引擎架構》,資歷較淺的游戲工程師可以鞏固他們所學的游戲技術及引擎架構的知識,專注某一領域的資深程序員也能從本書更為全面的介紹中獲益。

內(nèi)容包括:

  • 游戲開發(fā)中的大規(guī)模C++軟件架構
  • 游戲編程所需的數(shù)學
  • 供調(diào)試、源代碼控制及性能剖析的游戲開發(fā)工具
  • 引擎基礎系統(tǒng)、渲染、碰撞、物理、角色動畫、游戲世界對象模型等引擎子系統(tǒng)
  • 多平臺游戲引擎
  • 多處理器環(huán)境下的游戲編程
  • 工作管道及游戲資產(chǎn)數(shù)據(jù)庫

作者/譯者簡介

作者介紹:Jason Gregory在1994年開始任職專業(yè)軟件工程師,自1999年3月開始在游戲產(chǎn)業(yè)中任職軟件工程師。在圣迭哥Midway Home Entertainment公司開始游戲編程的他,為《瘋狂飛行員(Freaky Flyers)》及《Crank the Weasel》開發(fā)PlayStation 2/Xbox上的動畫系統(tǒng)。在2003年,他轉到洛杉磯藝電,為《榮譽勛章:血戰(zhàn)太平洋(Medal of Honor: Pacific Assault)》開發(fā)游戲引擎及游戲性技術,并在《榮譽勛章:空降神兵(Medal of Honor: Airborne)》中擔任首席工程師。他現(xiàn)時是頑皮狗公司的通才程序員,為《神秘海域:德雷克船長的寶藏(Uncharted: Drake's Fortune)》及《神秘海域:縱橫四海(Uncharted: Among Thieves)》開發(fā)引擎及游戲性軟件。他也在南加州大學教授游戲技術的課程。

譯者簡介:葉勁峰(Milo Yip)從小自習編程,并愛好計算機圖形學。上中學時兼職開發(fā)策略RPG《王子傳奇》,該游戲在1995年于臺灣發(fā)行。其后他獲取了香港大學認知科學學士、香港中文大學系統(tǒng)工程及工程管理哲學碩士。畢業(yè)后在香港理工大學設計學院從事游戲引擎及相關技術的研發(fā),職至項目主任。除發(fā)表學術文章外,也曾合著《DirectX9游戲編程實務》。2008年往上海育碧擔任引擎工程師開發(fā)《美食從天而降(Cloudy with a Chance of Meatballs)》Xbox360/PS3/Wii/PC,2009年起于麻辣馬開發(fā)《愛麗絲:瘋狂回歸(Alice: Madness Returns)》Xbox360/PS3/PC,2011年加入騰訊互動娛樂引擎技術中心擔任專家工程師,所研發(fā)的技術已用于《斗戰(zhàn)神》、《天涯明月刀》、《眾神爭霸》等項目中。

推薦序1

最初拿到《Game Engine Architecture》一書的英文版,是編輯俠少郵寄給我的打印版。他建議我接下翻譯此書的合同。當時我正在杭州帶領一個團隊開發(fā)3D游戲引擎,我和我的同事都對這本書的內(nèi)容頗有興趣,兩大本打印的英文書立刻在同事間傳開??上嵌螘r間個人精力顧及不來,把近千頁的英文讀物精讀而后翻譯成中文對個人的業(yè)余時間是個極大的挑戰(zhàn),不能擔此翻譯任務頗為遺憾。

不久以后聽說Milo Yip(葉勁峰)已開始著手翻譯,甚為欣喜。翻譯此巨著,他一定是比我更合適的人選。我和Milo雖未曾蒙面,但神交已久。在網(wǎng)絡上讀過一些他的成長經(jīng)歷,和我頗為相似,心有戚戚。他對游戲3D實時渲染技術研究精深為我所不及,我們曾通過Google Talk討論過許多技術問題,他都有獨到的見解。翻譯工作開始后,Milo是香港人,英文技術術語在香港的中文譯法和大陸的有許多不同。但此書由大陸出版社出版,考慮到面對的讀者主要是大陸程序員,Milo希望能更符合大陸程序員的用詞習慣,所以在翻譯一開始就通過Google Docs創(chuàng)建了協(xié)作頁面,邀請大家共同探討書中技術名詞的中譯名。從中我們可以一窺他作為譯者的慎重。

三年之后,有幸在出版之前就拿到了完整的譯本。這是一本用LaTeX精心排版的800頁的電子書,我只花了一周時間,幾乎是一口氣讀完。流暢的閱讀享受,絕對不僅僅是因為原著精彩的內(nèi)容,精美的版面和翔實的譯注也加了不少分。

在閱讀本書的過程中,我不只一次地獲得共鳴。例如在第5章的內(nèi)存管理系統(tǒng)的介紹中,作者介紹的幾種游戲特有的內(nèi)存管理方法我都曾在項目中用過,而這是第一次有書籍專門將這些方法詳盡記錄;又如第11章動畫系統(tǒng)的介紹,我們也同樣在3D引擎開發(fā)過程中改進原有動畫片段混合方法的經(jīng)歷。雖然書中介紹的每個技術點,都可能可以在某篇論文,某本其他的書的章節(jié),某篇網(wǎng)絡blog上見過,但之前卻無一本書可以把這些東西放在一起相互參照。對于從事游戲引擎開發(fā)的程序員來說,了解各種引擎在處理每個具體問題時的方案是相當重要的。而每種方案又各有利弊,即使不做引擎開發(fā)工作而是在某一特定游戲引擎上做游戲開發(fā),從中也可以理解引擎的局限性以及可能的改進方法。尤其是第14章介紹的對游戲性相關系統(tǒng)的設計,各個開發(fā)人員幾乎都是憑經(jīng)驗設計,很少見有書籍對這些做總結。對于基于渲染引擎做開發(fā)的游戲程序員,這是必須面對的工作,這一章會有很大的借鑒意義。

本書作者是業(yè)內(nèi)資深的游戲引擎開發(fā)人,他所參于的《神秘海域》和《最后生還者》都是我的個人最愛。在玩游戲的過程中,作為游戲程序員的天性,自然會不斷地猜想各個技術點是如何實現(xiàn)的,背后需要怎樣的工具支持。能在書中一一得到印證是件特別開心的事情。作者反復強調(diào)代碼實踐的重要性,在書中遍布著C++代碼。我不認為這些代碼有直接取來使用的價值,但它們極大地幫助了讀者理解書中的技術點。書中列出的頑皮狗工作室用lisp方言作為游戲配置腳本的范例也給我很大的啟發(fā),有了這些具體的代碼示例以及作者本身的一線工程師背景,也讓我確信書中那些關于主機游戲開發(fā)相關等,我所沒有接觸過的內(nèi)容都也絕非泛泛而談。

國內(nèi)的游戲開發(fā)社區(qū)的壯大,主要是隨最近十年的MMO風潮而生。而就在大型網(wǎng)絡游戲在中國有些畸形發(fā)展,讓這類游戲偏離電子游戲游戲性的趨勢時,我們有幸迎來了為移動設備開發(fā)游戲的大潮。游戲開發(fā)的重心重新回到游戲性本身。我們更需要去借鑒單機游戲是如何為玩家?guī)砀兇獾挠螒蝮w驗,我相信書中記錄的各種技術點會變的更有幫助。

資深游戲開發(fā)及創(chuàng)業(yè)者
云風 @簡悅云風

推薦序2

在我認識的許多游戲業(yè)開發(fā)同仁中,只有少數(shù)香港同胞,Milo Yip(葉勁峰)卻正是這樣一位給我印象非常深刻的優(yōu)秀香港游戲開發(fā)者。我倆認識,是在Milo加入騰訊互動娛樂研發(fā)部引擎技術中心后,說來到現(xiàn)在也只是兩年多時間。其間,他為人的謙遜務實,對待技術問題的嚴謹求真態(tài)度,對算法設計和性能優(yōu)化的嫻熟技術,都為人所稱道。Milo一絲不茍的工作風格,甚至表現(xiàn)在對待技術文檔排版這類事情上(Milo常執(zhí)著地用LaTeX將技術文檔排到完美),我想這一定是他在香港讀大學、碩士及在香港理工大學的多媒體創(chuàng)新中心從事研究員,一貫沿襲至今的好作風。

我很高興騰訊游戲有實力吸引到這樣優(yōu)秀的技術專家;即使在其已從上海遷回香港家中,依然選擇到深圳騰訊互動娛樂總部工作。葉兄從此工作日每天早晚過關,來往香港和深圳兩地,雖有舟車勞頓,但是兼顧了對家庭的照顧和在游戲引擎方面的專業(yè)研究,希望這樣的狀況是令他滿意的。

認識葉兄當時,我便知道他在進行Jason Gregory所著《游戲引擎架構》一書的中譯工作。因為自己從前也有業(yè)余翻譯游戲開發(fā)有關書籍的經(jīng)歷,所以我能理解其中的辛苦和責任重大,對葉兄也更多一分欽佩。我以為,本書以及本書的中文讀者最大的幸運便是,遇到葉兄這位對游戲有著如同對家對國般強烈責任感,猶如“游戲科學工作者”般的專業(yè)譯者!

現(xiàn)在(2013年年末)無疑是游戲史上對獨立游戲制作者最友好的年代。開發(fā)設備方便獲得(相對過往僅由主機廠商授權才能獲得專利開發(fā)設備,現(xiàn)在有一臺智能手機和一臺個人電腦就可以開發(fā))、技術工具友好、調(diào)試過程簡單方便,且互聯(lián)網(wǎng)上有豐富的例程和開源代碼參考,也有網(wǎng)上社區(qū)便于交流。很多愛好者能夠很快地制作出可運行的游戲原型,其中一些也能發(fā)布到應用商店。

但是不全面掌握各方面知識,尤其是游戲引擎架構知識,往往只能停留在勉強修改、湊合重用別人提供的資源的應用程度上,難以做極限的性能改進,更妄談革命式的架構創(chuàng)新。這樣的程度是很難在成千上萬的游戲中脫穎而出的。我們所認可的真正的游戲大作,必定是在某方面大幅超越用戶期待的產(chǎn)品。為了打造這樣的產(chǎn)品,游戲內(nèi)容創(chuàng)作者(策劃、美術等)需要“戴著鐐銬跳舞”(在當前的機能下爭取更多的創(chuàng)作自由度),而引擎架構合理的游戲可以經(jīng)得起──也值得進行──反復優(yōu)化,最終可以提供更多的自由度,這是大作出現(xiàn)的技術前提。

書的作者、譯者、出版社的編者,加上讀者,大家是因書而結緣的有緣人。因葉兄這本《游戲引擎架構》譯著而在線上線下相識的讀者們,你們是不是因“了解游戲引擎架構,從而制作/優(yōu)化好游戲”這樣的理想而結了緣呢?

親愛的讀者,愿你的游戲有一天因謎題巧妙絕倫、趣味超凡、虛擬世界氣勢磅礴、視覺效果逼真精美等專業(yè)因素取得業(yè)界褒獎,并得到玩家真誠的贊美。希望屆時曾讀葉兄這本《游戲引擎架構》譯作的你,也可以回饋社會,回饋游戲開發(fā)的學習社區(qū),幫助新人。希望你也可以建立微信公眾號、博客等,或翻譯游戲開發(fā)書籍,造福外語不好的讀者,所以如果你的外語(英語、日語、韓語之于游戲行業(yè)比較重要)水平仍需精進,現(xiàn)在也可以同步加油了!

騰訊《天天愛消除》游戲團隊Leader
沙鷹 @也是沙鷹

譯序

數(shù)千年以來,藝術家們通過文學、繪畫、雕塑、建筑、音樂、舞蹈、戲劇等傳統(tǒng)藝術形式充實人類的精神層面。自20世紀中葉,計算機的普及派生出另一種藝術形式──電子游戲。游戲結合了上述傳統(tǒng)藝術以及近代科技派生的其他藝術(如攝影、電影、動畫),并且完全脫離了藝術欣賞這種單向傳遞的方式──游戲必然是互動的,“玩家”并不是“讀者”、“觀眾”或“聽眾”,而是進入游戲世界、感知并對世界做出反應的參與者。

基于游戲的互動本質,游戲的制作通常比其他大眾藝術復雜。商業(yè)游戲的制作通常需要各種人才的參與,而他們則需要依賴各種工具及科技。游戲引擎便是專門為游戲而設計的工具及科技集成。之所以稱為引擎,如同交通工具中的引擎,提供了最核心的技術部分。因為復雜,研發(fā)成本高,人們不希望制作每款游戲(或車款)時都重新設計引擎,重用性是游戲引擎的一個重要設計目標。

然而,各游戲本身的性質以及平臺的差異,使研發(fā)完全通用的游戲引擎變得極困難,甚至不可能。市面上出售的游戲引擎,有一些雖然已經(jīng)達到很高的技術水平,但在商業(yè)應用中,很多時候還是需要因應個別游戲項目對引擎改造、整合、擴展及優(yōu)化。因此,即使能使用市面上最好的商用引擎或自研引擎,我們?nèi)孕枰斫猱斨械募軜?、各種機制和技術,并且分析及解決在制作中遇到的問題。這些也是譯者曾任于上海兩家工作室時的主要工作范疇。

選擇翻譯此著作,主要原因是在閱讀中得到共鳴,并且能知悉一些知名游戲作品實際上所采用的方案。有感坊間大部分游戲開發(fā)書籍并不是由業(yè)內(nèi)人士執(zhí)筆,內(nèi)容只足夠應付一些最簡單的游戲開發(fā),欠缺宏觀比較各種方案,技術與當今實際情況也有很大差距。而一些Gems類叢書雖然偶有好文章,但受形式所限欠缺系統(tǒng)性、全面性。難得本書原作者身為世界一流游戲工作室的資深游戲開發(fā)者(注1),在繁重的游戲開發(fā)工作外,還在大學教授游戲開發(fā)課程以至編寫本著作。此外,從與內(nèi)地同事的交流中,了解到許多從業(yè)者不愿意閱讀外文書籍。為了普及知識及反饋業(yè)界社會,希望能盡綿力。

或許有些人以為本著作是針對單機/游戲機游戲的,并不適合國內(nèi)以網(wǎng)游為主的環(huán)境。但譯者認為這是一種誤解,許多游戲本身所涉及的技術是具通用性的。例如游戲性相關的游戲性系統(tǒng)、場景管理、人工智能、物理模擬等部分,許多時候也會同時用于網(wǎng)游的前臺和后臺?,F(xiàn)時,一些動作為主、非MMO的國內(nèi)端游甚至會直接在后臺運行傳統(tǒng)意義上的游戲引擎。至于前臺相關的技術,單機和端游的區(qū)別更少。此外,隨著近年移動終端的興起,其硬件性能已超越傳統(tǒng)掌上游戲機,開發(fā)手游所需的技術與傳統(tǒng)掌上游戲機并無太大差異。還可預料,現(xiàn)時單機/游戲機的一些較高級的架構及技術,將在不遠的未來著陸移動終端平臺。

譯者認為,本書涵括游戲開發(fā)技術的方方面面,同時適合入門及經(jīng)驗豐富的游戲程序員。書名中的架構二字,并不單是給出一個系統(tǒng)結構圖,而是描述每個子系統(tǒng)的需求、相關技術及與其他子系統(tǒng)的關系。對譯者本人而言,本書的第11章(動畫系統(tǒng))及第14章(運行時游戲性基礎系統(tǒng))是本書特別精彩之處,含有許多少見于其他書籍的內(nèi)容。而第10章(渲染引擎)由于是游戲引擎中的一個極大的部分,有限的篇幅可能未能覆蓋廣度及深度,推薦讀者參考[1](注2),人工智能方面也需參考其他專著。

本譯作采用LaTeX排版(注3),以Inkscape編譯矢量圖片。為了令閱讀更流暢,內(nèi)文中的網(wǎng)址都統(tǒng)一改以腳注標示。另外,由于現(xiàn)時游戲開發(fā)相關的文獻以英文為主,而且游戲開發(fā)涉及的知識面很廣,本譯作盡量以括號形式保留英文術語。為了方便讀者查找內(nèi)容,在附錄中增設中英文雙向索引(索引條目與原著的不同)。

本人在香港成長學習及工作,至2008年才赴內(nèi)地游戲工作室工作,不黯內(nèi)地的中文寫作及用字習慣,翻譯中曾遇到不少困難。有幸得到出版社人員以及良師益友的幫助,才能完成本譯作。特別感謝周筠老師支持本作的提案,并耐心地給予協(xié)助及鼓勵。編輯張春雨老師和盧鶇翔老師,以及好友余晟給予了大量翻譯上的知識及指導。也感謝游戲業(yè)界專家云風、大寶和Dave給予了許多寶貴意見。此書的翻譯及排版工作比預期更花時間,感謝妻子及兒女們的體諒。此次翻譯工作歷時三年半,因工作及家庭事宜導致嚴重延誤,唯有在翻譯及排版工作上更盡心盡力,希望求得等待此譯作的讀者們諒解。無論是批評或建議,誠希閣下通過電郵miloyip@gmail.com、新浪微博、豆瓣等渠道不吝賜教。

葉勁峰(Milo Yip)
2013年10月

  • 原作者是頑皮狗(Naughty Dog)《神秘海域(Uncharted)》系列的通才程序員、《最后生還者(The Last of Us)》的首席程序員,之前還曾在EA和Midway工作。
  • 中括號表示引用附錄中的參考文獻。一些參考條目加入了其中譯本的信息。
  • 具體是使用CTEX套裝,它是在MiKTeX的基礎上增加中文的支持。
  • 前言

    最早的電子游戲完全由硬件構成,但微處理器(microprocessor)的高速發(fā)展完全改變了游戲的面貌。現(xiàn)在的游戲是在多用途的PC和專門的電子游戲主機(video game console)上玩的,憑借軟件帶來絕妙的游戲體驗。從最初的游戲誕生至今已有半個世紀,但很多人仍然認為游戲是一個未成熟的產(chǎn)業(yè)。即使游戲可能是個年輕的產(chǎn)業(yè),若仔細觀察,也會發(fā)現(xiàn)它正在高速發(fā)展。 現(xiàn)時游戲已成為一個上百億美元的產(chǎn)業(yè),覆蓋不同年齡、性別的廣泛受眾。

    千變?nèi)f化的游戲,可以分為從紙牌游戲到大型多人在線游戲(massively multiplayer online game,MMOG)等多個種類(category)和“類型(genre)”(注1),也可以運行在任何裝有微芯片(microchip)的設備上 。你現(xiàn)在可以在PC、手機及多種特別為游戲而設計的手持/電視游戲主機上玩游戲。家用電視游戲通常代表最尖端的游戲科技,又由于它們是周期性地推出新版本,因此有游戲機“世代”(generation)的說法。最新一代(注2)的游戲機包括微軟的Xbox 360和索尼的PlayStation 3,但一定不可忽視長盛不衰的PC,以及最近非常流行的任天堂Wii。

    最近,劇增的下載式休閑游戲,使這個多樣化的商業(yè)游戲世界變得更復雜。雖然如此,大型游戲仍然是一門大生意。今天的游戲平臺非常復雜,有難以置信的運算能力,這使軟件的復雜度得以進一步提升。所有這些先進的軟件都需要由人創(chuàng)造出來,這導致團隊人數(shù)增加,開發(fā)成本上漲。隨著產(chǎn)業(yè)變得成熟,開發(fā)團隊要尋求更好、更高效的方式去制作產(chǎn)品,可復用軟件(reusable software)和中間件(middleware)便應運而生,以補償軟件復雜度的提升。

    由于有這么多風格迥異的游戲及多種游戲平臺,因此不可能存在單一理想的軟件方案。然而,業(yè)界已經(jīng)發(fā)展出一些模式 ,也有大量的潛在方案可供選擇?,F(xiàn)今的問題是如何找到一個合適的方案去迎合某個項目的需要。再進一步,開發(fā)團隊必須考慮項目的方方面面,以及如何把各方面集成。對于一個嶄新的游戲設計,鮮有可能找到一個完美搭配游戲設計各方面的軟件包。

    現(xiàn)時業(yè)界內(nèi)的老手,入行時都是“開荒?!薄N覀冞@代人很少是計算機科學專業(yè)出身(Matt的專業(yè)是航空工程、Jason的專業(yè)是系統(tǒng)設計工程),但現(xiàn)時很多學院已設有游戲開發(fā)的課程和學位。時至今日,為了獲取有用的游戲開發(fā)信息,學生和開發(fā)者必須找到好的途徑。對于高端的圖形技術,從研究到實踐都有大量高質量的信息??墒?#xff0c;這些信息經(jīng)常不能直接應用到游戲的生產(chǎn)環(huán)境,或者沒有一個生產(chǎn)級質量的實現(xiàn)。對于圖形以外的游戲開發(fā)技術,市面上有一些所謂的入門書籍,沒提及參考文獻就描述很多內(nèi)容細節(jié),像自己發(fā)明的一樣。這種做法根本沒有用處,甚至經(jīng)常帶有不準確的內(nèi)容。另一方面,市場上有一些高端的專門領域書籍,例如物理、碰撞、人工智能等??墒?#xff0c;這類書或者啰嗦到讓你難以忍受,或者高深到讓部分讀者無法理解,又或者內(nèi)容過于零散而難于融會貫通。有一些甚至會直接和某項技術掛鉤,軟硬件一旦改動,其內(nèi)容就會迅速過時。

    此外,互聯(lián)網(wǎng)也是收集相關知識的絕佳工具??墒?#xff0c;除非你確實知道要找些什么,否則斷鏈、不準確的資料、質量差的內(nèi)容也會成為學習障礙。

    好在,我們有Jason Gregory,他是一位擁有在頑皮狗(Naughty Dog)工作經(jīng)驗的業(yè)界老手,而頑皮狗是全球高度矚目的游戲工作室之一。Jason在南加州大學教授游戲編程課程時,找不到概括游戲架構的教科書。值得慶幸的是,他承擔了這個任務,填補了這個空白。

    Jason把應用到實際發(fā)行游戲的生產(chǎn)級別知識,以及整個游戲開發(fā)的大局編集于本書。他憑經(jīng)驗,不僅融匯了游戲開發(fā)的概念和技巧,還用實際的代碼示例及實現(xiàn)例子去說明怎樣貫通知識來制作游戲。本書的引用及參考文獻可以讓讀者更深入探索游戲開發(fā)過程的各方面。雖然例子經(jīng)常是基于某些技術的,但是概念和技巧是用來實際創(chuàng)作游戲的,它們可以超越個別引擎或API的束縛。

    本書是一本我們?nèi)胄凶鲇螒驎r想要的書。我們認為本書能讓入門者增長知識,也能為有經(jīng)驗者開拓更大的視野。

    Jeff Lander(注3)
    Matthew Whiting(注4)

  • 譯注:Genre一詞在文學中為體裁。電影和游戲里通常譯作類型。不同的游戲類型可見1.2節(jié)。
  • 譯注:按一般說法,2005年至今屬于第7個游戲機世代。這3款游戲機的發(fā)行年份為Xbox 360(2005)、PlayStation 3(2006)、Wii(2006)。有關游戲機世代可參考維基百科。
  • 譯注:Jeff Lander現(xiàn)時為Darwin 3D公司的首席技術總監(jiān)、Game Tech公司創(chuàng)始人,曾為藝電首席程序員、Luxoflux公司游戲性及動畫技術程序員。
  • 譯注:Matthew Whiting現(xiàn)時為Wholesale Algorithms公司程序員,曾為Luxoflux公司首席軟件工程師、Insomniac Games公司程序員。
  • 序言

    歡迎來到《游戲引擎架構》世界。本書旨在全面探討典型商業(yè)游戲引擎的主要組件。游戲編程是一個龐大的主題,有許多內(nèi)容需要討論。不過相信你會發(fā)現(xiàn),我們討論的深度將足以使你充分理解本書所涵蓋的工程理論及常用實踐的方方面面。話雖如此,令人著迷的漫長游戲編程之旅其實才剛剛啟程。與此相關的每項技術都包含豐富內(nèi)容,本書將為你打下基礎,并引領你進入更廣闊的學習空間。

    本書焦點在于游戲引擎的技術及架構。我們會探討商業(yè)游戲引擎中,各個子系統(tǒng)的相關理論,以及實現(xiàn)這些理論所需要的典型數(shù)據(jù)結構、算法和軟件接口。游戲引擎與游戲的界限頗為模糊。我們將把注意力集中在引擎本身,包括多個低階基礎系統(tǒng)(low-level foundation system)、渲染引擎(rendering engine)、碰撞系統(tǒng)(collision system)、物理模擬(physics simulation)、人物動畫(character animation),及一個我稱為游戲性基礎層(gameplay foundation layer)的深入討論。此層包括游戲對象模型(game object model)、世界編輯器(world editor)、事件系統(tǒng)(event system)及腳本系統(tǒng)(scripting system)。我們也將會接觸游戲性編程(gameplay programming)的多個方面,包括玩家機制(player mechanics)、攝像機(camera)及人工智能(artificial intelligence,AI)。然而,這類討論會被限制在游戲性系統(tǒng)和引擎接口范圍。

    本書可以作為大學中等級游戲程序設計中兩到三門課程的教材。當然,本書也適合軟件工程師、業(yè)余愛好者、自學的游戲程序員,以及游戲行業(yè)從業(yè)人員。通過閱讀本書,資歷較淺的游戲程序員可以鞏固他們所學的游戲數(shù)學、引擎架構及游戲科技方面的知識。專注某一領域的資深程序員也能從本書更為全面的介紹中獲益。

    為了更好地學習本書內(nèi)容,你需要掌握基本的面向對象編程概念并至少擁有一些C++編程經(jīng)驗。盡管游戲行業(yè)已經(jīng)開始嘗試使用一些新的、令人興奮的編程語言,然而工業(yè)級的3D游戲引擎仍然是用C或C++編寫的,任何認真的游戲程序員都應該掌握C++。我們將在第3章重溫一些面向對象編程的基本原則,毫無疑問,你還會從本書學到一些C++的小技巧,不過C++的基礎最好還是通過閱讀[39]、[31]及[32]來獲得。如果你對C++已經(jīng)有點生疏,建議你在閱讀本書的同時,最好能重溫這幾本或者類似書籍。如果你完全沒有C++經(jīng)驗,在看本書之前,可以考慮先閱讀[39]的前幾章,或者嘗試學習一些C++的在線教程。

    學習編程技能最好的方法就是寫代碼。在閱讀本書時,強烈建議你選擇一些特別感興趣的主題付諸實踐。舉例來說,如果你覺得人物動畫很有趣,那么可以首先安裝OGRE,并測試一下它的蒙皮動畫示范。接著還可以嘗試用OGRE實現(xiàn)本書談及的一些動畫混合技巧。下一步你可能會打算用游戲手柄控制人物在平面上行走。等你能玩轉一些簡單的東西了,就應該以此為基礎,繼續(xù)前進!之后可以轉移到另一個游戲技術范疇,周而復始。這些項目是什么并不重要,重要的是你在實踐游戲編程的藝術,而不是紙上談兵。

    游戲科技是一個活生生、會呼吸的家伙 ,永遠不可能將之束縛于書本之上 。因此,附加的資源、勘誤、更新、示例代碼、項目構思等已經(jīng)發(fā)到本書的網(wǎng)站。

    目錄

    推薦序1 iii 推薦序2 v 譯序 vii 序言 xvii 前言 xix 致謝 xxi第一部分 基礎 1第1章 導論 3 1.1 典型游戲團隊的結構 4 1.2 游戲是什么 7 1.3 游戲引擎是什么 10 1.4 不同游戲類型中的引擎差異 11 1.5 游戲引擎概觀 22 1.6 運行時引擎架構 27 1.7 工具及資產(chǎn)管道 46第2章 專業(yè)工具 53 2.1 版本控制 53 2.2 微軟Visual Studio 61 2.3 剖析工具 78 2.4 內(nèi)存泄漏和損壞檢測 79 2.5 其他工具 80第3章 游戲軟件工程基礎 83 3.1 重溫C++及最佳實踐 83 3.2 C/C++的數(shù)據(jù)、代碼及內(nèi)存 90 3.3 捕捉及處理錯誤 118第4章 游戲所需的三維數(shù)學 125 4.1 在二維中解決三維問題 125 4.2 點和矢量 125 4.3 矩陣 139 4.4 四元數(shù) 156 4.5 比較各種旋轉表達方式 164 4.6 其他數(shù)學對象 168 4.7 硬件加速的SIMD運算 173 4.8 產(chǎn)生隨機數(shù) 180第二部分 低階引擎系統(tǒng) 183第5章 游戲支持系統(tǒng) 185 5.1 子系統(tǒng)的啟動和終止 185 5.2 內(nèi)存管理 193 5.3 容器 208 5.4 字符串 225 5.5 引擎配置 234第6章 資源及文件系統(tǒng) 241 6.1 文件系統(tǒng) 241 6.2 資源管理器 251第7章 游戲循環(huán)及實時模擬 277 7.1 渲染循環(huán) 277 7.2 游戲循環(huán) 278 7.3 游戲循環(huán)的架構風格 280 7.4 抽象時間線 283 7.5 測量及處理時間 285 7.6 多處理器的游戲循環(huán) 296 7.7 網(wǎng)絡多人游戲循環(huán) 304第8章 人體學接口設備(HID) 309 8.1 各種人體學接口設備 309 8.2 人體學接口設備的接口技術 311 8.3 輸入類型 312 8.4 輸出類型 316 8.5 游戲引擎的人體學接口設備系統(tǒng) 318 8.6 人體學接口設備使用實踐 332 第9章 調(diào)試及開發(fā)工具 333 9.1 日志及跟蹤 333 9.2 調(diào)試用的繪圖功能 337 9.3 游戲內(nèi)置菜單 344 9.4 游戲內(nèi)置主控臺 347 9.5 調(diào)試用攝像機和游戲暫停 348 9.6 作弊 348 9.7 屏幕截圖及錄像 349 9.8 游戲內(nèi)置性能剖析 349 9.9 游戲內(nèi)置的內(nèi)存統(tǒng)計和泄漏檢測 356第三部分 圖形及動畫 359第10章 渲染引擎 361 10.1 采用深度緩沖的三角形光柵化基礎 361 10.2 渲染管道 404 10.3 高級光照及全局光照 426 10.4 視覺效果和覆蓋層 438 10.5 延伸閱讀 446第11章 動畫系統(tǒng) 447 11.1 角色動畫的類型 447 11.2 骨骼 452 11.3 姿勢 454 11.4 動畫片段 459 11.5 蒙皮及生成矩陣調(diào)色板 471 11.6 動畫混合 476 11.7 后期處理 493 11.8 壓縮技術 496 11.9 動畫系統(tǒng)架構 501 11.10 動畫管道 502 11.11 動作狀態(tài)機 515 11.12 動畫控制器 535第12章 碰撞及剛體動力學 537 12.1 你想在游戲中加入物理嗎 537 12.2 碰撞/物理中間件 542 12.3 碰撞檢測系統(tǒng) 544 12.4 剛體動力學 569 12.5 整合物理引擎至游戲 601 12.6 展望:高級物理功能 616第四部分 游戲性 617第13章 游戲性系統(tǒng)簡介 619 13.1 剖析游戲世界 619 13.2 實現(xiàn)動態(tài)元素:游戲對象 623 13.3 數(shù)據(jù)驅動游戲引擎 626 13.4 游戲世界編輯器 627第14章 運行時游戲性基礎系統(tǒng) 637 14.1 游戲性基礎系統(tǒng)的組件 637 14.2 各種運行時對象模型架構 640 14.3 世界組塊的數(shù)據(jù)格式 657 14.4 游戲世界的加載和串流 663 14.5 對象引用與世界查詢 670 14.6 實時更新游戲對象 676 14.7 事件與消息泵 690 14.8 腳本 707 14.9 高層次的游戲流程 726第五部分 總結 727第15章 還有更多內(nèi)容嗎 729 15.1 一些未談及的引擎系統(tǒng) 729 15.2 游戲性系統(tǒng) 730參考文獻 733 中文索引 737 英文索引 755

    參考文獻

  • Tomas Akenine-Moller, Eric Haines, and Naty Hoffman. Real-Time Rendering (3rd Edition). Wellesley, MA: A K Peters, 2008. 中譯本:《實時計算機圖形學(第2版)》,普建濤譯,北京大學出版社,2004.
  • Andrei Alexandrescu. Modern C++ Design: Generic Programming and Design Patterns Applied. Resding, MA: Addison-Wesley, 2001. 中譯本:《C++設計新思維:泛型編程與設計模式之應用》,侯捷/於春景譯,華中科技大學出版社,2003.
  • Grenville Armitage, Mark Claypool and Philip Branch. Networking and Online Games: Understanding and Engineering Multiplayer Internet Games. New York, NY: John Wiley and Sons, 2006.
  • James Arvo (editor). Graphics Gems II. San Diego, CA: Academic Press, 1991.
  • Grady Booch, Robert A. Maksimchuk, Michael W. Engel, Bobbi J. Young, Jim Conallen, and Kelli A. Houston. Object-Oriented Analysis and Design with Applications (3rd Edition). Reading, MA: Addison-Wesley, 2007. 中譯本:《面向對象分析與設計(第3版)》,王海鵬/潘加宇譯,電子工業(yè)出版社,2012.
  • Mark DeLoura (editor). Game Programming Gems. Hingham, MA: Charles River Media, 2000. 中譯本:《游戲編程精粹 1》, 王淑禮譯,人民郵電出版社,2004.
  • Mark DeLoura (editor). Game Programming Gems 2. Hingham, MA: Charles River Media, 2001. 中譯本:《游戲編程精粹 2》,袁國忠譯,人民郵電出版社,2003.
  • Philip Dutré, Kavita Bala and Philippe Bekaert. Advanced Global Illumination (2nd Edition). Wellesley, MA: A K Peters, 2006.
  • David H. Eberly. 3D Game Engine Design: A Practical Approach to Real-Time Computer Graphics. San Francisco, CA: Morgan Kaufmann, 2001. 國內(nèi)英文版:《3D游戲引擎設計:實時計算機圖形學的應用方法(第2版)》,人民郵電出版社,2009.
  • David H. Eberly. 3D Game Engine Architecture: Engineering Real-Time Applications with Wild Magic. San Francisco, CA: Morgan Kaufmann, 2005.
  • David H. Eberly. Game Physics. San Francisco, CA: Morgan Kaufmann, 2003.
  • Christer Ericson. Real-Time Collision Detection. San Francisco, CA: Morgan Kaufmann, 2005. 中譯本:《實時碰撞檢測算法技術》,劉天慧譯,清華大學出版社,2010.
  • Randima Fernando (editor). GPU Gems: Programming Techniques, Tips and Tricks for Real-Time Graphics. Reading, MA: Addison-Wesley, 2004. 中譯本:《GPU精粹:實時圖形編程的技術、技巧和技藝》,姚勇譯,人民郵電出版社,2006.
  • James D. Foley, Andries van Dam, Steven K. Feiner, and John F. Hughes. Computer Graphics: Principles and Practice in C (2nd Edition). Reading, MA: Addison-Wesley, 1995. 中譯本:《計算機圖形學原理及實踐──C語言描述》,唐澤圣/董士海/李華/吳恩華/汪國平譯,機械工業(yè)出版社,2004.
  • Grant R. Fowles and George L. Cassiday. Analytical Mechanics (7th Edition). Pacific Grove, CA: Brooks Cole, 2005.
  • John David Funge. AI for Games and Animation: A Cognitive Modeling Approach. Wellesley, MA: A K Peters, 1999.
  • Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissiddes. Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison-Wesley, 1994. 中譯本:《設計模式:可復用面向對象軟件的基礎》,李英軍/馬曉星/蔡敏/劉建中譯,機械工業(yè)出版社,2005.
  • Andrew S. Glassner (editor). Graphics Gems I. San Francisco, CA: Morgan Kaufmann, 1990.
  • Paul S. Heckbert (editor). Graphics Gems IV. San Diego, CA: Academic Press, 1994.
  • Maurice Herlihy, Nir Shavit. The Art of Multiprocessor Programming. San Francisco, CA: Morgan Kaufmann, 2008. 中譯本:《多處理器編程的藝術》,金海/胡侃譯,機械工業(yè)出版社,2009.
  • Roberto Ierusalimschy, Luiz Henrique de Figueiredo and Waldemar Celes. Lua 5.1 Reference Manual. Lua.org, 2006.
  • Roberto Ierusalimschy. Programming in Lua, 2nd Edition. Lua.org, 2006. 中譯本:《Lua程序設計(第2版)》,周惟迪譯,電子工業(yè)出版社,2008.
  • Isaac Victor Kerlow. The Art of 3-D Computer Animation and Imaging (2nd Edition). New York, NY: John Wiley and Sons, 2000.
  • David Kirk (editor). Graphics Gems III. San Francisco, CA: Morgan Kaufmann, 1994.
  • Danny Kodicek. Mathematics and Physics for Game Programmers. Hingham, MA: Charles River Media, 2005.
  • Raph Koster. A Theory of Fun for Game Design. Phoenix, AZ: Paraglyph, 2004. 中譯本:《快樂之道:游戲設計的黃金法則》,姜文斌等譯,百家出版社,2005.
  • John Lakos. Large-Scale C++ Software Design. Reading, MA: Addison-Wesley, 1995. 中譯本:《大規(guī)模C++程序設計》,李師賢/明仲/曾新紅/劉顯明譯,中國電力出版社,2003.
  • Eric Lengyel. Mathematics for 3D Game Programming and Computer Graphics (2nd Edition). Hingham, MA: Charles River Media, 2003.
  • Tuoc V. Luong, James S. H. Lok, David J. Taylor and Kevin Driscoll. Internationalization: Developing Software for Global Markets. New York, NY: John Wiley & Sons, 1995.
  • Steve Maguire. Writing Solid Code: Microsoft's Techniques for Developing Bug Free C Programs. Bellevue, WA: Microsoft Press, 1993. 國內(nèi)英文版:《編程精粹:編寫高質量C語言代碼》,人民郵電出版社,2009.
  • Scott Meyers. Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition). Reading, MA: Addison-Wesley, 2005. 中譯本:《Effective C++:改善程序與設計的55個具體做法(第3版)》,侯捷譯,電子工業(yè)出版社,2011.
  • Scott Meyers. More Effective C++: 35 New Ways to Improve Your Programs and Designs. Reading, MA: Addison-Wesley, 1996. 中譯本:《More Effective C++:35個改善編程與設計的有效方法(中文版)》,侯捷譯,電子工業(yè)出版社,2011.
  • Scott Meyers. Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library. Reading, MA: Addison-Wesley, 2001. 中譯本:《Effective STL:50條有效使用STL的經(jīng)驗》,潘愛民/陳銘/鄒開紅譯,電子工業(yè)出版社,2013.
  • Ian Millington. Game Physics Engine Development. San Francisco, CA: Morgan Kaufmann, 2007.
  • Hubert Nguyen (editor). GPU Gems 3. Reading, MA: Addison-Wesley, 2007. 中譯本:《GPU精粹3》,楊柏林/陳根浪/王聰譯,清華大學出版社,2010.
  • Alan W. Paeth (editor). Graphics Gems V. San Francisco, CA: Morgan Kaufmann, 1995.
  • C. Michael Pilato, Ben Collins-Sussman, and Brian W. Fitzpatrick. Version Control with Subversion (2nd Edition). Sebastopol , CA: O'Reilly Media, 2008. (常被稱作“The Subversion Book”,線上版本.) 國內(nèi)英文版:《使用Subversion進行版本控制》,開明出版社,2009.
  • Matt Pharr (editor). GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation. Reading, MA: Addison-Wesley, 2005. 中譯本:《GPU精粹2:高性能圖形芯片和通用計算編程技巧》,龔敏敏譯,清華大學出版社,2007.
  • Bjarne Stroustrup. The C++ Programming Language, Special Edition (3rd Edition). Reading, MA: Addison-Wesley, 2000. 中譯本《C++程序設計語言(特別版)》,裘宗燕譯,機械工業(yè)出版社,2010.
  • Dante Treglia (editor). Game Programming Gems 3. Hingham, MA: Charles River Media, 2002. 中譯本:《游戲編程精粹3》,張磊譯,人民郵電出版社,2003.
  • Gino van den Bergen. Collision Detection in Interactive 3D Environments. San Francisco, CA: Morgan Kaufmann, 2003.
  • Alan Watt. 3D Computer Graphics (3rd Edition). Reading, MA: Addison Wesley, 1999.
  • James Whitehead II, Bryan McLemore and Matthew Orlando. World of Warcraft Programming: A Guide and Reference for Creating WoW Addons. New York, NY: John Wiley & Sons, 2008. 中譯本:《魔獸世界編程寶典:World of Warcraft Addons完全參考手冊》,楊柏林/張衛(wèi)星/王聰譯,清華大學出版社,2010.
  • Richard Williams. The Animator's Survival Kit. London, England: Faber & Faber, 2002. 中譯本:《原動畫基礎教程:動畫人的生存手冊》,鄧曉娥譯,中國青年出版社,2006.
  • 勘誤

    第1次印冊(2014年2月)

    • P.xviii: 譯注中 Wholesale Algoithms -> Wholesale Algorithms
    • P.10: 最后一段第一行 微軟的媒體播放器 -> 微軟的Windows Media Player (多謝讀者OpenGPU來函指正)
    • P.15: 1.4.3節(jié)第三點 按妞 -> 按鈕 (多謝讀者一個小小凡人來函指正)
    • P.40: 正文最后一行 按扭 -> 按鈕
    • P.50: 1.7.8節(jié)第二節(jié)第一行 同是 -> 同時 (多謝讀者czfdd來函指正)
    • P.98: 代碼 writeExampleStruct(Example& ex, Stream& ex) 中 Stream& ex -> Stream& stream (多謝讀者Snow來函指正)
    • P.106: 第一段中有六處 BBS -> BSS,最后一段代碼的注釋也有同樣錯誤 (多謝讀者trout來函指正)
    • P.119: 譯注中 軟體工程 -> 軟件工程 (多謝讀者Snow來函指正)
    • P.214: 正文第一段有兩處 虛內(nèi)存 -> 虛擬內(nèi)存 (多謝讀者Snow來函指正)
    • P.216: 腳注24應標明為譯注 (多謝讀者Snow來函指正)
    • P.221: 第一段代碼的第二個斷言應為 ASSERT(link.m_pPrev != NULL); (多謝讀者Snow來函指正)
    • P.230: 5.4.4.1節(jié) 第二段 軟體 -> 軟件
    • P.286: 腳注4應標明為譯注 (多謝讀者Snow來函指正)
    • P.322: 第二段 按扭事件字 -> 按鈕事件
    • P.349: 9.8節(jié)第二段第二行兩處 部析器 -> 剖析器 (多謝讀者Snow來函指正)
    • P.738-572: 雙數(shù)頁頁眉 參考文獻 -> 中文索引
    • P.755-772: 雙數(shù)頁頁眉 參考文獻 -> 英文索引
    • P.755: kd tree項應歸入K而不是Symbols

    以上的錯誤已于第2次印冊中修正。

    第2次印冊及之前

    • P.11: 第四行 細致程度 -> 層次細節(jié) (這是level-of-detail/LOD的內(nèi)地通譯,多謝讀者OpenGPU來函指正)
    • P.12: 正文第一段及圖1.2標題 使命之喚 -> 使命召喚 (多謝讀者OpenGPU來函指正)
    • P.12: 正文第一段 戰(zhàn)栗時空 -> 半條命 (多謝讀者OpenGPU來函指正)
    • P.16: 第一點 表面下散射 -> 次表面散射 (多謝讀者OpenGPU來函指正)
    • P.17: 1.4.4節(jié)第五行 次文化 -> 亞文化 (此譯法在內(nèi)地更常用。多謝讀者OpenGPU來函提示)
    • P.22: 戰(zhàn)栗時空 -> 半條命
    • P.24: 戰(zhàn)栗時空2 -> 半條命2
    • P.34: 1.6.8.2節(jié)第一行 提呈 -> 提交 (這術語在本書其他地方都寫作提交。多謝讀者OpenGPU來函提示)
    • P.35: 第七行 提呈 -> 提交 (這術語在本書其他地方都寫作提交。多謝讀者OpenGPU來函提示)
    • P.50: 戰(zhàn)栗時空2 -> 半條命2
    • P.365: 第四段第二行: 細致程度 -> 層次細節(jié)
    • P.441: 10.4.3.2節(jié)第三行 細致程度 -> 層次細節(jié)
    • P.494: sinusiod -> sinusoid (多謝讀者OpenGPU來函指正)
    • P.511: 11.10.4節(jié)第一行 談入 -> 淡入 (多謝讀者Snow來函指正)
    • P.541: 戰(zhàn)栗時空2 -> 半條命2
    • P.627: 戰(zhàn)栗時空2 -> 半條命2
    • P.654: 第二行 建康值 -> 血量 (原來是改正錯別字,但譯者發(fā)現(xiàn)應改作前后統(tǒng)一使用的“血量”。多謝讀者Snow來函指正)
    • P.692: 第二行 內(nèi)部分式 -> 內(nèi)部方式 (多謝讀者Snow來函指正)
    • P.696: 14.7.6節(jié)第四行 不設實際 -> 不切實際 (多謝讀者Snow來函指正)

    以上的錯誤已于第3次印冊中修正。

    其他意見

    • P.220: 正文第一段 m_root.m_pElement 和 P.218 第一段代碼中的 m_pElem 不統(tǒng)一。原文有此問題,但因為它們是不同的struct,暫不列作錯誤。 (多謝讀者Snow來函提示)
    • P.331: 8.5.8節(jié)第二段中 “反覆”較常見的寫法為“反復”,但前者也是正確的,暫不列作錯誤。 (多謝讀者Snow來函提示)
    • P.390: 10.1.3.3節(jié)靜態(tài)光照第二段中“取而代之,我們會使用一張光照紋理貼到所有受光源影響范圍內(nèi)的物體上。這樣做能令動態(tài)物體經(jīng)過光源時得到正確的光照。” 后面的一句與前句好像難以一起理解。譯者認為,作者應該是指,使用同一靜態(tài)光源去為靜態(tài)物件生成光照紋理,以及用于動態(tài)對象的光照,能使兩者的效果維持一致性。譯者會考慮對譯文作出改善或加入譯注解譯。(多謝讀者店殘來函查詢)
    • P.689: 第五行 并行處理世代 -> 并行處理時代 是對era較準確的翻譯。 (多謝讀者Snow來函提示)

    總結

    以上是生活随笔為你收集整理的[置顶]《游戏引擎架构》信息总汇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。