01
Jan
遊戲製作祕寶:遊戲引擎
Facebook

現在的遊戲產出速度很快,從App Store上那數不清的小遊戲就可看出端倪。為何遊戲製作可以如此快速?有一大半要歸功於遊戲引擎,因為遊戲引擎提供的功能,可以省卻大量的開發時程,使開發者能花更多的時間構思遊戲設計,而不是花時間處理程式碼。不過,到底什麼是遊戲引擎?它如何幫助開發者呢?

什麼是遊戲引擎?

遊戲引擎(Game Engine)是一種遊戲開發環境,玩家在遊戲中體驗到的關卡、劇情、美術畫面、音樂、操作等內容都是由遊戲引擎控制產生的結果。遊戲引擎完整地把遊戲中的所有元素,包括玩家的指令輸入、場景繪製、物體碰撞、聲音輸出等,全部整合在一起,在背景指揮所有元素一起有秩序地工作,呈現完美的遊戲效果。換言之,遊戲引擎不只是能發動遊戲的引擎,它是遊戲的組裝和指揮中心,控制著遊戲裡一切資源的運用。

早期沒有遊戲引擎,每款遊戲都必須從頭開始撰寫程式碼,相當地費時費力,而且寫出來的遊戲只能在單一平台上運作,不過後來開發者發現,遊戲中有許多程式碼是可以重複使用的,例如物體的翻轉和旋轉、聲音的播放和暫停,如果是同類型的遊戲,能重複使用的程式碼就更多,這些程式碼集合起來就是遊戲引擎的原型。現在的遊戲引擎已經發展成一套由數個子系統共同組成的複雜系統,通常包括算圖、物理、動畫、粒子、AI、網路、指令碼、聲音、影片等多個子系統。一款出色的遊戲引擎還需要具備大量的編輯工具和外掛程式,涵蓋開發過程中所有重要環節。特別是現在遊戲對跨平台性(桌上型電腦、行動裝置、遊戲主機……)有非常高的要求,因此現代遊戲引擎大都具備跨平台的能力,可供開發者快速開發出能在不同平台執行的遊戲。

▲《毀滅戰士》盒裝封面。

遊戲引擎大約在1990年代興起,與當時的第一人稱射擊遊戲(FPS)有相當的關係。id Software在1993年推出FPS遊戲《毀滅戰士》(Doom),此款遊戲不僅是遊戲史上的經典作品,也是遊戲引擎的先驅。《毀滅戰士》將核心軟體元件、美術、場景與遊戲機制分離出來,使其他開發者能利用遊戲引擎的程式碼,創造自己的視覺元素、武器、角色、車輛等。這也帶動了「Mod社群」的誕生――Mod是Modification,Mod社群是由一群玩家與小型獨立工作室組成,他們會利用原始遊戲提供的開發工具改造出自己的遊戲。《毀滅戰士》也開啟了遊戲引擎的授權風潮,其他公司只要付出授權金,便能使用遊戲引擎開發自己的商業遊戲,如《異教徒》(Heretic)、《毀滅巫師》(Hexen: Beyond Heretic)、《Strife》都是用Doom引擎開發。遊戲引擎的授權金不但能為遊戲公司帶來可觀的收入,也使遊戲的產出速度更為快速,等於為遊戲產業開闢了另一片疆土。

▲《毀滅巫師》盒裝封面。

 

DirectX與OpenGL

通常遊戲或遊戲引擎都會標明DirectX或OpenGL字樣,這兩者與遊戲有何關係呢?它們是負責與電腦硬體設備溝通的應用程式介面(API),使遊戲能順利使用顯示卡、音效卡等設備在螢幕上成像、發出聲音,並能接受滑鼠、鍵盤、搖桿傳來的輸入指令。如果沒有這層溝通介面,開發者就得自己去收集市面上的顯示卡、音效卡資料,再根據不同的API撰寫驅動程式。早期玩DOS遊戲時,玩家要選擇聲音設備(如PCI喇叭、魔奇音效卡),還要進行IRQ、I/O等設定,要是選不對遊戲就發不出聲音,因此沒有這層溝通介面,對開發者和玩家都是一件痛苦的事情。現在的遊戲只要安裝好就能正常執行,無需選擇音效卡或進行陌生的系統設定,要拜溝通介面所賜。

▲《刺客教條3》PC版支援最新的DirectX 11。(圖片來源:Ubisoft)

DirectX是微軟建立的一組API,當中包含Direct Graphics、DirectInput、DirectPlay、DirectSound多個元件,可以處理圖形、輸入設備、網路連線、錄音與聲音處理等,不過只能用於微軟平台;OpenGL是SGI公司提出的跨平台、跨語言API,可讓開發者繪製2D、3D圖形,但它只提供圖形相關API,不像DirectX包含了聲音、輸入設備等,因此必須搭配其他溝通介面使用。現在的遊戲和遊戲引擎大都採用這兩種規格或其中之一,只要玩家的系統支援DirectX或OpenGL,遊戲就能順利展現多媒體效果。

▲《傳送門2》Mac版支援OpenGL。(圖片來源:Valve)

 

遊戲引擎的組成元素 

