敲開遊戲引擎的大門,聊聊引擎的來龍去脈

遊資網發表於2020-02-19
遊戲引擎究竟是什麼?恐怕就算是資深行業人士也很難三言兩語說清楚。讓我們一起來敲開遊戲引擎的大門,聊聊引擎的來龍去脈。

1什麼是遊戲引擎

什麼是遊戲引擎?其實這很難給出明確的定義。在很多遊戲的宣傳中,我們總會聽到對遊戲引擎的推崇。絢麗的特效,流暢的體驗,似乎都是遊戲引擎的功勞。在遊戲玩家看來,遊戲畫面的表現力越好,遊戲場面的震撼程度越大,遊戲體驗的真實感越強,底層的遊戲引擎就可能越強大。

看看業界給出的一些定義。

遊戲引擎是指一些已編寫好的可編輯電腦遊戲系統或者一些互動式實時影象應用程式的核心元件。這些系統為遊戲設計者提供編寫遊戲所需的各種工具,其目的在於讓遊戲設計者能容易和快速地寫出遊戲程式而不用從零開始。大部分遊戲引擎都支援多種操作平臺,如Linux、Mac OS X、Windows。遊戲引擎包含渲染引擎(即“渲染器”,含二維影象引擎和三維影象引擎)、物理引擎、碰撞檢測系統、音效引擎、指令碼引擎、電腦動畫引擎、人工智慧引擎、網路引擎以及場景管理引擎。

根據上述定義,在很多人看來,遊戲引擎負責把很多已有的零部件組裝起來,如同組裝手機,CPU、螢幕、攝像頭、主機板等都是別人生產的,手機廠商按照自己喜歡樣式組裝一下就好了。

下面再看看Game Engine Architecture(中文書名《遊戲引擎架構》,ISBN是978-7-121-22288-7)是怎麼說的:

通常,遊戲和其引擎之間的分界線是很模糊的。一些引擎有相當清晰的劃分,一些則沒有嘗試把二者分開。在一款遊戲中,渲染程式碼可能特別“知悉”如何畫一隻妖獸(Orc);在另一款遊戲中,渲染引擎可能只提供多用途的材質及著色功能,“妖獸”可能完全是用資料去定義的。沒有工作室可以完美地劃分遊戲和引擎。這不難理解,因為隨著遊戲設計的逐漸成形,這兩個元件的定義會經常轉移。

似乎遊戲界引擎專家也無法真正給引擎下一個明確定義,雖然大家都知道什麼是遊戲引擎,卻很難用三言兩語把它表述出來。本節嘗試用比喻的方式把它講清楚。

假設我們穿越回20世紀80年代,我們的手中已經有整套的FC遊戲《超級馬里奧》(見圖1(a))的程式碼,現在我們要開發另一款FC遊戲《冒險島》(如圖1所示)。此時我們需要從零開始嗎?顯然,這兩款遊戲有著太多共性,都是一個遊戲角色在橫板捲動的地圖上蹦來蹦去,都可以踩死怪物。當然,也有不同,畫面不同,聲音不同,關卡不同……但對於共同的功能,聰明的我們當然會重用一些現成的程式碼。而這種橫板卷軸遊戲模板的通用性非常好,目前遊戲界對它的需求量也非常大,所以我們決定把這種特定型別遊戲的核心功能提煉出來,供那些也要開發這種遊戲的人使用。

敲開遊戲引擎的大門,聊聊引擎的來龍去脈
(a)

敲開遊戲引擎的大門,聊聊引擎的來龍去脈
(b)圖1《超級馬里奧》與《冒險島》遊戲畫面

後來,蹦蹦跳跳的遊戲逐漸沒落,即時戰略遊戲開始興起,有人要開發即時戰略遊戲《紅色警界》(如圖2所示)。

敲開遊戲引擎的大門,聊聊引擎的來龍去脈
圖2《紅色警界》遊戲畫面

雖然遊戲模板的程式碼能渲染2D動畫、播放聲音、處理滑鼠鍵盤的按鍵響應,但無法用於即時戰略遊戲。因為玩家們想要的是多人聯網,這就要求程式能夠處理大量同屏2D動畫,能夠快速編輯適應即時遊戲的關卡,能夠執行無法與玩家和平相處的AI,甚至能夠讓遊戲執行在不同的地方,比如PS1和PC。可是原有的遊戲模板根本做不到這些。

