如何在 5 分鐘內成為游戲引擎的行家里手?
本文您將了解到:
-
你所熟悉的游戲到底是怎樣做出來的?
-
如何在 5 分鐘內大體了解游戲制作的流程?
-
游戲發展為今天的樣子到底經歷了什么?
-
游戲制作中到底有哪些很重要的概念?
是不是應該聊點輕松的心靈雞湯。No……俺們只認價值的有用的好貨。
今兒,VR 價值論要分享的是一篇有意思的技術貼,聊一聊 “如何從游戲開發的角度理解游戲引擎架構”。
由于今天的貨實在太干了,價值君想對一般的群眾們說一句,飄過就好啦~
不過,如果你是一個對做游戲感興趣,但是又沒有概念的小白;或者對制作游戲有一定的基礎,但是對整體邏輯并不清晰的中白,請務必駐足觀望,同時完成兩個動作:收藏,精讀。然后,成為行家里手。
今天的干貨很有意思,能把游戲引擎的梳理得如此老少皆宜,不失干貨,還能在字里行間散發出一股濃濃的逗比氣場,除了這位大牛,也是沒 Sei 了
本期由來自資深 3D 場景美術師對 VR 價值論進行獨家分享: 游戲的制作流程到底是如何一步步變成了今天的模樣?
撰文:51VR 資深 3D 美術師——發瘋的然然,編輯整理:VR 價值論
作者心里話:
以前曾做過關卡美術,以關卡美術的角度看整體的游戲制作流程,其實很有價值。干貨之旅開啟之前,先來認識一下目前比較流行的游戲引擎 UE4。
1、啥叫 UE4?
暈了。
徹底暈了。
對,沒錯,這玩意一點看起來一點都不親和,不過應該能看得出來,這東西是一款軟件。
2、泛聊一下業內的引擎軟件
準確來說,上圖這個軟件是一種游戲引擎。
要想進入游戲行業,一定會接觸到游戲引擎,只要去看過招聘信息的,應該都會發現,很多公司都會要求會用 Unity3D、CE3、UE4、Cocos2d-x。這些還都是商業引擎,如果有心,還能稍微能接觸到一下。而且既然是商業的,靠這東西賺錢,他就會相對比較親和易用。
有商業的就有非商業的,像 EA 的寒霜、育碧的 ANVIL、暴雪的銀河、KONAMI 的 FOX,還有像 SQUARE-ENIX 這種變態的雜七雜八工作室拼起來的公司,那引擎就更亂了,尤其是暴雪的銀河引擎,其實只要買了《星際爭霸 2》游戲就能接觸到,《星際 2》的地圖編輯器就是銀河引擎的縮水版。
用過的都知道,那玩意其實一點都不好用。但是你要想去暴雪工作,學會用銀河引擎是早晚的事。
雖然我沒有去核實,不過我敢說《風暴英雄》也是拿這東西做的。
不過上面這些大廠還都算是有良心的,他們的引擎也算是比較易于上手的,只不過有些概念需要轉換一下。當然也有一些游戲廠商,他們自主研發的引擎就是內部使用,人壓根就不靠這東西賺錢,不僅界面丑的一塌糊涂,而且功能……別說外行了,內行想搞明白都很費勁。
不過相信我,如果要做游戲,這東西是吃飯的家伙,弄明白是遲早的事。
3、最早的引擎
好吧,不嚇唬人了,這東西其實不難理解,所以進入正題。我們先看一個相當早期的游戲。
這款游戲怎么玩應該想象的來吧,兩個控制桿,一個控制左邊的白杠杠,一個控制右邊的白杠杠,如果對方沒接住那個白點點,自己就得一分。
要想做出這款游戲,也得需要一個引擎吧,雖然這款游戲問世的時候我爸我媽還是陌生人呢,不過游戲很簡單,我們還是可以分析出來這款游戲怎么做的。
分解一下:
白杠杠是要靠人控制的,那里面肯定有個程序是說,我控制桿向左,白杠杠就向左,我控制桿向右,白杠杠就向右。
那么取個名字吧,我們把這個白杠杠叫做角色。當這個白點點和白杠杠接觸的時候,會反彈回去對吧,人只能間接的控制這個白點點,那我們給這個白點點取一個名字,叫做道具。
這個黑底和中間白色的虛線只是一個示意的作用對吧,不牽扯程序,那我們把這個東西取個名字,叫做場景。上面的兩個數字是為了給玩家展示結果的,也是一個單獨元素,那我們也給他取個名字,把這個東西叫做 UI。
如果白點點和白杠杠一接觸,可以發出一個 “當” 的聲音,那我們就把這個 “當” 的聲音叫做音效。
這時候我們看一下這時候引擎這個軟件是個啥玩意:
-
可以做一個角色;
-
可以做一個道具;
-
可以做一個場景;
-
可以做一個 UI;
-
可以加音效;
-
可以用計算機語言把這個邏輯串起來;
-
有一個可以執行上面 6 個功能的界面。
能達到以上 7 點的這么一個軟件就是最早的引擎了。雖然事實執行上沒有我講的這么簡單,因為那時候的計算機語言還沒有這么高級,不過理解這個過程是沒有問題的。用圖形表現出來就是:
4、萬惡的技術革命
可是!后來計算機牛逼了,一個畫面上可以處理更多的像素了!下面我們看一下俄羅斯方塊,通過他理解一下引擎。
我知道俄羅斯方塊剛出來的時候比這個畫面土多了,找這個例子只是為了好理解。
我們都知道這東西只要湊夠一行就能消掉對吧,它湊夠一行消掉那是程序員干的活。但它靠判定什么樣的東西湊夠一行呢?是一個 “被填充的格子” 湊夠一行就可以消掉。
一個這樣的方塊,我們完全可以理解為他是有 4 個 “被填充的格子” 的塊塊,那個黑黑的沒有沾滿的地方不理他,反正就是空的嘛。
那從邏輯上來說,這兩張圖完全沒區別的兩個東西,對吧。
那也就是說,這兩張圖完全沒區別的兩個東西,對吧。所以說這個塊塊占據的地方,用什么東西展示是無所謂的,沒錯吧?
因此人們就引入了一個概念,這個塊塊占據的區域,這個區域,不是塊塊哦,是這個區域!老外給這個區域取了一個名字叫做 Collision,國人翻譯過來叫做碰撞體。
然而有了這個概念還不夠,因為這個 Collision 是和他對應的圖片相關聯的,所以他們把圖片加 Collision 合在一起打了一個組,取了個名字叫做 Entity。
這個圖片最早可能使用 Photoshop 做的,也有可能是拿 Windows 自帶的那個畫圖做的,這都不重要。總之有一個圖片,有一個叫做 Collision 的數據,打包起來叫做 Entity。
然后人們覺得這個概念相當好用,而且從理論上完全可以給每個 Entity 添加自己獨特的程序和音效。這時候的游戲引擎就發展成大約這個樣子:
這里要說明的是,并不是每個 Entity 都會包含所有屬性,比方說打醬油的框框這種 Entity,給張圖片就 OK 啦。
5、2D 游戲井噴了
隨著萬惡的資本主義社會對金錢的追求,他們一次又一次地引發科技革命對吧,計算機越來越牛逼了。人就想,如果圖片能填充給 Collision,那動畫可不可以呢?答案是必須可以啊!沒有什么東西能阻止人類賺錢。
然后他們又想,不一定所有的 Entity 都必須加圖像呀,有一些只要有程序就可以了,制作的時候在引擎里我們只要示意一下它存在,真正玩的時候玩家看不到,但是效果是實實在在有的,這樣可以實現很多效果。
這個東西其實很容易被想到,人們為了區別于加上圖片的 Entity,他們取了個名字叫做效果器,或者發生器。實質上就是把喵叫了個咪,放在引擎里。
然而這個架構真的很厲害,它解放了很多制作人的想象力。而且從邏輯上講,只要硬件和科技的升級,圖片、聲音、程序的質量,都可以升級 Entity 或者效果器的質量。
也就是說這個架構是一個可以成長的架構。所以直到現在,即使各種引擎多得眼花繚亂,名字都讓人記不完,但是其實仔細去看,實際去操作,他們無非也就是在這個基礎上繼續升級而已。或者仍然是這個理念,換了一種表現形式罷了。
我們用一個具體的例子理解一下。看一下超級瑪麗。
這么一個東西,實質上就是這樣的。紅色的是角色的 Entity,馬里奧和庫利寶都是,馬里奧包括了手柄各種操作時對應的動畫、音效、程序。而庫利寶只是簡單的機械運動和重復動畫。綠色的是帶動畫的道具的 Entity。
是帶動畫的道具?Entity,平時就一閃一閃的,頂一下會變樣子,一頂就碎了。咖啡色的就是只有圖片不帶動畫的 Entity。
只帶一個 Collision。除了站在上面掉不下去,或者擋在前面過不去,基本就沒啥用了。上面白色的數字是 UI。不過注意哦,天上的云和地上的草,就是沒有 Collision 的 Entity。
其實云和草是一個玩意,為了省資源可能引擎里面調了個顏色就用了。
后來人們統稱角色為角色,剩下的東西通通都叫做場景。然而場景美術做什么呢?顧名思義,然而我就是場景美術,做的就是場景。
這個桶頂端就有這么一個效果器,一旦玩家按了手柄上的“↓”,他就鉆進去了。根據這個制作方式,實際上可以做出無數種可能。在沒有骨骼這個概念引進 2D 游戲之前,幾乎所有的 2D 游戲都是這么干的。
冒險島
火焰紋章
惡魔城
拳皇
仙劍
6、3D 技術
其實 3D 技術很早就有了,只不過當?Pixar 做出《玩具總動員》大賣之后,人們才深刻意識到原來可以用到藝術領域!要知道?Pixar 是當年喬布斯投資的,喬布斯真的很有眼光。
這時候可是 1995 年之前,游戲畫面是這個樣子的。
魔獸爭霸初代,算是實時渲染的頂級了。
當人們看到 3D 也可以做得很漂亮時,就有人想了,能不能用 3D 技術干出來游戲呢!我們現在都知道,當然可以呀,不過 20 年前的他們不知道,他們面臨了很多困難。
要知道電影效果好,但是他們渲染時間長,弄不好就渲好幾個月。
可游戲是實時渲染,什么意思呢?比如一個 30 幀的游戲,他的每一幀畫面一定要在 1/30 秒內渲染出來,否則就會卡頓,目前游戲基本上都會要求到 30 幀以上。
現在我們清楚了,生成游戲的這個軟件叫做引擎,要想把 3D 技術用到游戲里,那么怎么改造這個引擎呢?理論上講,把模型扔到引擎里,能在 1/30 秒內渲染出畫面就行。
所以在用之前,就先要了解一下?Pixar 的前輩們制作玩具總動員的方式。故事板分鏡劇本什么的我就不說了,單說美術制作這一塊。
Pixar 先做了很多模型,給他們畫好貼圖,調整好材質,然后給模型綁上骨骼,然后再一幀一幀地像玩木偶一樣把每一幀記錄下來,然后給每個角色配上一個表情控制器,再一幀一幀地控制每一個角色表情,最后調整燈光、調整攝像機、渲染,就出來了。
用一個簡單的例子說明一下。有個軟件叫做 3DSMAX,做出來的模型是這個樣子的,這個圖他賴皮,打光渲染了,實際上做出來比這個丑。
然后他們用了一個叫做材質球的東西控制這個模型面上的表現。
怎么表現呢?我們想在模型上畫顏色。怎么辦?然后這幫人想起來了小時候手工課玩過的紙模。
聰明的人類就想到把 3DSMAX 的模型也弄成這個樣子,就給模型了一個屬性,叫做 UV。
把模型的每個面展到一個平面上,模型的每個面都都對應到這張平面圖上,那么理論上講,只要在相應的位置上畫一張 2D 的圖,就完全可以映射到模型上。
不過問題是,只有顏色不行呀,為了達到逼真的效果,表面還應該有反光對吧。這時候就給了一個屬性,叫做 Specular,用一張遮罩來控制這張 2D 圖片對應位置的反光程度。白色的表示強反光,黑色表示不反光。畫出來是這個樣子的:
然后通過材質球連接到模型上,模型就變成了這個樣子。
嗯,帥帥的,不過那時候電影中用來表現細節還有個 Bump 技術,用一張黑白圖來表現表面的凹凸起伏,比方說《玩具總動員》里那個綠色的恐龍身上的小細紋。
其實現在的動畫電影也還在用這個技術。他們表現煙霧還有個粒子運算技術,表現反射還有個光線追蹤技術,只要花時間去渲染,效果大家都看到了,很逼真。不過也能想象到,不管哪個技術,在哪個年代實時渲染都干不成。
干不成怎么辦?沒有什么能阻止人類賺錢。有一部分人就想出了這樣一種制作模式。
既然咱 1/30 秒渲染不出來,那么就把渲染好的圖片直接用到引擎里去做就好了呀。然后他們就用這種方式做出了這樣的游戲:
紅警 95
這種精度的畫面在當時看起來相當驚艷,其實這只是表現手法而已,這款游戲最厲害的地方是,支持局域網 8 人聯機。
現在聽起來好像沒啥特別的,不過在當時集體打單機的時間,確實讓人感覺時代變了。制作這款游戲的公司叫做 Westwood,而且這款游戲在全球各個區域持續銷量第一。
不過悲劇的是,后來 EA 收購了 Westwood,再后來因為經營不善,就解散了,已然成為了歷史。
這種制作方式不管放在當時還是現在都是一個很典型的制作方式,因為這種表現方式可以直接把透視問題完美解決。也因為他壓根就沒有透視,而且隨著硬件性能的提升,畫面也越來越精美。
帝國時代 1?/?2
星際爭霸,在現在看來畫面都還很不錯
暗黑 1?/?2
這種制作方式在現在有一種流行的叫法,叫做 3 渲 2。意思就是 3D 的模型,渲染成 2D 的圖片。因為 2D 的圖片相對要更省資源,所以在很多廠商剛起步沒有很強的研發能力,他們選擇制作手機的時候,畫面的表現形式就會使用這種方式。
大 COC,典型的例子。還有像神雕俠侶手機版這樣的,目前這種游戲很容易就能找到。
這是一種思路,還有一票人,他們這樣想:3DSMAX 的材質球渲染起來很費勁,那就不要用他那個渲染很費勁的高端材質球就好了呀。整個渲染速度很快的低端材質球,那制作模式就變成了。
解釋一下,因為模型是 3D 的,所以 collision 也會變成 3D,游戲引擎可以自己生成 Collision ,但是大多數情況下人們還是喜歡自己去定制一個特別合適的 Collision。
而材質球就會當做是一個 Entity 的屬性,只不過這個屬性超級復雜而已。這一套看起來也相當高大上沒錯吧,沒錯,這玩意確實相當高大上,看看 EA95 年初代的極品飛車的畫面就知道了。
這在當時已經算是很驚艷的玩意了。這輛車好像是蘭博基尼……
我在制作流程的示意圖里是用控制材質球的圖片組來說的,其實我想說的是,那個年代這個組里只有一張貼圖,所以怎么逼真怎么畫就對了。不過當電腦運算能力上來了再看看游戲畫面:
CS,值得一提的是,雖然貼圖支持很少,不過這時候的 3D 引擎已經可以表現一些特效了。
魔獸爭霸 3,這時候雖然貼圖支持也不多,不過特效已經可以做得很好看了。
包括魔獸世界也是這一套制作方式。特效非常漂亮,不過這實際上完全可以看做是一個擁有粒子效果的 Entity,可以理解為 Entity 的屬性又增加了。
這已經是 10 年前的事了,那時候還用不了 Specular 技術。因為電影中的 Specular 直接和光線追蹤掛鉤,而光線追蹤是個運算大坑,作為藝術家的游戲制作團隊事實是不敢輕易去觸碰工程師干的活的,所以看到的那些光影效果其實完全都是畫出來的,技術是無法阻礙藝術家對完美的追求的,只不過追求的結果有點假而已。
7、3D 技術的發展
很快,人們在細節表現方面就有了突破,可以表現細節的貼圖不再是只有 Bump 貼圖了,人們發明了法線貼圖,老外叫他 Normal Map。
和 Bump 貼圖的制作方式不同,Bump 貼圖是靠手畫出來的,有模型表現不出來的細節,而 Normal Map 直接靠映射方式。
在 3D 軟件里,用一個低面數模型包裹住一個高面數模型,然后設置一下,高面熟模型信息就會記錄在低面數模型上。同時會烘焙出一張紫色貼圖,這張圖就叫做 Normal Map 了。不過不管是 MAX 還是 MAYA,都沒有第三方軟件烘得快烘得好,這款第三方軟件一般是用 Xnormal。
同時人們還發現,Specular 這種東西只要不和光線追蹤掛鉤就很省資源,實際的表現也很出色。當這個技術被用在游戲引擎中并發布出來的時候,人們欣喜地稱之為次世代。
COD
戰地
人們被驚艷到了,這時候的制作流程也得到了升級。既然可以表現高面熟模型的細節,那么就需要制作高面熟模型。制作高面熟模型的軟件叫做 Zbrush,制作流程就變成了:
8、當今
當然上面的這些制作流程只是為了幫助大家更方便地去理解引擎工作過程。事實上有很多技術已經整合到引擎里面了。當年的次世代現在已經變成了現世代,而如今的次時代更加尖端。
雖然大的制作流程沒有變化,不過細節卻變得天翻地覆。由于計算機的運算能力的提升,引擎同時也整合了更強大的粒子特效,實現了更逼真的光照系統,支持更大的貼圖尺寸,支持更多的模型面數,同時還通過例如全局光貼圖(Ambient Occlusion Map),陰影貼圖(Shadow Map) 等技術讓畫面變得更加逼真。
目前材質球使用的新技術是這樣的,之前我們講 Specular 貼圖是不能表現光線追蹤的效果嘛,無恥的人類,做了一個假的光線追蹤系統,我叫做假環境反射貼圖(Cube Map),因為是假的,所以游戲里面照鏡子看不見自己。不過我相信有一天,這都不是事兒。
由于光影強大,環境模擬強大,所以貼圖的制作越來越變得去光影化,很多時候完全就是填色游戲。而由于對更高精度貼圖的支持以及更高模型面數的支持,高模雕刻的精細程度反而變成了重中之重。
而且隨著 3D 打印機的出現,Zbrush 的地位也突然被抬得特別高。可以這么說,只要材料足夠,完全可以用 3DSMAX 或者 MAYA 做出一個大致的模型,然后通過 Zbrush 精細每個零件,最后通過 3D 打印機打印出來,拼起來是個火箭筒還是個坦克就隨你便了。
并且理論上講,只要你做得夠精細夠符合工程學原理,給一枚導彈,就能把飛機炸下來。不過我還是建議不要做這種危害社會的事情……
同時,現在的音效也可以把交響樂很輕松地塞到游戲里。當這么多的功能全部整合到引擎里,就是我們現在看到的引擎模樣了。
不過,當理解了游戲制作最基本的邏輯,再去看不管哪一款引擎,事實上就是找到它的那個功能而已。