前面提到,遊戲引擎是由算圖、物理、動畫等多個系統組成的複雜系統,這些系統在遊戲引擎裡分工合作,才能產出最終的成品,但它們究竟與遊戲的哪些部分相關呢?讓我們繼續看下去…… 

算圖引擎(Rendering Engine)

算圖引擎可以根據開發者匯入的檔案,產生2D或3D影像。算圖(Render)是指算圖引擎在螢幕上「畫出」所有東西的方式。例如有一個陽光普照的街景,街上有車子和店家,算圖引擎必須根據街景裡每樣物體的材質(如車子的金屬車身、玻璃窗)、物體離光線的距離、物體的陰影、物體之間的遮蔽,以及光線的反射、折射等情形,計算出街景呈現的樣子。換句話說,遊戲畫面的細緻度、逼真度和質感,取決於算圖引擎。通常遊戲引擎都會提供數種算圖方式,讓開發者可以依據需求,呈現出理想的遊戲畫面。

▲算圖引擎決定遊戲畫面的質感。圖為Unity引擎的技術展示片畫面,從圖中可以看到玻璃的高光、反射、折射都能精確反映出周圍的場景。

物理引擎(Physics Engine)

物理引擎可以使物體的運動,遵循自然界的物理規律,使物體有自然的物理表現,如剛體(Rigid Body)、柔體(Soft Body)、流體(Fluid)的運動。你可以把剛體想成是小鋼珠,把柔體想成豆腐,把流體想成水,如果有一根線吊著小鋼珠晃來晃去,豆腐從盒中倒到盤子上,或水倒入杯子裡,物理引擎就可以模擬小鋼珠的晃動、豆腐掉落時的彈動與水倒入杯中的流動感。Angry Birds就是一個重度仰賴物理表現的遊戲,它採用Box2D作為物理引擎。玩家把鳥掛上彈弓擲出後,物理引擎會根據擲出角度計算飛行距離與造成的破壞,以及小鳥落地後的滾動,其中牽涉到時間、距離、速度、動量、位置、重力、摩擦力、反彈等等,如果沒有遊戲引擎,這些都必須由開發者撰寫程式碼計算,藉由Box2D,開發者可以快速模擬出逼真的衝撞結果。 

▲《憤怒鳥》玩法簡單,背後其實牽涉到多項物理運算。 

碰撞偵測(Collision Detection)

碰撞偵測是物理引擎中分離出來的一環,用來偵測遊戲中的物體是否碰撞,並決定碰撞後的結果,例如一個人往前走,碰到牆壁、樹木、汽車等障礙後會被擋住,炸彈碰到物體時會將其炸毀等。如果沒有碰撞偵測,每樣東西就會像幽靈一樣穿牆而過。由於每個物體的形狀不同,因此偵測碰撞的方法也不一。有一種較簡單的方法是,開發者除了畫出給玩家看的模型外,另外在遊戲中暗藏玩家看不見的基本幾何模型,如球體、立方體、圓柱、三角錐等,然後用這些模型來偵測遊戲中物體的碰撞,比如用圓柱體代表杯子、立方體代表汽車、球體代表球。碰撞時,只要偵測這些圓柱體、立方體有沒有碰到即可。萬一遊戲裡的物體是不規則形狀,像是杯子有把手,或是像樹木和人這樣外型較複雜的物體,就必須用更精確的方法進行碰撞偵測。

▲範圍偵測是碰撞偵測中最簡單快速的一種方法,例如要偵測圖中的兩個圓圈是否碰撞,只要用座標檢查位置,偵測兩者是否產生交集,就知道有沒有碰到。 

粒子系統(Particle System)

粒子系統也是物理引擎分離出來的環節,主要用於特效場面,像是爆炸、火花、瀑布、噴泉、雪花、煙霧等,遊戲角色使出的華麗魔法也是拜粒子系統所賜,不過粒子系統並不是用滑鼠點一下,就會自動產生特效,而是有很多數值必須調整。首先要決定粒子的生成位置,例如將粒子發射器設在仙女棒的頂端;接下來決定粒子的生命值,也就是放射的火花可以存活多久,例如火花往外散開消失後,這個粒子的生命就算是結束了;此外要決定粒子噴出的強度,也就是火花迸出的力道;再者必須決定火花的顏色、散射速度與射出方向,最後才會締造出逼真的火花。若要締造煙霧、雪花等效果,還需將風力等因素考量進去。 

▲粒子系統可以做出火光、水珠與雪花等效果,是特效的必備工具,圖為Horde3D引擎的粒子效果。(圖片來源:Horde3D) 

動畫系統(Animation System)

動畫系統關係到角色的動作。普通動作有走、跑、跳、爬、游,較細微的動作有撿東西、打字、舉槍、翻滾、閃躲等。由於角色不可能一直處在走路或跑步狀態,因此動畫系統除了做出動作外,也要把不同動作流暢地連貫起來。常見的動畫控制系統是反向關節(Inverse Kinematics),俗稱IK。IK系統可以用骨骼資料來帶動物體產生動作,許多3D動畫軟體也都採用此系統來製作動畫。使用方式是建立好模型後,將骨骼與模型綁在一起。模型上有很多控制點(Vertex),這些點包含了一連串的索引資料,指出骨骼牽動的部位,以及骨骼的對該部位的牽動程度。

