精華區beta GameDesign 關於我們 聯絡資訊
遊戲引擎演化 出處: http://www.gameres.com 在閱讀各種遊戲介紹的時候我們常常會碰見"引擎"(Engine)這個單詞,引擎在遊戲中究 竟起著什麼樣的作用?它的進化對於遊戲的發展產生了哪些影響?希望下面這篇文章能為 大家釋疑。 一、什麼是引擎 我們可以把遊戲的引擎比作賽車的引擎,大家知道,引擎是賽車的心臟,決定著賽車的性 能和穩定性,賽車的速度、操縱感這些直接與車手相關的指標都是建立在引擎的基礎上的 。遊戲也是如此,玩家所體驗到的劇情、關卡、美工、音樂、操作等內容都是由遊戲的引 擎直接控制的,它扮演著中場發動機的角色,把遊戲中的所有元素捆綁在一起,在後臺指 揮它們同時、有序地工作。簡單地說,引擎就是"用於控制所有遊戲功能的主程序,從計 算碰撞、物理系統和物體的相對位置,到接受玩家的輸入,以及按照正確的音量輸出聲音 等等。" 可見,引擎並不是什麼玄乎的東西,無論是2D遊戲還是3D遊戲,無論是角色扮演遊戲、即 時策略遊戲、冒險解謎遊戲或是動作射擊遊戲,哪怕是一個只有1兆的小遊戲,都有這樣 一段起控制作用的代碼。經過不斷的進化,如今的遊戲引擎已經發展為一套由多個子系統 共同構成的複雜系統,從建模、動畫到光影、粒子特效,從物理系統、碰撞檢測到檔管理 、網路特性,還有專業的編輯工具和插件,幾乎涵蓋了開發過程中的所有重要環節,以下 就對引擎的一些關鍵部件作一個簡單的介紹。 首先是光影效果,即場景中的光源對處於其中的人和物的影響方式。遊戲的光影效果完全 是由引擎控制的,折射、反射等基本的光學原理以及動態光源、彩色光源等高級效果都是 通過引擎的不同編程技術實現的。 其次是動畫,目前遊戲所採用的動畫系統可以分為兩種:一是骨骼動畫系統,一是模型動 畫系統,前者用內置的骨骼帶動物體產生運動,比較常見,後者則是在模型的基礎上直接 進行變形。引擎把這兩種動畫系統預先植入遊戲,方便動畫師為角色設計豐富的動作造型 。 引擎的另一重要功能是提供物理系統,這可以使物體的運動遵循固定的規律,例如,當角 色跳起的時候,系統內定的重力值將決定他能跳多高,以及他下落的速度有多快,子彈的 飛行軌跡、車輛的顛簸方式也都是由物理系統決定的。 碰撞探測是物理系統的核心部分,它可以探測遊戲中各物體的物理邊緣。當兩個3D物體撞 在一起的時候,這種技術可以防止它們相互穿過,這就確保了當你撞在牆上的時候,不會 穿牆而過,也不會把牆撞倒,因為碰撞探測會根據你和牆之間的特性確定兩者的位置和相 互的作用關係。 渲染是引擎最重要的功能之一,當3D模型製作完畢之後,美工會按照不同的面把材質貼圖 賦予模型,這相當於為骨骼蒙上皮膚,最後再通過渲染引擎把模型、動畫、光影、特效等 所有效果即時計算出來並展示在螢幕上。渲染引擎在引擎的所有部件當中是最複雜的,它 的強大與否直接決定著最終的輸出品質。 引擎還有一個重要的職責就是負責玩家與電腦之間的溝通,處理來自鍵盤、滑鼠、搖杆和 其他外設的信號。如果遊戲支援聯網特性的話,網路代碼也會被集成在引擎中,用於管理 用戶端與伺服器之間的通信。 通過上面這些枯燥的介紹我們至少可以瞭解到一點:引擎相當於遊戲的框架,框架打好後 ,關卡設計師、建模師、動畫師只要往裏填充內容就可以了。因此,在3D遊戲的開發過程 中,引擎的製作往往會佔用非常多的時間,《馬科斯·佩恩》的MAX-FX引擎從最初的雛形 Final Reality到最終的成品共花了四年多時間,LithTech引擎的開發共花了整整五年時 間,耗資700萬美元,Monolith公司(LithTech引擎的開發者)的老闆詹森·霍爾甚至不 無懊悔地說:"如果當初意識到製作自己的引擎要付出這麼大的代價的話,我們根本就不 可能去做這種傻事。沒有人會預料得到五年後的市場究竟是怎樣的。" 正是出於節約成本、縮短週期和降低風險這三方面的考慮,越來越多的開發者傾向于使用 第三方的現成引擎製作自己的遊戲,一個龐大的引擎授權市場已經形成。 二、引擎的進化 曾經有一段時期,遊戲開發者關心的只是如何儘量多地開發出新的遊戲並把它們推 銷給玩家。儘管那時的遊戲大多簡單粗糙,但每款遊戲的平均開發週期也要達到8到10個 月以上,這一方面是由於技術的原因,另一方面則是因為幾乎每款遊戲都要從頭編寫代碼 ,造成了大量的重複勞動。漸漸地,一些有經驗的開發者摸索出了一條偷懶的方法,他們 借用上一款類似題材的遊戲中的部分代碼作為新遊戲的基本框架,以節省開發時間和開發 費用。根據馬老先生的生產力學說,單位產品的成本因生產力水準的提高而降低,自動化 程度較高的手工業者最終將把那些生產力低下的手工業者淘汰出局,引擎的概念就是在這 種機器化作業的背景下誕生的。 每一款遊戲都有自己的引擎,但真正能獲得他人認可並成為標準的引擎並不多。縱觀九年 多的發展歷程,我們可以看出引擎最大的驅動力來自於3D遊戲,尤其是3D射擊遊戲。儘管 像Infinity這樣的2D引擎也有著相當久遠的歷史,從《博多之門》(Baldur's Gate)系 列到《異域鎮魂曲》(Planescape:Torment)、《冰風穀》(Icewind Dale)直至今年 夏天將要發佈的《冰風穀2》,但它的應用範圍畢竟局限于"龍與地下城"風格的角色扮演 遊戲,包括頗受期待的《夜在絕冬城》(Neverwinter Nights)所使用的Aurora引擎,它 們都有著十分特殊的使用目的,很難對整個引擎技術的發展起到推動作用,這也是為什麼 體育模擬遊戲、飛行模擬遊戲和即時策略遊戲的引擎很少進入授權市場的原因,開發者即 便使用第三方引擎也很難獲得理想的效果,採用《帝國時代2》(Age of Empires)引擎 製作的《星球大戰:銀河戰場》(Star Wars:Galactic Battleground)就是一個最好的 例子。 因此,下面對引擎的歷史回顧將主要圍繞動作射擊遊戲的變遷展開,動作射擊遊戲同3D引 擎之間的關係相當於一對孿生兄弟,它們一同誕生,一同成長,互相為對方提供著發展的 動力。 引擎的誕生(1992年~1993年) 1992年,3D Realms公司/Apogee公司發佈了一款只有2兆多的小遊戲--《德軍司令部》( Wolfenstein 3D),稍有資歷的玩家可能都還記得初接觸它時的興奮心情,用"革命"這一 極富煽動色彩的詞語也無法形容出它在整個電腦遊戲發展史上佔據的重要地位。這部遊戲 開創了第一人稱射擊遊戲的先河,更重要的是,它在X軸和Y軸的基礎上增加了一根Z軸, 在由寬度和高度構成的平面上增加了一個向前向後的縱深空間,這根Z軸對那些看慣了2D 遊戲的玩家造成的巨大衝擊可想而知。 Wolfenstein 3D引擎的作者是大名鼎鼎的約翰·卡馬克,這位元id Software公司的首席 程式師正是憑藉這款Wolfenstein 3D引擎在遊戲圈裏站穩了腳跟。事實上,《德軍司令部 》並非第一款採用第一人稱視角的遊戲,在它發售前的幾個月,Origin公司就已經推出了 一款第一人稱視角的角色扮演遊戲--《創世紀:地下世界》(Ultima Underworld),這 款角遊戲採用了類似的技術,但它與Wolfenstein 3D引擎之間有著相當大的差別,舉例來 說,《地下世界》的引擎支援斜坡,地板和天花板可以有不同的高度,分出不同的層次, 玩家可以在遊戲中跳躍,可以抬頭低頭,這些特性Wolfenstein 3D引擎都無法做到,而且 從畫面上看,《德軍司令部》更接近漫畫風格而不是傳統的圖元畫面。 儘管從技術細節上看,Wolfenstein 3D引擎比不上《創世紀:地下世界》的引擎,但它卻 更好地利用了第一人稱視角的特點,快速火爆的遊戲節奏使人們一下子記住了"第一人稱 射擊遊戲"這個單詞,而不是"第一人稱角色扮演遊戲"。《德軍司令部》後來還發佈過一 款名義上的續集--《三元的崛起》(Rise of the Triad),這款遊戲在Wolfenstein 3D 引擎的基礎上增加了許多重要特性,包括跳躍和抬頭低頭等動作。 引擎誕生初期的另一部重要遊戲同樣是出自id Software公司的一款非常成功的第一人稱 射擊遊戲--《毀滅戰士》(Doom)。Doom引擎在技術上大大超越了Wolfenstein 3D引擎, 《德軍司令部》中的所有物體大小都是固定的,所有路徑之間的角度都是直角,也就是說 你只能筆直地前進或後退,這些局限在《毀滅戰士》中都得到了突破。儘管遊戲的關卡還 是維持在2D平面上進行製作,沒有"樓上樓"的概念,但牆壁的厚度可以為任意,並且路徑 之間的角度也可以為任意,這使得樓梯、升降平臺、塔樓和戶外等各種場景成為可能。 由於Doom引擎本質上依然是二維的,因此可以做到同時在螢幕上顯示大量角色而不影響遊 戲的運行速度,這一特點為遊戲創造出了一種瘋狂刺激的動作風格,在這方面迄今為止大 約只有《英雄薩姆》(Serious Sam)系列能與之相比,除此之外還沒有哪款3D引擎能在 大批敵人向你湧來的時候依然保持遊戲的流暢,這也是為什麼如今市面上的大部分第一人 稱射擊遊戲都在積極地培養玩家的戰術運用能力、提高玩家的射擊準確率而拒絕濫砍濫殺 的主要原因之一。值得一提的是,儘管Doom引擎缺乏足夠的細節度,但開發者仍然在《毀 滅戰士》中表現出了驚人的環境效果,其純熟的設計技巧實在令人讚歎。 不過更值得紀念的是,Doom引擎是第一個被用於授權的引擎。1993年底,Raven公司採用 改進後的Doom引擎開發了一款名為《投影者》(ShadowCaster)的遊戲,這是遊戲史上第 一例成功的嫁接手術。1994年Raven公司採用Doom引擎開發《異教徒》(Heretic),為引 擎增加了飛行的特性,成為跳躍動作的前身。1995年Raven公司採用Doom引擎開發《毀滅 巫師》(Hexen),加入了新的音效技術、腳本技術以及一種類似集線器的關卡設計,使 你可以在不同關卡之間自由移動。Raven公司與id Software公司之間的一系列合作充分說 明了引擎的授權無論對於使用者還是開發者來說都是大有裨益的,只有把自己的引擎交給 更多的人去使用才能使引擎不斷地成熟起來。 《毀滅戰士》系列本身就相當成功,大約賣了350萬套,而授權費又為id Software公司帶 來了一筆可觀的收入。在此之前引擎只是作為一種自產自銷的開發工具,從來沒有哪家遊 戲商考慮過依靠引擎賺錢,Doom引擎的成功無疑為人們打開了一片新的市場。 引擎的轉變(1994年~1997年) 在引擎的進化過程中,肯·西爾弗曼於1994年為3D Realms公司開發的Build引擎是一個重 要的里程碑,Build引擎的"肉身"就是那款家喻戶曉的《毀滅公爵》(Duke Nukem 3D)。 《毀滅公爵》已經具備了今天第一人稱射擊遊戲的所有標準內容,如跳躍、360度環視以 及下蹲和游泳等特性,此外還把《異教徒》裏的飛行換成了噴氣背包,甚至加入了角色縮 小等令人耳目一新的內容。在Build引擎的基礎上先後誕生過14款遊戲,例如《農夫也瘋 狂》(Redneck Rampage)、《陰影武士》(Shadow Warrior)和《血兆》(Blood)等, 還有臺灣艾生資訊開發的《七俠五義》,這是當時(至今依然是)國內不多的幾款3D射擊 遊戲之一。Build引擎的授權業務大約為3D Realms公司帶來了一百多萬美元的額外收入, 3D Realms公司也由此而成為了引擎授權市場上的第一個"暴發戶"。不過從總體來看, Build引擎並沒有為3D引擎的發展帶來任何質的變化,突破的任務最終由id Software公司 的《雷神之錘》(Quake)完成了。 《雷神之錘》緊跟在《毀滅公爵》之後發售,兩者孰優孰劣一時之間成為玩家的熱門話題 。從內容的精彩程度來看《毀滅公爵》超過《雷神之錘》不少,但從技術的先進與否來看 ,《雷神之錘》是毫無疑問的贏家。Quake引擎是當時第一款完全支援多邊形模型、動畫 和粒子特效的真正意義上的3D引擎,而不是Doom、Build那樣的2.5D引擎。此外Quake引擎 還是連線遊戲的始作俑者,儘管幾年前的《毀滅戰士》也能通過數據機連線對戰,但最終 把網路遊戲帶入大眾的視野之中的是《雷神之錘》,是它促成了電子競技產業的發展。 一年之後,id Software公司推出《雷神之錘2》,一舉確定了自己在3D引擎市場上的霸主 地位。《雷神之錘2》採用了一套全新的引擎,可以更充分地利用3D加速和OpenGL技術, 在圖像和網路方面與前作相比有了質的飛躍,Raven公司的《異教徒2》(Heretic II)和 《軍事冒險家》(Soldier of Fortune)、Ritual公司的《原罪》(Sin)、Xatrix娛樂 公司的《首腦:犯罪生涯》(Kingpin:Life of Crime)以及離子風暴工作室去年夏天剛 剛發佈的《安納克朗諾克斯》(Anachronox)都採用了Quake II引擎。 Quake II引擎的授權模式大致如下:基本許可費從40萬美元到100萬美元不等,版稅金視 基本許可費的多少而定,40萬美元的許可費大約需提取10%以上的版稅金,100萬美元的許 可費則提取很少一部分版稅金。這樣算下來,《雷神之錘2》通過引擎授權所獲得的收入 至少有一千萬美元,儘管遊戲本身的銷售業績比起《毀滅戰士》來要差很多,大約賣了 110多萬套,收入在4500萬美元左右,但在授權金這一塊它所獲得的盈利顯然要遠遠高於 《毀滅戰士》,此時的引擎已經從一種單純的工具變成了一塊令人垂涎欲滴的肥肉。 俗話說"一個巴掌拍不響",沒有實力相當的競爭者,任何市場都無法發展起來的。正當 Quake II獨霸整個引擎市場的時候,Epic Megagames公司(即現在的Epic遊戲公司)的《 虛幻》(Unreal)問世了。毫不誇張,第一次運行這款遊戲的時候,我的確被眼前的畫面 驚呆了,儘管當時只是在300x200的解析度下運行的這款遊戲(四大悲事之一:玩遊戲機 器不夠勁)。除了精緻的建築物外,遊戲中的許多特效即便在今天看來依然很出色,蕩漾 的水波,美麗的天空,龐大的關卡,逼真的火焰、煙霧和力場等效果。從單純的畫面效果 來看,《虛幻》是當之無愧的佼佼者,其震撼力完全可以與人們第一次見到《德軍司令部 》時的感受相比。 Unreal引擎可能是使用最廣的一款引擎,在推出後的兩年之內就有18款遊戲與Epic公司簽 訂了許可協定,這還不包括Epic公司自己開發的《虛幻》資料片《重返納帕利》,其中比 較近的幾部作品如第三人稱動作遊戲《北歐神符》(Rune)、角色扮演遊戲《殺出重圍》 (Deus Ex)以及永不上市的第一人稱射擊遊戲《永遠的毀滅公爵》(Duke Nukem Forever),這些遊戲都曾經或將要獲得不少好評。 Unreal引擎的應用範圍不限於遊戲製作,還涵蓋了教育、建築等其他領域。Digital Design公司曾與聯合國教科文組織的世界文化遺產分部合作採用Unreal引擎製作過巴黎聖 母院的內部虛擬演示,Zen Tao公司採用Unreal引擎為空手道選手製作過武術訓練軟體, 另一家軟體發展商Vito Miliano公司也採用Unreal引擎開發了一套名為"Unrealty"的建築 設計軟體,用於房地產的演示。 這款與《雷神之錘2》同時代的引擎經過不斷的更新,至今依然活躍在遊戲市場上,絲毫 沒有顯出老邁的跡象,實屬難得。 引擎的革命(1998年~2000年) 遊戲的圖像發展到《虛幻》這裏已經達到了一個天花板的高度,接下去的發展方向很明顯 不可能再朝著視覺方面進行下去。前面說過,引擎技術對於遊戲的作用並不僅局限於畫面 ,它還影響到遊戲的整體風格,例如,所有採用Doom引擎製作的遊戲,無論是《異教徒》 還是《毀滅巫師》,都有著相似的內容,甚至連情節設定都如出一轍。玩家開始對端著槍 跑來跑去的單調模式感到厭倦,開發者們不得不從其他方面尋求突破,由此掀起了第一人 稱射擊遊戲的一個新的高潮。 兩部劃時代的作品同時出現在1998年--Valve公司的《半條命》(Half-Life)和 LookingGlass工作室的《神偷:暗黑計畫》(Thief:The Dark Project),儘管此前的 《系統震撼》(System Shock)等遊戲也為引擎技術帶來過許多新的特性,但沒有哪款遊 戲能像《半條命》和《神偷》那樣對後來的作品以及引擎技術的進化造成如此深遠的影響 。 曾獲得無數大獎的《半條命》採用的是Quake和Quake II引擎的混合體,Valve公司在這兩 部引擎的基礎上加入了兩個很重要的特性:一是腳本序列技術,這一技術可以令遊戲以合 乎情理的節奏通過觸動事件的方式讓玩家真實地體驗到情節的發展,這對於誕生以來就很 少注重情節的第一人稱射擊遊戲來說無疑是一次偉大的革命;第二個特性是對人工智慧引 擎的改進,敵人的行動與以往相比明顯有了更多的狡詐,不再是單純地撲向槍口。這兩個 特點賦予了《半條命》引擎鮮明的個性,在此基礎上誕生的《要塞小分隊》、《反恐精英 》和《毀滅之日》等優秀作品又通過網路代碼的加入令《半條命》引擎煥發出了更為奪目 的光芒。 在人工智慧方面真正取得突破的遊戲是Looking Glass工作室的《神偷:暗黑計畫》,遊 戲的故事發生在中古年代,玩家扮演一名盜賊,任務是進入不同的場所,在儘量不引起別 人注意的情況下竊取物品。《神偷》採用的是Looking Glass工作室自行開發的Dark引擎 ,Dark引擎在圖像方面比不上《雷神之錘2》或《虛幻》,但在人工智慧方面它的水準卻 遠遠高於後兩者,遊戲中的敵人懂得根據聲音辨認你的方位,能夠分辨出不同地面上的腳 步聲,在不同的光照環境下有不同的目力,發現同伴的屍體後會進入警戒狀態,還會針對 你的行動做出各種合理的反應,你必須躲在暗處不被敵人發現才有可能完成任務,這在以 往那些純粹的殺戮遊戲中是根本見不到的。如今的絕大部分第一人稱射擊遊戲都或多或少 地採用了這種隱秘的風格,包括新近發佈的《榮譽勳章:盟軍進攻》(Medal of Honor: Allied Assault)。遺憾的是,由於Looking Glass工作室的過早倒閉,Dark引擎未能發 揚光大,除了《神偷:暗黑計畫》外,採用這一引擎的只有《神偷2:金屬時代》( Thief 2:The Metal Age)和《系統震撼2》等少數幾款遊戲。 受《半條命》和《神偷:暗黑計畫》兩款遊戲的啟發,越來越多的開發者開始把注意力從 單純的視覺效果轉向更具變化的遊戲內容,其中比較值得一提的是離子風暴工作室出品的 《殺出重圍》,《殺出重圍》採用的是Unreal引擎,儘管畫面效果十分出眾,但在個體的 人工智慧方面它無法達到《神偷》系列的水準,遊戲中的敵人更多的是依靠預先設定的場 景腳本做出反應,例如砸碎彈藥盒可能會引起附近敵人的警惕,但這並不代表他聽到了什 麼,打死敵人後周圍的同夥可能會朝你站立的位置奔過來也可能會無動於衷,這些不真實 的行為即便在《榮譽勳章:盟軍進攻》裏也依然存在。圖像的品質抵消了人工智慧方面的 缺陷,而真正幫助《殺出重圍》在眾多射擊遊戲中脫穎而出的則是它的獨特風格,遊戲含 有濃重的角色扮演成分,人物可以積累經驗、提高技能,還有豐富的對話和曲折的情節。 同《半條命》一樣,《殺出重圍》的成功說明了敍事對第一人稱射擊遊戲的重要性,能否 更好地支持遊戲的敍事能力成為了衡量引擎的一個新標準。 從2000年開始3D引擎朝著兩個不同的方向分化,一是如《半條命》、《神偷》和《殺出重 圍》那樣通過融入更多的敍事成分和角色扮演成分以及加強遊戲的人工智慧來提高遊戲的 可玩性,二是朝著純粹的網路模式發展,在這一方面,id Software公司再次走到了整個 行業的最前沿,他們意識到與人鬥才是其樂無窮,於是在Quake II出色的圖像引擎的基礎 上加入更多的網路成分,破天荒推出了一款完全沒有單人過關模式的純粹的網路遊戲--《 雷神之錘3競技場》(Quake III Arena),它與Epic公司稍後推出的《虛幻競技場》( Unreal Tournament)一同成為引擎發展史上的一個轉捩點。 隨著Quake III引擎的大獲成功,id Software公司在引擎授權市場上也大賺了一筆。 Raven公司再次同id Software公司合作,採用Quake III引擎製作了第一人稱射擊遊戲《 星際迷航:精英部隊》(Star Trek Voyager:Elite Force),此外這部引擎還被用於製 作第三人稱動作遊戲《重金屬F.A.K.K. 2》(Heavy Metal F.A.K.K 2)和《艾麗絲漫遊 魔境》(American McGee's Alice)、最近的兩款二戰題材的射擊遊戲《重返德軍總部》 (Return to Castle Wolfenstein)和《榮譽勳章:盟軍進攻》,以及開發中的《絕地放 逐者:絕地武士2》(Jedi Outcast:Jedi Knight II)。從地牢到外太空,從童話世界 到二戰年代,從第一人稱視角到第三人稱視角,充分顯示了Quake III引擎的強大潛力。 Epic公司的《虛幻競技場》雖然比《雷神之錘3競技場》落後了一步,但如果仔細比較一 下的話,你就會發現它的表現要略高出後者一籌。從畫面方面看兩者差不多打成平手,但 在聯網模式上,它不僅提供有死亡競賽模式,還提供有團隊合作等多種激烈火爆的對戰模 式,而且Unreal Tournament引擎不僅可以應用在動作射擊遊戲中,還可以為大型多人遊 戲、即時策略遊戲和角色扮演遊戲提供強有力的3D支援。Unreal Tournament引擎在許可 業務方面的表現也超過了Quake III,迄今為止採用Unreal Tournament引擎製作的遊戲大 約已經有20多款,其中包括《星際迷航深度空間九:墜落》(Star Trek Deep Space Nine:The Fallen)、《新傳說》(New Legend)和《塞拉菲姆》(Seraphim)等。 在1998年到2000年期間迅速崛起的另一款引擎是Monolith公司的LithTech引擎,這款引擎 最初是用在機甲射擊遊戲《升剛》(Shogo)上的。前面說過,LithTech引擎的開發共花 了整整五年時間,耗資700萬美元,功夫不負有心人,1998年LithTech引擎的第一個版本 推出之後立即引起了業界的主意,為當時處於白熱化狀態下的《雷神之錘2》vs.《虛幻》 之爭潑了一盆冷水。 正是由於過於高昂的開發代價,2002年Monolith公司決定單獨成立一個LithTech公司,以 LithTech引擎的授權許可作為主要業務,希望借此撈回一些成本。採用LithTech第一代引 擎製作的遊戲包括《血兆2》和《清醒》(Sanity)等。2000年LithTech公司推出了引擎 的2.0版本和2.5版本,加入了骨骼動畫和高級地形系統,給人留下深刻印象的《無人永生 》(No One Lives Forever)以及即將上市的《全球行動》(Global Operations)採用 的就是LithTech 2.5引擎,此時的LithTech已經從一名有益的補充者變成了一款同Quake III和Unreal Tournament平起平坐的引擎。如今LithTech引擎的3.0版本也已經發佈,並 且衍生出了"木星"(Jupiter)、"鷹爪"(Talon)、"深藍"(Cobalt)和"探索"( Discovery)四大系統,其中"鷹爪"被用於開發《異形大戰掠奪者2》(Alien Vs. Predator 2),"木星"將用於《無人永生2》的開發,"深藍"用於開發PS2版《無人永生》 ,"探索"則將被用來製作一款尚未公佈的大型網路遊戲。 LithTech引擎除了本身的強大性能外,最大的賣點在於詳盡的服務,除了LithTech引擎的 源代碼和編輯器外,購買者還可以獲得免費的升級、迅捷的電子郵件和電話技術支援, LithTech公司甚至還會把購買者請到公司進行手把手的培訓。而且LithTech引擎的平均價 格也不算很高,大約在25萬美元左右,同Quake III引擎的70萬美元相比已經是相當低廉 了。 引擎的明天(2001年~) 2001年有許多優秀的3D射擊遊戲陸續發佈,其中一部分採用的是Quake III和Unreal Tournament等現成引擎,如《星際迷航深度空間九:墜落》、《重返德軍總部》和《榮譽 勳章:盟軍進攻》,而更多的則採用的是自己開發的引擎,比較有代表性的包括網路射擊 遊戲《部落2》(Tribes 2)、第一人稱射擊遊戲《馬科斯·佩恩》、《紅色派系》( Red Faction)和《英雄薩姆》等。 《部落2》採用的是V12引擎,這款引擎雖然無法同Quake III和Unreal Tournament相提並 論,但開發者為它制定的許可模式卻相當新穎,你只需花上100美元就可以獲得引擎的使 用權,不過天下沒有免費的午餐,隨之而來的一系列規定相當苛刻,例如,開發者不能把 該引擎用於為其他遊戲發行商、其他商業遊戲站點等競爭對手製作遊戲,開發出來的遊戲 必須在發行前交給GarageGames公司(V12引擎的所有者),不能交給任何第三方, GarageGames公司將擁有這些遊戲五年的獨家發行權等等。儘管如此,對於那些規模較小 的獨立開發者來說,這個超低價引擎仍然具有非常大的吸引力。 《馬科斯·佩恩》採用的是MAX-FX引擎,這是第一款支援輻射光影渲染技術(Radiosity Lighting)的引擎,這種技術以往只在一些高級的建築設計軟體中出現過,它能夠結合物 體表面的所有光源效果,根據材質的物理屬性及其幾何特性,準確地計算出每個點的折射 率和反射率,讓光線以更自然的方式傳播過去,為物體營造出十分逼真的光影效果。 MAX-FX引擎的另一個特點是所謂的"子彈時間"(Bullet Time),這是一種《駭客帝國》 風格的慢動鏡頭,在這種狀態下甚至連子彈的飛行軌跡都可以看得一清二楚。MAX-FX引擎 的問世把遊戲的視覺效果推向了一個新的高峰。 《紅色派系》採用的是Geo-Mod引擎,這是第一款可任意改變幾何體形狀的3D引擎,也就 是說,你可以使用武器在牆壁、建築物或任何堅固的物體上炸開一個缺口,穿牆而過,或 者在平地上炸出一個彈坑躲進去。Geo-Mod引擎的另一個特點是高超的人工智慧,敵人不 僅僅是在看見同伴的屍體或聽見爆炸聲後才會做出反應,當他們發現你留在周圍物體上的 痕跡如彈孔時也會警覺起來,他們懂得遠離那些可能對自己造成傷害而自己又無法做出還 擊的場合,受傷的時候他們會沒命地逃跑,而不會冒著生命危險繼續作戰。 《英雄薩姆》採用的是Serious引擎,這款引擎最大的特點在於異常強大的渲染能力,面 對大批湧來的敵人和一望無際的開闊場景,你絲毫不會感覺到畫面的停滯,而且遊戲的畫 面效果也相當出色。此外值得一提的還有《海底驚魂》(AquaNox)所用的Krass引擎,這 款引擎被作為GeForce 3的官方指定引擎,專門用於宣傳、演示GeForce 3的效果,視覺方 面的表現無可挑剔。 可以看出,2001年問世的幾部引擎依舊延續了兩年多來的發展趨勢,一方面不斷地追求真 實的效果,例如MAX-FX引擎追求畫面的真實,Geo-Mod引擎追求內容的真實,《軍事冒險 家》(Soldier of Fortune)的GHOUL引擎追求死亡的真實;另一方面則繼續朝著網路的 方向探索,如《部落2》、《要塞小分隊2》(Team Fortress 2),以及Monolith公司那 款尚未公佈的大型網路遊戲。 不過,由於受到技術方面的限制,把第一人稱射擊遊戲放入大型網路環境中的構想至少在 目前還很難實現。眾所周知,一般的大型網路遊戲多為節奏較慢的角色扮演遊戲,這些遊 戲所使用的引擎,無論是《卡米洛特的黑暗年代》(Dark Age of Camelot)使用的 NetImmerse引擎,還是《地平線:伊斯塔里亞大陸》(Horizons:Empires of Istaria) 使用的Horizons引擎,或是"據說可以保證50萬人在同一虛擬世界中盡情遊戲而不會有任 何滯後感"的Big World引擎,都無法支援一個供數百名玩家同時戰鬥的大型團隊動態環境 。正是基於這樣的考慮,id Software公司重新把目光放在了單人模式上,去年年底公佈 的《雷神之錘4》和《毀滅戰士3》將重新建構一個以單人遊戲為主的引擎。與此同時,老 對手Epic遊戲公司也在緊鑼密鼓地開發新一代Unreal引擎和《虛幻競技場2》的引擎。儘 管目前關於這幾款引擎的具體資料並不多,但從已展示的幾段採用新引擎即時渲染的動畫 片段來看,它們的確完全超越了市面上的其他引擎,預示著一個新的引擎時代的到來。 最後需要指出的是,許多優秀的遊戲開發者正在退出遊戲開發市場,轉而進入引擎授權市 場,僅靠開發引擎吃飯,這是個危險的信號。儘管引擎的不斷進化使遊戲的技術含量越來 越高,但最終決定一款遊戲是否優秀的因素在於使用技術的人而不是技術本身。如前所述 ,引擎相當於遊戲的框架,框架打好後,你只需往裏填充內容即可,在這裏,框架只是提 供了一種可能性,遊戲的精彩與否取決於內容如何而非框架如何。正如《無人永生》開發 小組所說:"所有問題最終都會歸結為一點--你的遊戲是否好玩。" 附錄: 3D Engine 的設計架構 作者:Luke Hodorowicz 翻譯:樂晨光 (2001/9/28) 本人對3D也不甚瞭解,譯文動機一則是內容所致興致昂然,二則鍛煉英譯中技能。由本人 水準及經驗有限,文中絕對不乏大量誤解與誤譯,亦懇請讀者指出,得以一同提高。 佳文須共賞,也歡迎大家自由轉載 :) Introduction (簡介) 讓咱們談談你如何撰寫一份提供優雅性能的3D引擎。你的引擎需要提供的包括:曲面 (curved surfaces)、動態光線(dynamic lighting)、體霧(volumetric fog)、鏡面 (mirrors)、入口(portals)、天空體(skyboxes)、節點陰影(vertex shaders)、粒子系統 (particle systems)、靜態網格模型(static mesh models)、網格模型動畫(animated mesh models)。假如你已經知道如何以上所述的所有功能順利工作,你也許便能將那些東 東一起置入到一個引擎當中。 等等!在你開始撰寫代碼前你必須先構思一下如何去架構你的引擎。多數來講,你一定是 迫切地渴望去製作一個遊戲,但如果你立即投入便開始為你的引擎撰寫代碼後,你一定會 覺得非常難受,開發後期你可能會為置入新的特效與控制而不得不多次重寫大量的局部代 碼,甚至以失敗而放棄告終。花一點時間好好地為你引擎深謀遠慮一番,這將會為你節省 大量時間,也少一點頭痛。你一定不會急切地去架構一個巨型的工程;或許你也會在引擎 未完成時而乾脆放棄它,然後去幹的別的什麼事兒。好了,當你掌握學習你所需知識的方 式之前,也許你還不能完成那些事兒。將設計真正地完成確實是件美事,為之你會感覺更 好,你將為之而耀眼! 讓我們分析一下具備完整功能的3D遊戲引擎的需要哪些基本部件。首先,這為具有相應3D 經驗但且還需一些指引的開發者提供了一些資訊。這是一些並不難且能快速掌握但是你必 須應用的內容條目。為將你的工作更好地進行下去,這裏將對關於"把多大的工作量"與" 多少部分"置入一個遊戲引擎給出一個總概。我把這些成分稱為 系統(System)、控制臺 (Console)、支援(Support),渲染/引擎 內核(Renderer/Engine Core)、遊戲介質 層(Game Interface)、以及工具/資料(Tools/Data)。 Tools/Data (工具/資料) 在開發過程中,你總是需要一些資料,但不幸的是這並不象寫文字檔案或是定義一個立方 體那麼簡單。至少,你得需要3d模型編輯器,關卡編輯器,以及圖形程式。你可以通過購 買,也可以在網上找一些免費的程式滿足你的開發要求。不幸的是你可能還需要一些更多 的工具可你卻根本無法獲得(還不存在呢),這時你只得自己動手去寫。最終你很可能要 自行設計編寫一個關卡編輯器,因為你更本不可能獲得你所需。你可能也會編寫一些代碼 來為大量的檔打個包,整天面對應付成百上千個檔倒是非常痛苦的。你還必須寫一些轉換 器或是插件將3d模型編輯器的模型格式轉換成你自己的格式。你也需要一些加工遊戲資料 的工具,譬如可見度估算或是光線貼圖。 一個基本的準則是,你可能要為設計工具而置入比遊戲本身等量甚至更多的代碼。開始你 總能找到現成的格式和工具,但是經過一段時間以後你就能認識到你需要你的引擎有很大 的特性,然後你就會放棄以前的撰寫方式。 也許目前非常流行利用的第3方工具輔助開發,所以你必須時刻注意你的設計。因為一旦 當你將你的引擎發佈為opensouce或是允許修改,那也許在某天中會有某些人來應用你的 開發成果,他們將其擴展或者做某些修改。 或許你也應該花大量時間去設計美術,關卡,音效,音樂和實體模型,這就和你設計撰寫 遊戲,工具以及引擎一樣。 System (系統) 系統(system)是引擎與機器本身做通信交互的部件。一個優秀的引擎在待平臺移植時,它 的系統則是唯一需要做主要更改(擴加代碼)的地方。我們把一個系統分為若干個子系統 ,其中包括:圖形(Graphics)、輸入(Input)、聲音(Sound)、記時器(Timer)、 配置(Configuration)。主系統負責初始化、更新、以及關閉所有的子系統。 圖形子系統(Graphics Sub-System)在遊戲裏表現得非常直觀,如果想在螢幕上畫點什 麼的話,它(圖形子系統)便幹這事兒。大多數來講,圖形子系統都是利用OpenGL、 Direct3D, Glide或是軟體渲染(software rendering)實現。如果能更理想一些,你甚 至可以把這些API都給支持了,然後抽象出一個"圖形層"並將它置與實現API之上,這將給 了客戶開發人員或是玩家更多的選擇,以獲取最好的相容性、最佳的表現效果。 輸入子系統(Input Sub-System)需要把各種不同輸入裝置(鍵盤、滑鼠、遊戲板 [Gamepad],遊戲手柄[Joystick])的輸入觸發做統一的控制接收處理。(透明處理) 比 方說,在遊戲中,系統要檢測玩家的位置是否在向前移動,與其直接地分別檢測每一種輸 入裝置,不如通過向輸入子系統發送請求以獲取輸入資訊,而輸入子系統才在幕後真正地 幹活(分別檢測每一種輸入裝置),這一切對於客戶開發人員都是透明的。用戶與玩家可 以非常自由地切換輸入裝置,通過不同的輸入裝置來獲取統一的行為將變的很容易。 聲音子系統(sound system)負責載入、播放聲音。該子系統功能非常簡潔明瞭,但當前 很多遊戲都支持3D聲音,實現起來會稍許複雜一些。 3D遊戲引擎中很多出色的表現都是基於"時間系統"(time)的。因此你需要一段時間來為時 間子系統(Timer sub-system)好好構思一番。即使它非常的簡單,(遊戲裏)任何東西 都是通過時間觸發來做移動變化,但一份合理的設計將會讓你避免為實現而一遍又一遍地 撰寫大量雷同的控制代碼…… 配置系統(Configuration)位於所有子系統的頂端。它負責讀取配置記錄檔,命令行參 數,或是實現修改設置(setup)。在系統初始化以及運行期間,所有子系統都將一直與它 保持通訊。切換圖像解析度(resolution),色深(color depth),定義按鈕(key bindings),聲音支援選項(sound support options),甚至包括載入遊戲,該系統將 這些實現顯得格外的簡單與方便。把你引擎設計得更為可設置化一些,這將為調試與測試 帶來更大的方便;玩家與用戶也能很方便地選擇他(她)們喜歡的運行方式。 Console (控制臺) 哈!我知道所有人都樂意去更風做一個象Quake那樣的控制臺(console)系統。但這的確 是一個非常好的想法。通過命令行變數與函數,你就能夠在運行時改變你的遊戲或是引擎 的設置,而不需要重啟。開發期間輸出調試資訊它將顯得非常的有效。很多時間你都需要 測試一系列變數的值,將這些值輸出到控制臺上要比運行一個debugger速度顯然要快得多 。你的引擎在運行期間,一旦發現了一個錯誤,你不必立即退出程式;通過控制臺,你可 以做些非常輕便的控制,並將這個錯誤資訊列印出來。假如你不希望你的最終用戶看見或 是使用該控制臺,你可以非常方便地將其disable,我想沒人能看得見它。 Support (支持) 支援系統(Support)在你引擎中任何地方都將被使用到。該系統包含了你引擎中所有的 數學成分(點,面,矩陣等),(內)存儲管理器,檔載入器,資料容器(假如你不願自 己寫,也可以使用STL)。該模組任務顯得非常基礎與底層,或許你會將它複用到更多別 的相關專案中去。 Renderer/Engine Core (渲染/引擎 內核) 哈~是呀,所有的人都熱愛3D圖像渲染!因為這邊有著非常多的不同種類的3D世界渲染方 式,可要為各類擁有不同工作方式的3D圖形管道做出一個概要描述也是幾乎不可能的。 不管你的渲染器如何工作,最重要的是將你的渲染器組件製作得基化(based)與乾淨( clean)。 首先可以確定的是你將擁有不同的模組來完成不同的任務,我將渲染器拆分為以下幾個部 份:可見裁減(Visibility)、碰撞檢測與回饋(Collision Detection and Response) 、攝像器(Camera)、靜態幾何體(Static Geometry)、動態幾何體(Dynamic Geometry)、粒子系統(Particle Systems)、佈告板(Billboarding)、網格(Meshes )、天空體(Skybox)、光線(Lighting)、霧(Fogging)、節點陰影(Vertex Shading)和輸出(Output)。 其中每一個部分都得需要一個介面來方便地實現改變設置(settings)、位置(position )、方向(orientation)、以及其他可能與系統相關的屬性配置。 即將顯露出來的一個主要缺陷便是"特性臃腫",這將取決於設計期間你想實現什麼樣的特 性。但如不把新特色置入引擎的話,你就會發覺一切都將變的很困難,解決問題的方式也 顯得特別遜色。 還有一件有意義的事便是讓所有的三角形[triangles](或是面[faces])最終在渲染管道 裏經過同一點。(並非每次的每個三角形,這裏討論的是三角形列表[triangle lists]、 扇形[fans]、帶形[strips]、等) 多花一些工作讓所有物體的格式都能經過相同的光線 、霧、以及陰影代碼,這樣就能非常便利地僅通過切換材質與紋理id就使任何多邊形具有 不同的渲染效果。 這不會傷及到被大量被渲染繪出的點,但是一旦你不當心,它可能會導致大量的冗餘代碼 。 你也許最終便能發現,實現所有這些你所需的極酷效果可能只占了所有的15%左右的代碼 量甚至更少。這是當然的,因為大多數遊戲引擎並不只是圖形表現。 Game Interface (遊戲介質) 一個3D(遊戲)引擎很重要的部分便是------它是一個遊戲引擎。但這並不是一個遊戲。 一個真正的遊戲所需的一些元件永遠不要將它包含到遊戲引擎裏。引擎與遊戲製作之間的 控制介質能使代碼設計變得更清晰,應用起來也會更舒服。這雖是一些額外的代碼,但它 能使遊戲引擎具有非常好重用性,通過設計架夠遊戲邏輯(game logic)的腳本語言( scripting language)也能使開發變的更方便,也可以將遊戲代碼置入庫中。如果你想在 引擎本身中嵌入你的遊戲邏輯系統設計的話,大量的問題與大量修改一定會讓你打消複用 這個引擎的念頭。 因此,此時你很可能在思考這個問題:聯繫引擎與遊戲的介質層到底提供了什麼。答案就 是控制(control)。幾乎引擎的每一個部分都有動態的屬性,而該引擎/遊戲介質層( engine/game layer)提供了一個介面去修改這些動態屬性。它們包括了攝像器(camera )、模型屬性(model properties)、光線(lights)、粒子系統物理(particle system physics)、聲效播放(playing sounds)、音樂播放(playing music)、輸入 操作(handling input)、切換等級(changing levels)、碰撞檢測以及回饋( collision detection and response)、以及2D圖形介面的頂端顯示、標題畫面等相關的 東西。基本上來講如果你想讓你的遊戲能優雅的實現這些元素,在引擎中置入這個介質層 (interface)是必不可少的。 The Game (遊戲) 在這裏,我無法告訴你如何去寫你的遊戲。這該輪到你發揮啦。如果你已經為你那令人贊 異的引擎設計出了一套出色的介質層的話,我想在設計撰寫遊戲過程中一定會輕鬆許多。 3D遊戲引擎設計是一項巨大的軟體工程。一個人獨立完成設計並撰寫也並非不可能,但這 不只是熬一兩個晚上便能搞定的,你很可能會出寫出幾兆的源代碼量。如果你沒有持久的 信念與激情,你很可能無法完成它。 當然,別指望你的第一次嘗試就能寫出完整的引擎,挑一個比較小的專案所需的小規模引 擎去實現。按你的方式去努力工作,你就能到達成功。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.105.58.236