3D引擎

支持高層圖形軟體開發的工具

3D引擎是將現實中的物質抽象為多邊形或者各種曲線等表現形式,在計算機中進行相關計算並輸出最終圖像的演演算法實現的集合。 3D引擎就像是在計算機內建立一個“真實的世界”

分類


3D引擎根據是否能夠被主流計算機即時計算出結果分為即時3D引擎和離線3D引擎。PC機及遊戲機上的即時3D畫面就是用即時3D引擎運算生成的,而電影中應用的3D畫面則是用離線3D引擎來實現以達到以假亂真的效果。
3D引擎對物質的抽象主要分為多邊形和NURBS兩種。在即時引擎中多邊形實現已經成為了事實上的標準,因為任何多邊形都可以被最終分解為容易計算和表示的三角形。而在離線引擎中為了追求最好的視覺效果會使用大量的NURBS曲線來實現多邊形很難表現出的細節和靈活性。

定義


3D引擎作為一個名詞已經存在了很多年,但即使是一些專業的引擎設計師,也很難就它的定義達成一個共識。通常來說,3D引擎作為一種底層工具支持著高層的圖形軟體開發。你可以把它看成是對3D API的封裝,對一些圖形通用演演算法的封裝,對一些底層工具的封裝。我無法準確的定義3D引擎的含義和作用,因為針對不同的用戶和開發項目,3D引擎完成的功能可能都有不同。因此,我將從功能的角度來定義3D引擎,這種定義法也許能更確切的表達出一個3D引擎的真實含義。

功能


3D引擎最基本的功能應該包括:

數據管理

這裡的數據管理是一個比較廣泛的定義,不同的3D引擎也許會擁有其中一個或多個功能。這些功能包括:場景管理,對象系統,序列化,數據與外部工具的交互,底層3維數據的組織和表示。
場景管理:這個名稱相信對3D引擎有一定認識的朋友都很熟悉了。通常它和SceneGraph同時存在於一些架構方面的資料中。由於3D引擎可能會用來管理一些龐大的3D世界,在這個世界中物體與物體之間通常存在一些 相關/從屬/影響與被影響關係,如何組織這些關係,並確切的將這些關係與3D引擎的其他功能聯繫起來,就是場景管理需要完成的工作。常有朋友問我場景管理是用的哪種演演算法。從我的理解來講,場景管理是一種設計模式,而不是一個具體的演演算法,也許你會最終選擇BSP/QuadTree/Portal/...作為場景管理樹的結構,但是這些已經是實現層面的東西了,而且它們也遠遠不是場景管理的全部。因此我認為Scene Manager 和Scene Graph manager 這兩個概念還是分開理解比較好。
場景管理首先需要考慮如果表達場景中物體的關聯關係,這部分通常是由場景圖來實現的。通過一個一對多的樹形結構已經可以滿足要求,當然考慮到數據層的共享和維護,允許子樹進行Clone也是前期設計時需要考慮的一個方面。再此之後,就需要考慮物體之間材質的繼承關係,動態環境如何嵌入到你選擇的場景圖中。在一個考慮到交互和觸發機制的引擎中,還需要考慮物體之間如何發送消息。(比如一個結合了物理引擎的場景)。實際上在整個引擎中你所涉及到的各種演演算法和設計,都或多或少的會和場景管理髮生聯繫。比如在一個實現動態光影的引擎中,物體之間如何實現相互遮擋,光源的影響範圍如何在場景圖上繼承,都是在設計時需要考慮的問題。

渲染器

之所以要說是合理的渲染器,是因為一個引擎的渲染能力是由多方面決定的。比如一款以實時遊戲作為目標的遊戲,會選擇基於光柵化的渲染演演算法。在這種設計前提下,幾何體一級的數據不會過於詳細,例如物體表面的BRDF,折射率,紋理坐標空間的變化率,切線空間的變化率(當然隨著硬體能力的提升和Shader能力的發展,這些數據也會出現在一些比較高級的遊戲引擎中),這時候即使你在設計初期就考慮到這些數據需求,並將它們表現在了Render中,最後也不會有任何意義。

交互能力

簡單的說,就是開發工具。任何一款3D引擎如果沒有開發工具都不能稱為是完整的。這些開發工具可能是一些文件轉換器,場景編輯器,腳本編輯器,粒子編輯器....
有了上面3種功能,就可以稱為3D引擎了。當然,如果要開發一款功能強大的引擎,那還有很多很多的功能需要滿足,其中一些功能將在後面的章節中有詳細的描述。

發展歷程


引擎誕生

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年為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》同時代的引擎經過不斷的更新,至今依然活躍在遊戲市場上,絲毫沒有顯出老邁的跡象,實屬難得。

授權方式


3D引擎有之分,商業的遊戲引擎需要支付一定的費用才能使用。而開源遊戲引擎可以將源代碼拿來開發自己的遊戲。
商業遊戲引擎的費用一般由以下一項或者幾項組成:
(1) 基本的費用:引擎開發者購買引擎時,價格可能隨著引擎的版本的不同而不同。
(2) 基於賣出遊戲數量的版稅(royalty)。尤其是那些中間件公司,例如:EPIC公司,引擎費用由兩種支付方式:一種是相對低廉的購買引擎的費用加上你賣出產品數量的版權費,另一種是較高的購買引擎的費用而不用支付附加的版權費。
(3) 支持多平台(Linux、PS2、Xbox)功能的費用。遊戲要想支持的平台越多,你要支付的費用就越多。 (4) 依據有多少個開發者來使用這個遊戲引擎開發工具來收費。有些引擎創作者要求購買引擎的公司依據將要使用這個引擎開發環境的開發者的個數來支付費用。
(5)引擎的更新或者服務產生的費用。
(6) 有些引擎需要特定的昂貴的其他軟體的支持。例如KA3D需要非常昂貴的3D建模工具3DSMax來產生遊戲的Level。另一個例子是,虛幻引擎只提供商業軟體的3DS MaxMaya的導出工具。
(7) 有些引擎本身是免費的,但是當結合FMod(sound library)其他的庫使用時,當你進行商業遊戲的開發,你將支付庫的開發者2000美元。