為何使用IK而不使用正向關節FK(Forward Kinematics)呢?用一個比喻來說,當我們抬起手時,FK是由上臂帶動前臂,前臂帶動手,最後手被抬起;IK則是去把手抬起來,在手抬起來的同時,手臂也會被提起。使用IK的好處是容易製作動畫,因為只要拉動手腳就能做出大量動作,不用從肩膀或大腿一節一節的調下來。

AI(Artificial intelligence)

AI的字面翻譯是人工智慧,在遊戲中指的是電腦智能。假設在遊戲中操縱主角去砍殺敵人,你發現不管你採取什麼攻勢,敵人都不太會閃躲,有時候還跑過來給你打,這個遊戲的AI就不是很強;反之,若敵人不但會巧妙閃躲,並常常打得你無法招架,那麼遊戲的AI就蠻強的了。遊戲的樂趣有很大一部分來自AI,因為AI必須適時根據玩家的行為和遊戲中的情境想出應變策略,繼而使遊戲產生高度變化及一定的難度,同時也為遊戲增添真實感。應用在AI的技術有模糊邏輯(Fuzzy Logic)、路徑尋覓(Path Finding)、基因演算法(Genetic Algorithm)、類神經網路(Artificial Neural Networks)等方式。

以模糊邏輯來說,它可以使AI的判斷更接近人類思考,譬如我們形容距離時,不會只說遠或近,而會說「相當遠」、「很遠」,或是「有點近」、「非常近」,這種方法有助於幫AI判定何種距離下該採取什麼樣的行動。例如遊戲中電腦操縱的敵人離玩家1公里時,AI的判斷是「距離遠,警戒」;敵人離玩家0.5公里時,AI的判斷是「距離近,開始追擊」;敵人離玩家0.3公里時,AI判定「距離很近,快速移動並追擊」。依據我們設定的規則,電腦會算出最接近某條規定的值,適時在遊戲中做出相對的應變。 

▲模糊邏輯可幫助AI因應情況採取行動,如圖中的坦克要去追一群滑鼠,滑鼠四散奔逃,這時候坦克會根據模糊邏輯判斷哪一隻滑鼠最容易追到,繼而鎖定該滑鼠進行追擊。(圖片來源:Xbox LIVE Indie Games) 

聲音系統(Audio System)

聲音是營造遊戲氣氛不可或缺的要素,遊戲引擎中的聲音系統關係到聲音的格式、壓縮、循環、播放、暫停,3D音效的位置、聲音的衰減、多聲道的處理,以及音高、音量。為了使聲音與遊戲場景更為融合,聲音系統也會提供聲音反射、低音濾波器等效果器,並提供不同的音場模式,方便使用者依據不同場景調整,例如有的場景著重對話音量,有的場景著重背景音等等。有些遊戲公司會有自己的聲音系統,如微軟的跨平台聲音製作工具XACT、Electronic Arts(EA)的先進高效能聲音引擎SoundR!OT、Sony的3D聲音引擎Scream。 

▲聲音系統掌管遊戲中所有的音樂與音效,並可為聲音做出各種變化。圖為CryENGINE 3引擎的聲音系統。 

網路(Networking)

時下多人連線遊戲盛行,有的遊戲引擎也具有網路功能,用以管理伺服器與客戶端之間的通訊,追蹤所有玩家目前的遊戲狀態,處理連線、斷線問題。

=======================================================

看到這裡是否已頭昏眼花了?原來遊戲引擎的背後牽涉到數學、物理理論,還有大量的運算。如果沒有遊戲引擎幫開發者做這些前置工作,那麼開發者必須從頭研究這些理論和公式,撰寫數不清的程式碼。透過遊戲引擎,開發者只需幾行程式碼就能完成原本很複雜的工作,並能透過遊戲引擎管理遊戲開發流程,還能即時預覽許多效果。最重要的是,開發者能有更多的時間專注於遊戲設計,而非花時間撰寫大量程式碼及解決電腦相關問題。

如果用一個遊戲來說明遊戲引擎的作用,會是這樣:

玩家控制主角悄聲進入一座廢棄房屋,不小心碰倒了屋內的椅子,驚動了原本散落在屋內的敵人。你拿出槍對敵人攻擊,其他人知道你有槍,一面互相警告,一面小心翼翼地包圍過來。你看到敵人數量不少,便拿出預藏的汽油彈朝敵人丟擲,解決了部分敵人,隨後再逐一解決剩下的敵手。 

遊戲引擎在此遊戲中做了哪些事呢?首先是畫質,好的繪圖引擎可使整個場景看起來相當逼真細膩,並能表達細微的光影變化;主角在遊戲中做出的走路、跑步、投擲汽油彈等動作,與動畫系統有關;主角碰倒屋內的椅子,牽涉到碰撞偵測;敵人互相警告並包圍過來,是AI的智能運算在背後作用;主角拿出汽油彈朝敵人投擲,汽油彈投擲的角度與距離遠近,與物理引擎相關;汽油彈引發的爆炸與爆炸後的煙霧,與粒子系統有牽連;遊戲進行時,音樂、音效必須順勢出現配合遊戲的進行,這是聲音系統在背後處理;如果遊戲提供多人線上模式,可以和其他玩家比賽,網路功能便要監控每個玩家的遊戲狀態,得知玩家是生是死與玩家獲得的分數,將結果傳回伺服器。簡而言之,遊戲引擎影響遊戲中所有物體的互動方式,遊戲世界裡的一舉一動,都與遊戲引擎有關。 

