第1章 引擎的紛爭 (感謝大食堂對本章的校驗)
(當時為了出版,刪除了很多廢話和白話、網路用語,修改了不少有語病的句子,篇幅少了不少,好多表達個人觀點的也都和諧掉了)
本章目錄
第一章 引擎的紛爭 1.什麼是遊戲引擎2.那些年我們認識的引擎..3.引擎和遊戲.
遊戲引擎究竟是什麼? 恐怕就算資深行業人士也很難三言兩語說清楚。本書開始,我們幫大家敲開遊戲引擎的大門,聊聊引擎的來龍去脈。
1.1 什麼是遊戲引擎
什麼是遊戲引擎?其實這很難給出明確的定義。在很多遊戲的宣傳中,我們總會聽到對遊戲引擎的推崇。絢麗的特效,流暢的體驗,似乎這些都是遊戲引擎的功勞。在遊戲玩家看來 ——遊戲畫面的表現力越好、遊戲場面的震撼程度越大、遊戲體驗的真實感越強,那麼底層的遊戲引擎就可能越厲害。
看看業界給出的一些定義。
百度百科(基維百科亦然 ):遊戲引擎是指一些已編寫好的可編輯電腦遊戲系統或者一些互動式實時圖像應用程序的核心組件。這些系統為遊戲設計者提供各種編寫遊戲所需的各種工具,其目的在於讓遊戲設計者能容易和快速地做出遊戲程式而不用由零開始。大部分都支持多種操作平台,如Linux、Mac OS X、Windows。遊戲引擎包含以下系統:渲染引擎(即「渲染器」,含二維圖像引擎和三維圖像引擎)、物理引擎、碰撞檢測系統、音效引擎、腳本引擎、電腦動畫引擎、人工智慧引擎、網路引擎以及場景管理引擎。這段改的沒有必要,這是百度百科和維基百科的定義。
根據上述定義,在很多人看來,遊戲引擎就是把很多現有的零部件組裝起來,如同組裝手機,CPU、屏幕、攝像頭、主板等等都是別人的,按照自己喜歡樣式組裝一下就好;但這解釋對真正的業內人來說還有太多的欠缺。
下面再看看《Game Engine Architecture》(中文名:遊戲引擎架構)是怎麼說的:
The line between a game and its engine is often blurry.Some engines make a reasonably clear distinction,while others make almost no attempt to separate the http://two.In one game,the rendering code might "know " specially how to draw an http://Orc.In the rendering engine might provide general-purpose material and shading facilities,and "orc-ness" might be defined entirely in data.No studio makes a perfectly clear separation between the game and the engine,which is understandable considering that the definitions of these two components often shift as the games design solidifies.
原汁原味,不再做翻譯,留給大家自己去感悟和體會。
似乎遊戲界引擎大師也無法真正給引擎下一個明確定義,雖然大家都知道什麼是遊戲引擎,卻很難用三言兩語把它表述出來。下面我將嘗試用比喻的方式讓大家得到這種感覺:「哎呀,我似乎知道它是什麼了」。
假設我們穿越回20世紀80年代,我們的手中已經有整套的FC《超級馬里奧》代碼。現在我要開發另一款FC《冒險島》(如圖1-1所示)。此時我們需要從零開始嗎?顯然這兩款遊戲有著太多共性,都是一個放蕩不羈的少年在橫版捲動的地圖上蹦來蹦去,都可以踩死怪物。當然也有不同,畫面不同,聲音不同,關卡不同……但對於共同的功能,聰明的我們當然會重用一些現成的代碼了。而這種蹦蹦跳跳橫板捲動遊戲模板的通用性太好了,目前遊戲界對它的需求量也非常之大,所以我們決定把這種特定類型遊戲的核心功能提煉出來,去給那些也要開發這種遊戲的人使用,當然不是免費的,我簡直太聰明了。
圖1-1《超級馬里奧》與《冒險島》
後來,蹦蹦跳跳的遊戲逐漸沒落,即時戰略遊戲開始興起,有人要開發即時戰略遊戲《紅色警界》(如圖1-2所示)。這時候我慌了,我死皮賴臉地想把原來的代碼送給那些開發者,但這些代碼最終都躺進了垃圾回收站。
圖1-2 《紅色警界》遊戲畫面
這時候我明白了,雖然我的遊戲模板代碼能渲染2D動畫、播放聲音、處理滑鼠鍵盤的按鍵響應,卻無法用於即時戰略遊戲。因為玩家們想要的是多人聯網,這就要求程序能夠處理大量同屏2D動畫,能夠快速編輯適應即時遊戲的關卡,能夠運行無法與玩家和平相處的AI,甚至可以讓遊戲運行在不同的地方,比如PS1和PC。可是我原有的遊戲模板根本做不到這些。
直到有一天我認識了卡馬克和他的一款叫《DOOM》(中文名《毀滅戰士》)的遊戲(如圖1-3所示),這簡直就是PC(DOS系統)遊戲史的一個里程碑。這款遊戲漂亮的3D畫面,讓我在每個中午都和同學在電腦房(很遺憾,那時只有區域網)火拚。
而技術狂人卡馬克追求是無止境的,他之後靠他的三大法寶——冰箱、披薩和電腦不但寫出了全3D的遊戲《QUAKE》,而且還支持當時最牛的3D加速卡,人們再次被震驚了。崇拜大神的人們用《QUAKE》的代碼製作了新的射擊遊戲——《counter-strike》,也就是家喻戶曉的CS。《QUAKE》的動畫、渲染的程序也被拿來繼續開發其他遊戲,因為大神傑作的精髓並非凡人所能輕易複製。
圖1.3《Doom》截圖
故事總歸是故事,但對於《冒險島》來說,被複用的那部分《超級馬里奧》代碼其實就是最早的遊戲引擎。不過它的技術沒那麼先進,功能也不甚強大,又缺乏順應潮流的更新,以致最終的銷聲匿跡。但卡馬克的代碼則不同,它超越了當時人們的想像力。他不但為射擊遊戲制定了完整方案,而且實現的代碼功能強大。其高度的複雜性和健壯性,甚至讓很多人樂於用其中的某些模塊去開發非射擊類的遊戲,不但節省開發時間而且遊戲健壯性也不錯。
這是也一個簡短的遊戲引擎發展史。
有這樣一個問題:我們為什麼要如此辛苦地探討引擎的定義?每個人心中都有自己的哈姆雷特,對錯已經沒那麼重要。開發屬於我們自己的遊戲,哪個引擎更強大,什麼引擎更適合,這才是遊戲引擎的真正意義所在。
1.2 那些年我們認識的引擎
那麼關於引擎的第二個紛爭就是:到底用哪個引擎。
從卡馬克的時代開始,國外就有了關於遊戲引擎的概念。根據遊戲需求的不同,遊戲廠商要麼自己開發引擎,要麼購買商業引擎。但真正的商業引擎不但必須有規範的開發流程,便於定製化,同時還要有後續的技術支持來幫助購買引擎的人解決遇到的各種問題,保障購買者能夠做出想要的功能。而能真正實現商業化的引擎也僅有少數幾款。
商業引擎數量少,加之每款引擎的授權費用高昂,所以很多團隊更願意自己開發引擎。而
幾乎每個知名遊戲都有自己的引擎,比如育碧的《刺客信條》、EA的《戰地》、科樂美的《實況足球》。但自家的引擎同樣需要不斷迭代,保證跟上時代的發展,否則落後的遊戲引擎終究會被淘汰。
在曾經那個國內技術匱乏的年代,Gamebryo和Ogre兩款引擎算是國內最早開始,Gamebryo是最多使用的商業引擎,Ogre是用的最多的非商業引擎。
現如今,除了傳統大廠商在自己迭代引擎外,大部分廠商都選擇了商業引擎。國內廠商更是如此,在3D遊戲上的選擇都很明確,手機端用Unity,PC端用unreal(據我了解,只有網易的自主開發引擎搞得風生水起)。這些引擎不同於以往特定類型的遊戲引擎,他們耦合性很低,通用性更好。
圖1-4 那些年風光的引擎
遊戲引擎從曾經的百家齊放,到現今的大局已定。自研引擎是否已是昨日黃花?
其實這個問題沒有明確的答案,
如果你的團隊有實力,時間相對充足,已經成功開發出遊戲,那麼迭代自研發當然可以。但如果項目時間緊,要開發的遊戲類型和團隊已有引擎類型大相徑庭,改動成本大於學習其他商業引擎成本,那麼不妨去用相對成熟商業引擎。
1.3 引擎和遊戲
這裡並不是講遊戲和引擎的關係,而是開發引擎是否一定要依託於遊戲。開發過遊戲引擎的人,或多或少都想過這個問題。傳統的遊戲引擎都是依託遊戲一代一代迭代發展起來的,對於遊戲公司來講,最終目的是做出遊戲,所以遊戲引擎的目標是為專屬遊戲服務也就顯而易見。遊戲需要什麼特性,引擎就提供什麼功能。商業引擎也不外如是,
如果一款遊戲引擎沒有支撐過任何成功遊戲作品,大家是不敢去用的。畢竟使用遊戲引擎的人一般不是專業引擎開發人員,問題出現後很難去快速解決底層問題。就連unreal這樣的引擎也要靠自己的《虛幻競技場》來撐門面。目前大部分引擎都是內部使用,畢竟誰寫的誰清楚,出了問題也能第一時間搞定。
但是國外遊戲引擎的開發氛圍要好於國內,遊戲引擎技術並沒有完全被遊戲牽著鼻子走,引擎技術也在反過來逐步推動遊戲的發展。
遊戲引擎的開發者希望能安穩的專註於引擎技術的開發,不過度依賴遊戲而把引擎自身搞得一團糟。
不過到目前為止,還沒有哪款引擎是真正的萬能架構:
- 適合所有類型的遊戲,所有的的遊戲功能
- 遊戲設計者想到的各種離奇古怪的想法通過它就都可以簡單實現出來
- 極高的效率——事實證明優化最好的引擎都是針對遊戲本身的。
引擎開發者心目中的理想引擎或者說好多遊戲公司的自研引擎目標:底層維護分離,具有統一的架構,可以通過底層為不同遊戲提供不同的支持,引擎技術人員盡最大可能把遊戲需要的技術策略都完好的集成到引擎中,做到一款引擎可以服務多款不同類型的遊戲。
理想和現實往往事與願違,大部分遊戲就是為了一款遊戲而生,最更本的原因就是人的成本(這裡成本是指技術人員能力,管理者的能力,招聘,設計遊戲能力,營銷等等和人價值有關的東西)。國外unreal算是做的比較好的,unreal3是比較成功的遊戲引擎,用它開發各種類型的遊戲有好多,在那個時候unreal算是人力成本相對較低的引擎,國外開發人員的經驗積累使得他們大多能把控unreal3,而國內用unreal3則算是一敗塗地,根本原因就是人的成本,很少人能把控它(這裡不談市場因素)。
所以那個時候,理想引擎的開發不得不依賴遊戲。但事無絕對,Unity的出現,以一個不可能的例子活生生的站在你面前,它傳奇般的解決了人的成本,傳奇般實現了當時很多大公司都不敢去做的事情 。
拋開Unity易用性不說,它真正實現了引擎架構組件化方式,更重要的是它不用很多資源實現了全球人都在為它開發功能,使用終極方式解決人成本問題,這其實不是一個技術問題,這是在手機遊戲浪潮下,創造的時勢英雄。即使有人曾經想過讓很多人一起開發引擎,但誰又會想過這會成為現實,Unity自己沒有耀眼成果的遊戲,它以自己方式狠狠刪了傳統引擎巨頭的耳光,現在你幾乎可以在Unity商店找到任何你想要的功能,比如:體素地形網格化、flow water map、IK、material tree、技能編輯器,我們組裡還開發了一個類似unreal4 藍圖的工具,甚至大量的特效、模型、貼圖、動畫資源、鋪天蓋地的論壇、教程,沒有任何問題你在網上找不到答案的,Unity只提供底層的基礎功能,大部分牛叉功能都是全世界人們幫助它完成的,在它自己獲益的同時,開發者自己也在獲益。
Unity的出現幾乎變動了整個引擎的格局,它的開放,它的易用,它的開發流程,都完全超過那時人們的認知,這導致一些陳舊設計觀念的商業引擎加速的死去,有能力轉變的也只有unreal,但實際上unreal沒有一下子徹底轉變,它龐大的代碼庫,讓它不能一下子去轉變,它以快速的迭代去慢慢追趕,Unity更強大的地方在於擴展,所有人都可以給它定製功能,這逼迫unreal不得不開源,開源的好處會讓更多人關注它,關注的人多了,也解放了他們支持服務的人力成本,好多問題都可以輕鬆的在互聯網上搜索到,這樣好多人也可以給它定製更多功能的插件,讓它的社區也更加壯大。
推薦閱讀:
※035.鋼背獸
※豆瓣高分的《哈佛經典談判課》:談判,其實是一場「權力的遊戲」
※育碧新遊戲彩蛋?也許看門狗三要出了
※為什麼遊戲中有那麼男的愛玩女號?
※為什麼大家說迷你世界抄襲我的世界?