直到有一天,卡馬克設計了一款叫《DOOM》(中文名《毀滅戰士》)的遊戲(如圖3所示),這簡直就是PC(DOS系統)遊戲史的一個里程碑。這款遊戲漂亮的3D畫面,讓很多遊戲愛好者在電腦房(很遺憾,那時只有區域網)“火拼”。

敲開遊戲引擎的大門,聊聊引擎的來龍去脈
圖3《Doom》遊戲畫面

卡馬克又寫出了全3D的遊戲《QUAKE》,而且支援當時最強大的3D加速卡,人們再次被震驚了。崇拜卡馬克的人們用《QUAKE》的程式碼製作了新的射擊遊戲——《Counter-Strike》,也就是家喻戶曉的CS。《QUAKE》的動畫、渲染的程式也被拿來繼續開發其他遊戲。

故事總歸是故事,但對於《冒險島》來說,被複用的那部分《超級馬里奧》程式碼其實就是最早的遊戲引擎。不過它的技術沒那麼先進,功能也不甚強大,還缺乏順應潮流的更新,以致最終銷聲匿跡了。但卡馬克的程式碼則不同,它超越了當時人們的想象力。他不但為射擊遊戲制定了完整方案,而且實現的程式碼功能強大。其高度的複雜性和健壯性,甚至讓很多人樂於用其中的某些模組去開發非射擊類的遊戲,結果不但節省開發時間而且遊戲健壯性也不錯。這幾乎是一部簡短的遊戲引擎發展史。

我們為什麼要如此辛苦地探討引擎的定義?每個人心中都有自己的哈姆?雷特,對錯已經沒那麼重要。開發屬於我們自己的遊戲,瞭解哪個引擎更強大以及什麼引擎更適合,才是研究遊戲引擎的真正意義所在。

2那些年我們認識的引擎

關於引擎的第二個爭論就是到底用哪個引擎。

從卡馬克的時代開始,國外就有了關於遊戲引擎的概念。根據遊戲需求的不同,遊戲廠商要麼自己開發引擎,要麼購買商業引擎。但真正的商業引擎不但必須有規範的開發流程,以便於定製化,而且要有後續的技術支援來幫助購買引擎的人解決遇到的各種問題,以保障購買者能夠實現想要的功能。但能真正實現商業化的引擎也僅有少數幾款。

商業引擎數量少,加之每款引擎的授權費用高昂,所以很多團隊更願意自己開發引擎。而幾乎每一款知名遊戲都有自己的引擎,比如育碧的《刺客信條》、EA的《戰地》、科樂美的《實況足球》。但自家的引擎同樣需要不斷迭代,以保證跟上時代的發展,否則落後的遊戲引擎終究會被淘汰。

在國內曾經技術匱乏的那個年代,Gamebryo和Ogre算是最早的兩款引擎,Gamebryo是用得最多的商業引擎,Ogre是用得最多的非商業引擎。現如今,除了傳統大廠商在自己迭代引擎之外,大部分廠商選擇了商業引擎。國內廠商更是如此,在3D遊戲引擎的選擇上都很明確,手機端用Unity,PC端用Unreal Engine。這些引擎不同於以往特定型別的遊戲引擎,它們耦合性很低,通用性更好。那些年風光的引擎如圖4所示。

敲開遊戲引擎的大門,聊聊引擎的來龍去脈
圖4那些年風光的引擎

遊戲引擎曾經百花齊放,如今則大局已定。那麼自研引擎是否已是明日黃花了呢?

其實這個問題沒有明確的答案。如果你的團隊有實力,時間相對充足,已經成功開發出遊戲,那麼迭代自研發當然可以;但如果專案時間緊,要開發的遊戲型別與團隊已有的引擎型別大相徑庭,改動成本高於學習其他商業引擎的成本,那麼不妨使用相對成熟的商業引擎。

3引擎和遊戲

這裡並不是要講遊戲和引擎的關係,而是討論開發引擎是否一定要依託於遊戲。開發過遊戲引擎的人,或多或少地想過這個問題。傳統的遊戲引擎都是依託遊戲一代一代迭代發展起來的。對於遊戲企業來講,最終目的是做出遊戲,所以遊戲引擎的目標是為專屬遊戲服務。遊戲需要什麼特性,引擎就提供什麼功能。商業引擎也是如此,如果一款遊戲引擎沒有支撐過任何成功遊戲作品,大家是不敢去用的。畢竟使用遊戲引擎的人一般不是專業引擎開發人員,出現問題後很難快速解決底層問題。就連Unreal Engine這樣的引擎也要靠自己的《虛幻競技場》來撐門面。目前,大部分引擎在內部使用,畢竟誰寫的誰清楚,出了問題也能第一時間解決。