▲《最後倖存者》(The Last of Us)囊括了遊戲引擎的各項要素。(圖片來源:SCET)

 

遊戲引擎類別 

遊戲有不同種類,遊戲引擎也有不同類別,因為不同遊戲有不同的特色和機制,遊戲引擎必須能呈現出該類遊戲要強調的環節,使遊戲得到最佳結果。例如第一人稱射擊遊戲(First Person Shooter, FPS)講求高度寫實、細節分明的環境,畫面必須非常流暢的呈現,不能有任何遲緩,因此開發FPS的遊戲引擎必須有先進的算圖技術,即時呈現遊戲世界中的多變場景,此外遊戲引擎也必須在角色動畫、聲音、物理、AI等方面有優良表現,才能打造出身歷其境的感覺,所以FPS的遊戲引擎往往有業界最尖端的技術,代表的引擎有Unreal Engine、CryENGINE等。

▲Cocos2d開發的iPhone遊戲《Trauma Ted》。 

第三人稱射擊遊戲(Third Person Shooter, TPS)與FPS相似,不同的是TPS必須做出主角的動作,因為在TPS中玩家看得見主角,而在FPS中只看得見主角雙手換武器的動作。至於其他以第三人稱視角進行的遊戲,則不一定要寫實的畫面,譬如有的橫向捲軸遊戲是以卡通的形式呈現;如果此類遊戲包含解謎成分,玩家就需要和環境中的物體互動才能順利過關。遊戲引擎除了要做出主角的各種動作外,也要做出遊戲中其他物體的動作,如移動的平台、伸縮的梯子與搖晃的繩索。其他如格鬥遊戲要有豐富的打鬥動畫、精確的擊中點偵測,以及能夠處理按鈕及搖桿的輸入系統;賽車遊戲要能處理車子的運動、碰撞和翻轉,周圍環境必須順著車子的行進即時變化和轉換;即時戰略遊戲要能看見大片場景與建物,並能讓大量戰車或軍士同時在畫面上移動。

▲FPS遊戲引擎通常擁有先進而強悍的算圖技術,圖為CryENGINE 3引擎使用影像照明(Image-Based Lighting)的表現。 

▲第三人稱射擊遊戲(TPS)的畫面會顯示主角(揹槍者),而FPS只會顯示主角的雙手。圖為TPS遊戲《失落的星球3》畫面。(圖片來源:愛勝遊戲)

由於遊戲的不同需求,因此產生了許多適用於某類遊戲的遊戲引擎,如Adventure Game Studio、Wintermute引擎多用於冒險,Spring引擎用於即時戰略等,不過某些類型的遊戲需要的技術是重疊的,因此有些遊戲引擎可以用在不同類型的遊戲中,如Unity就適合開發各種遊戲。還有一些遊戲引擎僅具備單一或少數功能,如Box2D單純用於模擬剛體碰撞,Allegro提供圖像與聲音的處理功能。遊戲引擎也有商業、免費與開放原始碼之別,商業遊戲引擎往往需要高額授權金,用於開發大型遊戲的機會較多;免費引擎雖然免費,但通常會限制開發者的使用範圍,例如不得作為非商業使用;開放原始碼引擎由於不限使用對象,因此無論商業、免費遊戲皆會使用,如Cocos2d就大量應用於App遊戲。

▲Spring開發的即時戰略遊戲《Zero-K》,可在Window、Mac、Linux上執行。(圖片來源:Zero-K) 

 

Unity 

Unity由來自冰島、德國、丹麥的三位工程師於2004年創立,是一個適用於開發動作、射擊、角色扮演、戰略、益智、賽車等各類遊戲的遊戲引擎。比起許多商業遊戲引擎需要的高額授權金,Unity的價格相對便宜。它有兩個版本:Unity Free與Unity Pro。Unity Free為免費版,提供基本開發工具;Unity Pro提供進階功能,譬如Beast照明貼圖烘焙、Umbra遮擋剔除、進階後期特效等。無論是免費版或專業版,都可以正常發布遊戲,對資金較少的小型工作室或獨立開發者而言,Unity無疑是很好的遊戲開發解決方案。近幾年手機遊戲盛行,根據Game Developer雜誌調查,90%以上的開發者選擇iOS作為遊戲平台,超過50%的手機遊戲開發者是使用Unity作為開發工具,由此可知Unity的受歡迎程度。

Unity是多平台的開發工具,除了iOS、Android外,它還支援PS3、Xbox 360、Windows、Wii U、Mac、Linux及各種網頁瀏覽器,同時也能與市面上常見的3D動畫軟體整合。Unity提供的功能也相當完整,包含動畫、物理、照明、算圖、特效、材質、AI、聲音系統,可以做出AAA級遊戲――AAA級遊戲是指高成本、動用大量資源與人力做出的高品質遊戲,不過目前Unity的應用以小成本遊戲為多。國外作品有《搗蛋豬》(Bad Piggies)、《半獸人:復仇》(ORC: Vengeance)、《荒野世界2》(Wasteland 2)等,國內作品則有《將魂》、《Titania》等。

