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