但是國外遊戲引擎的開發氛圍要好於國內,遊戲引擎技術並沒有完全被遊戲牽著鼻子走,引擎技術也在反過來逐步推動遊戲的發展。遊戲引擎的開發者希望能持續地專注於引擎技術的開發,不會因過度依賴遊戲而把引擎自身搞得一團糟。

不過到目前為止,還沒有哪款引擎是能夠滿足以下幾點要求的真正的萬能架構:

適合所有型別的遊戲、所有的遊戲功能;

可以簡單實現遊戲設計者想到的各種離奇古怪的想法;

極高的效率——事實證明,優化最好的引擎都是針對遊戲本身的。

引擎開發者心目中的理想引擎或者說許多遊戲企業的自研引擎目標是:底層維護分離,具有統一的架構,可以通過底層為不同遊戲提供不同的支援。為此,引擎技術人員盡最大可能把遊戲需要的技術都完好地整合到引擎中,做到一款引擎可以服務多款不同型別的遊戲。

然而,理想和現實往往有一定的距離,大部分引擎就是為了一款遊戲而生,最根本的原因就是人的成本(這裡成本是指技術人員能力、管理者能力、設計遊戲能力、招聘、營銷等與人的價值有關的東西)。國外Unreal Engine算是做得比較好的,Unreal Engine 3是比較成功的遊戲引擎,用它開發的各種型別的遊戲有許多,Unreal Engine算是人力成本相對較低的引擎,國外開發人員的經驗積累使得他們大多能把控Unreal Engine 3,而國內用Unreal Engine 3則是一敗塗地,根本原因在於人的能力差異,很少人能把控它(這裡不談市場因素)。

所以理想引擎的開發不得不依賴遊戲。但事無絕對,Unity傳奇般地解決了人的問題,傳奇般地實現了當時很多大企業都不敢做的事情。

拋開Unity易用性不說,它真正實現了引擎架構的元件化。更重要的是,許多人在為它開發功能,使用終極方式解決人的成本問題。這其實不是一個技術問題,即使有人曾經想過讓很多人一起開發引擎,但誰又會想過這會成為現實呢?Unity自己沒有耀眼的遊戲。現在你幾乎可以在網路上找到任何想要的內容,比如體素地形網格化、水流方向對映、反向動力學(Inverse Kinematics,IK)、材質樹、技能編輯器,甚至大量的特效、模型、貼圖、動畫資源,鋪天蓋地的論壇、教程。Unity只提供底層的基礎功能,大部分強大的功能是世界各地的人幫助它完成的,在它自己獲益的同時,開發者也在獲益。

Unity的出現幾乎改變了整個商業引擎的格局,它的開放,它的易用性,它的開發流程,都完全超過當時人們的認知,導致一些設計觀念陳舊的商業引擎加速地消亡。有能力轉變的也只有Unreal Engine,雖然其龐大的程式碼庫讓它不能一下子實現轉變,但它以快速的迭代不斷追趕。Unity更強大的地方在於擴充套件,所有人都可以給它定製功能,這逼迫Unreal Engine不得不開源。開源的好處會讓更多人關注它,給它定製更多的功能外掛,許多問題可以輕鬆地在網際網路上搜尋到解決方案,這讓它的社群也更加壯大。

本文摘自《遊戲引擎原理與實踐 卷1 基礎框架》

敲開遊戲引擎的大門,聊聊引擎的來龍去脈
遊戲引擎架構設計教程書籍

騰訊遊戲引擎設計師基於多年經驗和積累的力作

詳盡示例,詮釋遊戲引擎製作與開發技術,Milo等遊戲業內知名專家鼎力推薦

本書著重講解遊戲引擎的基礎知識和工作原理,並結合配套的遊戲引擎示例和詳盡的程式碼,介紹遊戲引擎開發的技術細節。

本書是第1 卷,主要涉及遊戲引擎基礎架構。全書共13 章,分別介紹遊戲引擎原理、引擎和引擎編輯器、底層基礎架構、資料結構、數學庫、引擎初始化、應用程式架構、物件系統、資源管理、引擎設計的哲學理念、場景管理、靜態模型匯入和LOD 技術。本書未涵蓋的遊戲引擎話題將在卷2 中講解。本書適合有一定的遊戲開發基礎和經驗並且想要系統學習遊戲引擎原理和引擎開發技術的讀者閱讀。

來源:程式設計師書屋
原地址:https://www.toutiao.com/a6794335454561829379/

相關文章