▲搗蛋豬(圖片來源:Rovio Entertainment)

Unity 4是目前Unity的最新版本。Unity 4與過去最大的不同,在於動畫系統的更新以及對Linux和Flash的支援。動畫部分出現了新的Mecanim系統,此系統可讓開發者直接在Unity中調整動畫、即時預覽動畫結果,無需重回第三方軟體調整,另外也有狀態機(State Machines)與混合樹(Blend Tree)系統。狀態指的是角色擺出的各種動作,好比走路、跑步、爬行;角色在做這些動作時,通常是銜接著的,例如從走路變成跑步,從跑步變成跳躍。從一種狀態轉換到另一種狀態時,中間必須有狀態轉換,角色的動作才會流暢;再者,許多狀態之間是無法直接轉換的,例如角色要「奔跑跳躍」,他必須先開始奔跑才能做這個動作,如果是在靜止的情況下,是無法直接做出「奔跑跳躍」的。狀態機可以管理角色狀態,以圖表清楚顯示狀態之間的關聯;混合樹可「混合」狀態,使狀態之間能流暢的轉換,並可調整狀態的速度、方向等,讓開發者快速做出理想的角色動畫。藉由Mecanim系統中的重新定位(Retarget)技術,可將相同動作套用到不同的角色上,省卻重複做相同動作的麻煩。

▲荒野世界2(圖片來源:inXile entertainment)

在Unity 3.5中,雖然已有Flash支援,但只是Flash預覽版,Unity 4才算正式支援Flash,開發者可將Unity的各種功能運用於Flash遊戲中。此外Unity 4可在所有平台上使用動態字型(Dynamic Font),此功能可讓開發者在遊戲中使用各種系統字型,而不用包含字型資料,並能在任何解析度下繪製出需要的文字,還可使用HTML標籤對字體、字型、顏色做出各種變化。在手機硬體規格越來越好的同時,Unity 4也支援在手機上使用即時動態陰影效果。

▲Titania(圖片來源:雷爵網路)

另一項Unity 4做出的改變是Shuriken粒子系統,新系統更新了碰撞功能,可以調整粒子的光束放射(Ray Casting)品質。光束放射是一種用於電腦繪圖的技術,你可以假想有一條從眼睛放射出的光線,這條光線一直往前延伸,直到碰到物體。碰到物體後,一部分的光會被物體吸收,一部分的光會被物體反射,剩下的光會被物體折射。光束放射可以判斷光線被吸收、反射、折射的比例,並得知光線從眼睛到物體的距離,利用這些資訊算出最終我們在螢幕上看到的圖形。不過光束放射是一種昂貴的運算,如果全部使用這種運算,會影響遊戲進行的流暢度,而且許多細節肉眼其實是看不出來的。Unity 4可以讓開發者自訂光束放射的高、中、低品質,以最少的運算資源做出最大的成果。

▲Unity 4編輯器

 

Unreal Engine

遊戲引擎,大都用於開發一人稱射擊遊戲(FPS),不過近年來也有動作冒險、格鬥、角色扮演等其他類型遊戲採用。九零年代前期,遊戲引擎幾乎由id Software獨領風騷,但在UE出現之後情況有了改變。現在的UE堪稱是遊戲引擎界的龍頭之一,包括Electronic Arts、Square Enix、Vivendi Universal Games在內的各大遊戲製作公司皆是UE的客戶,連NASA和美國陸軍都採用UE開發軍事和太空模擬遊戲。

Unreal Engine

id Software開啟了遊戲引擎的時代,推出的遊戲個個是FPS的強作,最著名的便是《毀滅戰士》(Doom)與《雷神之鎚》(Quake)系列,兩系列所採用的遊戲引擎也一代比一代高階。不過到了1998年,他們遇上了勁敵,就是Epic Games的《魔域幻境》(Unreal)。

《魔域幻境》(Unreal)採用Unreal Engine遊戲引擎,該引擎包含圖形處理、物理運算、動畫、碰撞偵測、網路、聲音等功能,當時主要對手《雷神之鎚2》(Quake II)採用的Id Tech 2引擎較專注於圖形處理,相比之下UE的用途更廣。UE的圖形處理能力也較Id Tech 2更為進步,雖然彩色照明(Colored Lighting)技術由Id Tech 2率先使用,但UE也有自己的成就:它的軟體算圖(Software Rendering)可以做到接近硬體算圖(Hardware Rendering)的程度。軟體算圖指的是將所有算圖程序丟給CPU處理,優點是不會有指令不相容的問題,運算時不會受限於顯示卡的算圖能力,如果程式對硬體算圖的支援不佳,軟體算圖可以獲得較好的成果,缺點是CPU要負擔所有程序,因此速度較慢;硬體算圖是使用顯示卡的GPU及支援的相關指令集做運算,優點是算圖快速,缺點是會遇到指令不支援的問題。現在的顯示卡硬體規格都非常好,遊戲也大都支援硬體算圖,不過軟體算圖在九零年代晚期是遊戲常用的算圖方式。UE也支援細節紋理(Detail Texture)。一般情形下,玩家在遊戲中靠近某個物體時,物體的紋理通常會隨著靠近而模糊,細節紋理可讓玩家越靠近物體,物體的紋理顯示得越清楚。另外UE也提供UnrealScript指令碼語言,讓開發者能快速改造遊戲。

▲《魔域幻境》盒裝封面。 

由於UE的多功能與強大的圖形處理能力,許多遊戲紛紛採用UE開發,包括《時間之輪》(The Wheel of Time)、《駭客入侵》(Deus Ex)、《維京戰神》(Rune)、《冒險鋼珠:遺忘的島嶼》(Adventure Pinball: Forgotten Island)、《哈利波特―神祕的魔法石》(Harry Potter and the Philosopher's Stone)等十幾款遊戲。後來Epic Games也將UE繼續用在1999年自家推出的《魔域幻境之浴血戰場》(Unreal Tournament),並提供更友善的開發環境,開發者可以選擇性地插入修改的遊戲程式碼,而不用全部修改。

Unreal Engine 2

在Unreal Engine大受好評的情況下,出「續集」是必然的。Epic Games不負眾望推出了Unreal Engine 2(UE2)。UE2沒有沿用一代的程式碼,而是幾乎全部重新撰寫,包括核心部分、算圖引擎與物理引擎。不同於一代,Epic Games沒有立刻用第二代遊戲引擎開發自己的遊戲,而是將UE2給了美國陸軍,美國陸軍用此引擎開發了一款FPS遊戲:《美國陸軍》(America's Army)。《美國陸軍》的發行目的,主要是為了協助美國陸軍招募新兵。遊戲在2002年推出,以免費軟體的方式提供給大眾下載,結果獲得不少玩家青睞,也得到諸多媒體的好評,後來還推出二代和三代。

UE2使用了Karma物理引擎,可將布娃娃系統(Ragdoll Physics)應用於遊戲中。布娃娃系統是常用於模擬角色死亡或昏迷的物理系統,例如一個人在遊戲裡中彈而死,他的身體也許會先趴到桌上再滑到地上,呈現一種癱軟的狀態,這時候的身體運動方式與常人可以單獨動手、動腳或轉頭是不一樣的,一個碰撞或拉動就會影響整個身軀的動作,就像我們拿起布娃娃的一隻手時,布娃娃的其他手腳、頭和身體都會下垂。利用布娃娃系統,可以使角色死亡看起來更為真實。UE2隨後更新為2.5版本,除了提昇算圖效能外,也加入了車輛模擬、粒子系統編輯器及64-bit支援。

使用UE2的遊戲較一代更多,除了Epic Games自家的《魔域幻境2》(Unreal II: The Awakening)、《魔域幻境之浴血戰場2003》(Unreal Tournament 2003),還有《生化奇兵》一代與二代(BioShock & BioShock 2)、聖者降臨(Advent Rising)、《殺戮空間》(Killing Floor)、《喋血街頭2》(Postal 2)及《縱橫諜海》(Tom Clancy's Splinter Cell)系列。

▲《魔域幻境2》盒裝封面。 

Unreal Engine 3

Unreal Engine 3(UE3)是目前Epic Games最新的遊戲引擎,應用平台也較二代更廣,包括PS3、Xbox 360、Wii U、PS Vita、Windows、Mac OS X、iOS、Android。雖然最早的UE3畫面在2004年出現,但直到2006年,《機甲閃擊》(RoboBlitz)與Epic Games自家的《戰爭機器》(Gears of War)問世後,UE3才正式被運用於遊戲。

UE3支援諸多現代遊戲常用的技術,包括64-bit高動態範圍算圖(High Dynamic Range Rendering, HDRR)、動態陰影、環境光遮蔽(Ambient Occlusion)、像素照明(Per Pixel Lighting)、補光(Fill Lighting)、動態高光照明(Dynamic Specular Lighting)、反射(Reflection)等。高動態範圍算圖可以使亮的的地方夠亮,暗的地方夠暗,同時又能保留這些地方的細節。像素照明能以像素為單位進行照明計算,這樣的算圖方式會比頂點照明(Vertex Lighting)更佳,因為頂點照明是以模型的頂點去計算光線,例如四方形有四個點,頂點照明便用這四個頂點運算,但四方形由很多像素組成,因此像素照明會比頂點照明來得好,不過這樣的方法比較消耗運算資源,顯示卡也必須支援像素照明,才看得出效果。

▲戰爭機器3 

UE3也運用了法線貼圖(Normal Map),這是現代遊戲常用的一種貼圖技術,用於遊戲中,可使低精度模型看起來如高精度模型般細緻。3D模型由多邊形構成,這些多邊形會有數個面。遊戲的3D模型面數不能太高,因為面數一高就要消耗更多的資源去運算,因此遊戲模型必須嚴格控制面數;但是面數過低,就無法呈現物體該有的細緻度,好比皺紋、衣服的皺摺等等。法線貼圖的優點是可以讓我們建立出高精度(面數)模型後,產生一張高精度貼圖,將此貼圖貼到低精度模型上,便能營造出高精度模型的質感。

▲Epic Citadel 

物理引擎方面,UE3以NVIDIA的PhysX物理引擎取代前一代的Karma引擎,可以模擬剛體、柔體、流體、彈簧、布娃娃系統、衣物飄動、群體移動等多種效果,另外也加入了FaceFX和SpeedTree。FaceFX可以從聲音檔快速製作出人物說話時的動畫,使人物講話時的唇型配合說話內容,也可微調人物的臉部表情;SpeedTree能快速做出逼真的樹木與各種植物。UE3支援Flash,有相當完善的內容瀏覽器,可以方便地瀏覽及管理遊戲物件。聲音的部分支援3D環繞音效及4.0、5.1聲道的播放,並能針對OGG格式音樂的壓縮和解壓縮做最佳化。Epic Games還釋出了UE3的免費軟體開發套件(Unreal Development Kit, UDK)供大眾下載,只要是非商業用途,皆可自由使用UDK。

種種新增和改進的強大功能,讓UE3成為最炙手可熱的遊戲引擎之一。運用UE3的遊戲不計其數,有《質量效應》(Mass Effects)系列、《榮譽勳章》(Medal of Honor)系列、《愛麗絲驚魂記:瘋狂再臨》(Alice: Madness Returns)、《沉默之丘:驟雨》(Silent Hill: Downpour)、《DmC:惡魔獵人》(DmC: Devil May Cry)。iOS的應用,則有《無盡之劍》(Infinity Blade)系列、《狂野之血》(Wild Blood)、《暗夜世界》(The Nightworld)、《暖槍》(Warm Gun)等,Epic Games自家的《戰爭機器》系列也全部採用UE3開發,他們並用UE3在iOS平台上製作了一款App:《Epic Citadel》,展現UE3在iOS上強悍的圖像表達能力。NASA也曾委託民間的遊戲開發公司,使用UE3開發太空模擬遊戲《Moonbase Alpha》。

▲無盡之劍2

Unreal Engine 4

Unreal Engine 4(UE4)雖然還未問世,官方釋出的技術展示影片已足以展現「未上演先轟動」的威力。進入第四代的Unreal Engine不僅要挑戰極致的遊戲畫面,也要挑戰下一代顯示卡的潛能。它有哪些新功能呢?首先是「即時動態全域光」(Real-Time Dynamic Global Illumination)。假設場景中打了一盞聚光燈(Spotlight),在沒有即時動態全域光的情況下,只會看到聚光燈照亮的地方,即時動態全域光可讓場景中的物體反彈光線,使場景中沒有直接受光的地方也能自然地被照亮。物體在反彈光線之餘,還能夠反彈光的顏色,使整個場景的照明更為自然。間接光源(Indirect Lighting)可使高反射物體作為第二光源照亮場景,且在反彈光線時,反彈出的光線會帶有其他物體的顏色。若拿起一個照亮的金屬球,移到場景中有紅色和藍色的地方,從金屬球上可看到紅藍物體的反射,且金屬球反彈到相鄰的牆上或物體上的光,也會帶有這兩種顏色。

動態光粒子系統(Dynamic Light Particle System),可用光源或場景中的物體照亮粒子。例如遊戲中有飄散的煙霧,當你用手電筒打光在煙霧上時,可以照亮煙霧,煙霧本身也會反映場景中其他物體反彈的光線。若煙霧在戶外,陽光或周圍環境反彈的光可以照亮煙霧,煙霧也會產生陰影。UE4支援GPU粒子(GPU Particles),這種粒子系統可在場景中使用極高的粒子數量,並可用粒子模擬各種現象。例如你想做華麗的冰、火魔法,便可使用數百萬的粒子在空中流動或排成各種形狀顯現魔法特效,還可以用力場指揮粒子的走向,使粒子做出你要的表現。UE4也加強了光線的算圖處理,使場景的光線變化更符合真實世界中人眼對光線的反應。比如走到房間內,房間裡的窗戶突然全部關閉,場景會瞬間變黑,接著再慢慢微亮,就像現實中我們的眼睛突然失去光線,眼前會一片漆黑,直到眼睛適應環境的黑暗後,才能夠再藉著微光看見東西。

▲此圖為即時動態全域光的示範,場景中的物體會反彈光線,照亮場景中的暗處,並反映出場景裡其他物體反彈的光線色彩。

▲此圖為間接光源的示範,球體會反射場景中其他物體,並能作為間接光源照亮場景,從球體反彈到周圍牆壁的光線也會帶有其他物體的顏色。 

無論是即時動態全域光、間接照明、 動態光線粒子系統,還是彷如人眼變化的光線處理,在UE4中都是即時運算和呈現,而且可在編輯器裡即時預覽,完全不需要等待。在編輯器中點選場景中的任何物體,就可以移動、編修物體,用面板更改物體屬性,也可以隨時進入程式碼視窗修改程式。編輯器中的藍圖(Blueprint),不但可讓開發者用視覺化的方式控制遊戲中發生的事件與動作,更可在模擬遊戲狀態時顯示程式碼的執行過程。例如場景中的雕像會在某個時刻自動變色,你進入遊戲模式查看變色的執行時,藍圖會以動畫顯示雕像變色執行到哪個階段、觸發了哪些事件,對於程式除錯大有幫助。

▲編輯器上方為預覽畫面,下方為藍圖窗格。進入遊戲模式時,藍圖中的連接線會出現流動的圓點動畫,表示目前程式執行到哪個階段。 

▲UE4的光線處理可模擬人眼對光線的反應。上圖為正常情形下的場景,當窗戶突然關閉時,場景會突然變黑,等眼睛適應黑暗後,才會慢慢看見右圖的景象。 

▲GPU粒子(GPU Particles)可使開發者在場景中用數百萬的粒子製作特效。

UE4驚人的光影處理與方便的程式控制,除了讓開發者能更快更簡便地締造遊戲,也宣示了遊戲畫面的未來。何時可以看到UE4的遊戲呢?最快也許2013年就能看到。目前Epic Games正在開發的遊戲《Fornite》將會採用UE4,屆時我們就可體驗UE4帶來的視覺震撼。 

▲Unreal Engine 4的技術展示片畫面。 

 

SpeedTree

SpeedTree由Interactive Data Visualization(IDV)公司開發,是一套專門處理植物的遊戲引擎,可以快速製作出各種漂亮且擬真的植物模型,以及植物隨風搖曳的動畫。如果你曾在3D動畫軟體試圖建造樹林,應該知道樹木是個不好處理的東西。若用建模的方式一棵棵建造,不但麻煩且緩慢;如果採用軟體本身的模組去製作,再將模型轉成多邊形(Polygon),往往模型的面數會太高,使場景負擔過重;即使面數不高,也不一定能做出理想的植物模型,導入遊戲引擎後也不好控制,SpeedTree就是一個可以解決這個問題的軟體。

IDV決定著手開發這樣的引擎其來有自。2000年時,他們接到一個建立虛擬高爾夫球場的案子,但他們找不到適合的植物軟體來做出他們想要的成果,最後他們自己寫了一支簡單的樹木程式解決問題。一年後,他們接到一間建築公司的案子,需要他們製作一段住宅和商業區的動畫,結果他們在市面上還是找不到可行的解決方案,便把先前自製的程式碼拿來改良,獲得了不錯的成果,自此便誕生了SpeedTree。一開始SpeedTree是作為3ds Max的外掛,後來成為獨立軟體,廣用於各類遊戲,如《上古捲軸4:遺忘之都》(The Elder Scrolls IV: Oblivion)《異塵餘生3》(Fallout 3)、《戰爭機器3》(Gears of War 3),也有應用於電影,如《阿凡達》(Avatar)、《公主與狩獵者》(Snow White and the Huntsman)。

▲SpeedTree編輯器

SpeedTree有Windows、Mac與Linux版本,開發出的成果可在Windows、Mac、PS3、Xbox 360與PS Vita上運用。它可以快速繪製出樹木的型態,只要先指定好要畫哪一類植物,再調整相關數值,很快就能繪製出漂亮且低面數的樹木模型。SpeedTree提供滑鼠與手繪建模,假設你習慣手繪,可以用手繪建模畫出樹木的分枝。例如先設定好要畫盆栽植物,從盆栽的位置往上畫出一條線,這條線馬上就會變成植物的枝幹,接著可在枝幹上用同樣方式畫出分枝,分枝上會自動長出該植物的葉子與小枝椏。畫出的枝幹上會有控制曲線和節點,可調整枝幹的彎曲程度。你也可以更改SpeedTree面板提供的各項參數,調整樹木分枝的生長方向、長度、高度、角度、密度、粗細,決定分枝要上揚或下垂,以及分枝在樹幹上的分布情形。由於分枝的生長是有層次的,在SpeedTree中可用成長節點控制不同層次的分枝,譬如第一層是樹幹,第二層是樹幹上的樹枝,第三層是樹枝上長出的枝椏。點選任一層節點,就可以控制那一層的枝幹成長,需要的話也可以調整單一分枝。由於樹木會隨著風向等環境因素改變生長樣貌,在SpeedTree中,可以用內建的Force功能來影響分枝的方向。例如將磁鐵工具拉到樹木旁,靠近磁鐵的樹枝就會順著磁鐵的方向生長,由此製作出更擬真的樹木模型。

▲SpeedTree在各場景的運用-森林小屋

▲SpeedTree在各場景的運用-高爾夫球場

除了樹木外,SpeedTree也可以製作花草和樹叢等植物,如草地、仙人掌、蕨類、藤蔓、天堂鳥、杜鵑花、捕蠅草、香菇等。SpeedTree提供線上資源庫,使用者可購買現成的模型加以運用,不過現成的模型價錢不便宜,還是靠自己建模為佳。由於SpeedTree能夠建造出相當寫實的自然景觀,除了應用於遊戲、電影領域,也曾用於Emergent Game Technologies為美國國防部開發的戰鬥模擬環境。知名的遊戲引擎Unreal Engine 3(UE3)也整合了SpeedTree的功能,讓開發者在使用UE3時,能做出需要的自然場景。

▲SpeedTree在各場景的運用-宮殿城牆

▲SpeedTree在各場景的運用-客廳