11月16日,主題為「創新思,享未來」的中國Unity線上技術大會正式拉開帷幕。在18日晚的遊戲專場中,《帕斯卡契約》總導演&美術總監丁成甲以「《帕斯卡契約》的創作與表現」為主題發表了演講,介紹了遊戲從0到1的實現過程,以及遊戲世界觀、人物、場景等設計思路。
大家好,我是《帕斯卡契約》的總導演兼美術總監,負責項目的劇情框架,遊戲玩法還有美術表現,本次分享我將從遊戲製作的角度來介紹《帕斯卡契約》的創作流程,展示在創作《帕斯卡契約》中我們經歷了哪些階段,最後舉一些遊戲中的例子來解析《帕斯卡契約》的美術表現與優化。《帕斯卡契約》是一款動作角色扮演項目,最開始我們用的是unity 5.6版本,最後一年升級到unity 2018。遊戲從2016年開始研發,大概三年的研發周期,製作人員從第一年10個人,到最後一年大概30個人,整個項目95%的資源都是自己產出的。圖中是我們公司的一面牆,其實我們早期也沒有太多的方向,當時做了非常多的風格嘗試。接著我出了一個圖中所示的小稿,這是一組黑暗中世紀題材的概念圖,當時工作室裡每一個人看了稿子以後都覺得非常有興趣,意見出乎意料的一致,覺得可以試一試。確定了目標以後,我又繼續做了一些人設的細化,就有了劍士、女巫、貴族、獵魔人、重甲騎士這種風格。但因為我們當時就10個人左右,決定還是
把體量控制的小一點,就商量做一款中世紀題材的動作對戰遊戲,比較保險。項目定初期目標,這階段我們覺得始終要量力而為,
訂立一個可實際完成的體量,一個可實現的玩法,而不是說我腦子裡有非常多的點子,但實際製作的時候處處碰壁,你只能完成它的60%或者70%。我們考慮了很多,希望把製作體量控制在一個可掌控的範圍之內。下圖是我們當時做的一個初期的聯機對戰demo。當時10個人花了一年,做了一個已經可以刷到手機上的聯機對戰模式,可以WiFi聯機,就像《榮耀戰魂》一樣的PVP。但當時遊戲性和畫面都沒有調的很好,遊戲內容略微有點單薄,所以我們決定加入一些PVE元素。下圖是我們為PVE模式出的一張場景設定,一個看起來有點詭異而破敗的村莊。然後
我們開始思考遊戲的世界觀和簡單的故事。當時我們做了一個所謂基地的PVE玩法,怪物不斷從遠方湧過來,玩家保護基地,需要不斷地擊殺怪物獲得能量,然後用能量強化自身,再迎接下一波怪物。
這個PVE玩法現在看起來非常簡單,但當時對我們來說意義非常重大,因為我們終於得到了一個像樣的遊戲框架,而且玩起來確實也蠻有趣,因此給了我們前期非常大的信心。我們看到這一幕(下圖)以後想,還不如把這塊好好做一做。有幸的是場景最後被保存了下來,下圖是最終上線了以後第一關海格姆的畫面,基本保留了原來那塊區域,然後在這個基礎上又繼續擴展了場景。這個時候我們目標就比較明確了,項目正式開始推動起來,就像滾雪球一樣越滾越大。做一款手遊,
當遊戲受到了體量的限制,不能去做很大的地圖,不能讓玩家隨心所欲地去任何地方,那玩家一定會想為什麼我去不了對面那座山,過不了對面那個河,這個時候我們一定要給玩家一個合理的解釋,讓玩家覺得這是一個合理存在的世界。我們的做法是加了一個設定,比如說這個世界失去了光明,只有在有光的地方才是人類正常可以活動的區域。那麼世界就需要一種發光體,可以讓故事、劇情還有整個世界聚焦,非常自然,我就設計了下圖的生物,它為世界帶來光明,人們依附他而活,形成了這個世界觀。
既然我們需要一個與世隔絕的被黑霧籠罩的世界,那這裡生活的人們的故事,以及發掘這背後的秘密自然就成了劇情核心。我們創建的場景是生活在世界裡的人們的生態環境,需要一個完整的故事鏈,主線劇情、主要的人物就一點一點的添加進來。然後世界觀的設定又不斷的完善,再回滾,關卡設計也在不斷地更新,最後得到了我們想要的故事體系和世界觀。世界觀設定好以後,我就希望
世界中的一切體系,一些系統,包括玩法系統都是服務於世界觀的。所以當時設計了理智系統,這是一個絕望失控的世界,每個人都有可能在崩潰的邊緣,那麼主角當然也不例外。他看見的所有瘋狂的事情會燃燒他所有理智,他可能時時刻刻都處在理性和非理性的邊緣。在混亂的事件中,當理智崩潰時要看到什麼?是看見靈異的怪物,發狂的boss,還是看到背叛的隊友,這些都是通過遊戲的理智系統所表現出來的,但是還在一個統一的世界觀之下。所以
這是一個完整的包裝,不是說把玩法還有美術、劇情全部拆開來處理。我們希望無時無刻的提醒玩家,你正處在一個瘋狂的世界中。畫面與設定的取巧,當時考慮到我們就這麼點人力,還要想辦法去節省資源和減少工作量,不過基於我們這個世界觀的設定,整個遊戲都處在濃霧中,而且光源又很微弱,看不清遠處,所以遊戲的視距就不用開的很高,也不用製作一些非常繁瑣的細節,讓我們製作的實際體量小了很多。下圖是我們的主角團。其實做最開始的角色設計時有考慮過很多,
比如說手機屏幕比較小,人物佔比會比較少,所以在設計的時候會把比例稍微做的誇張一點,物件的厚度都做得比較敦實,沒有特別細小的設計,基本上以體塊為主,這樣哪怕東西縮小了,在屏幕上並不是很大,你還是能感受到它的體積感和體塊感。這張圖是角色製作流程,原畫到高模,再到材質的繪製。材質繪製流程上,我們是用painter來對材質進行一個寫實的繪製,基本上是用PBR的這套流程。手機內存非常寶貴的話,貼圖使用有限,我們主要還是把重點放在了材質的調節上。這是用unity還原出來的實際效果。做的時候我們基本上是一個全尺寸貼圖,會最終會根據遊戲的內存來進行優化。這是另一個角色,她的特色是攻擊別人的時候,同時可以吸收別人的生命,身上的血瓶會根據角色自身的攻擊,或者是對自身的回血上下浮動變化。針對這個血瓶,當時我們是
用Shader graph來實現效果,並且可以隨著人物位移,你可以看到液體在裡面晃動,基本上可以保持水平面的一個移動。當然這只是做到一半,最終實際效果要比這個好一點。下圖是一個小怪。
主角團和boss我們基本上使用了PBR的流程,但因為主角或者boss都是相對單數出現的,所以每個角色材質球的數量可以控制的比較準,我們大概做了3~4個,分為武器、服裝、頭髮和皮膚這幾個材質球。
普通的怪物在一款ACT遊戲裡的話,可能會複數,一個場景裡會出現很多,所以基礎底冰用的材質相對比較簡單。雖然比較簡單,但我們還是跟boss一個生產流程,是用Substance Painter來導出來的,只是材質球用的是比較傳統的材質球,它的反射度基本上是用一些反射環境球來模擬的。這是一個boss,遊戲裡有非常多非人形boss,給動作添了很多麻煩,我們角色有300多根骨骼,不過因為在這個戰鬥場景裡只有主角和boss,所以這種技能消耗也是能消耗得起的。而且
大型 boss戰我們使用的都是骨骼碰撞,會根據打擊點的部位做出IK的收集反饋,小怪基本上使用的是膠囊體碰撞。一個場景裡,單個怪和很多怪,中間要做一個取捨。從製作思路上來說,第一關結尾的時候,剛剛向玩家展現出了這麼一個世界觀,玩家知道頭頂的那個大月亮其實是遊戲裡的一個具像,正對著你,那就希望非常明確地讓玩家知道這是一個什麼樣的世界,所以這一關就是要玩家始終能看到具像,在
整個遊玩過程中可以看到這個大傢伙就一直在你身邊行走。大概確立了劇本以後,我會
先出一個概念設計圖傳達出思路方向,以及確立一些主要的特殊事件場景,比如說當時第一關畫面有點陰暗,希望第二關可以明亮起來,但是又要有詭異孤寂的氣氛。思路明確了以後,就用unity的地形工具,以及簡單的一些石塊刷,
快速出一個layout。這個主要是提供給策劃,讓他們明白整個關卡和氣氛還有大的一些結構。關卡策劃在看了layout和概設以後,他可能大概就明白了,像阿達米亞這樣的一個場景,是一個以懸崖為主題的場景,在接下來進入白盒階段的時候,就不會因為理解錯誤而走偏方向。為什麼要做這一步?
如果你直接讓關卡來搭場景,很有可能氣氛上、劇情上,還有一些美術的結合,它不是能很好地結合在一起。所以雖然多做了一步,但是你只要傳達出一個概念或者給出一點元素後,對後期來說其實是會省很多問題的。到了這一步,我們交給關卡設計師進入白盒階段,這個階段就是不斷地完善回滾,把角色放進去,
不斷地測試,測試玩法、路線。待整個關卡驗證完成以後,就開始用美術資源逐步代替白盒。下圖是當時做的
關卡白盒測試,主要用來測試路線和場景比例,即使是這樣,有時候還是會出現比例問題。白盒階段要搭場景,記得一定要搭得寬大一點,可能會看起來有點空,但是隨著中後期,中景或者一些細節東西放進去以後,慢慢會變成一個比較舒適的比例。我們在做《帕斯卡契約》的過程中,有好多次做白盒的時候感覺還行,但是小物件一添加後,幾乎沒有戰鬥空間,最後只能砍掉重來。所以
這是一個需要注意的點,希望大家引以為戒。然後是場景的路線優化。在這個階段我會要求關卡、策劃同學特別注意,因為後面會用到剔除遮擋和視錐裁剪,所以前期規劃時,比如路線設計,要多轉幾個彎或者進入室內,或者是讓遠處的視野裡被一些巨大的物體遮擋住。
遊玩路線會決定遊戲後期的優化方不方便,這主要是控制視野內的模型面數與Draw call。手機遊戲在前期規劃路線的時候,確實應該要考慮到這方面。下圖是遮擋剔除。
場景儘量減少出現一條又長又直的路,或者是視野範圍特別寬廣的地方,比如說像圖中綠色部分裡露出的遠景,其實運算量還是能接受的。更遠處的景已經被其他遠處的房子剔除掉了,基本上不會參與運算。如果你真的有特別大的需求,要做一個大視野的場景,一般這種是會專門定製。比如說要做一個特別大的塔,從底層到高層都可以看得特別清楚,那你可能只是底層這一段會做的比較精細一點,上面可能也就是透掉了,或者是做簡化處理。場景材質我們基本上是用的Substance Designer來製作,
一個場景的材質球數量控制是相對比較嚴格的,基本上30~50之間,但確實也造成了一些問題,《帕斯卡契約》本身場景就材質重複的有點過高,但這就是兩邊的一個取捨了,大的場景、內容,要麼內存會很大,要麼就在視覺上做出一些妥協。這是我們用designer來做的一個磚牆的材質。
designer的最大優勢是可以快速用連接節點,根據需求快速修改,快速迭代,效率非常高,做出來的東西也可以根據一些實際的需要進行修改和加工,非常節省成本。尤其是當場景特別宏大,需要很多材質重複使用時,designer 可以重新採樣,隨機生成一道符合美術風格的新的材質,大大節省了時間成本和人力成本。我們沒有使用 unity那套地表編輯器,因為我們地表的場景有時候會達到3~4層,而且地表的面積相對也比較窄,用編輯器比較難處理,對後期優化也比較困難。不過要看具體項目需求,如果項目比較開闊,地圖開闊或者平整的話,unity的地圖編輯器其實是非常成熟的。
我們這裡做了一個材質球,通過一張MASK貼圖來混合兩種地表紋理,用頂點色其實也可以達到相同的目的。場景製作的場景光照,
整個遊戲使用了實時燈光加烘培,加light Probe。這三塊燈光其實是分開的,主要是為了方便調整場景的光線。整體場景用的是一盞mix燈,來提供整個場景的主光線,角色和怪物是用另一盞實時燈光來打整個人身上的明亮度和高光。烘焙我們主要使用的是
混合燈光進行烘焙,模式使用的是Shadow Mask。在用的時候有一個小的問題,它暗部被覆蓋的面積比較大時,高光會被MASK貼圖蓋住,造成整個暗部比較平。針對這個問題我們使用了兩種方法來解決,一種是在
場景本身材質上給一個環境反射貼圖,讓材質在暗部時看起來也會有高光和立體度。另一種是在一些非常特殊的情況下用的,讓我們程式設計師
在材質裡寫了一盞反向光。再加上人物走進陰影裡的時候,自身會打開一盞點光源,我們在一些山洞裡或者是洞穴裡,或者是一些黑暗的建築內部都會這樣處理。烘焙的時候注意,儘可能減少lighting map張數來控制整體的Draw Call。比如我們項目用了非常多的預製組件,相同的模型和相同的材質,但由於不會被分布在兩張不同的lighting map上,那它的Draw Call其實是不會合併的。這就有一個非常大的矛盾點,如果你lighting map使用得過多,那Draw Call可能會多,但如果你使用得少的話,你就要控制lighting map的尺寸,否則陰影會很模糊。所以
lighting map的UVS的分布,一個是會造成陰影模糊,一個是會造成內存增加,這兩個需要你在做項目的時候去進行一些取捨。light Probe,主要是用來給一些動態物體附著光影,比如說角色、怪物還有一些可互動的機關。因為我們發現
場景裡有一些特別小的物件,用烘焙的效果不是很好。小物件本身UV就很小,這張lighting map最後再一壓縮,那個UV會聚焦在幾個像素點上,像素點如果沒有處理好的話可能就是黑片,但如果完全不著色的話,這些物件在暗部和亮部的表現是完全一樣的,就非常奇怪。物體在暗部的時候可能會表現的有點亮,在亮部的時候可能又表現得非常暗,所以我們後期就改為使用light Probe進行著色,因為物件本身比較小,你放在暗部裡,本身會著一個比較暗色的,其實也看不大出來,反而會比你烘焙的效果更好一點。打光這塊,因為場景的重複度比較高,所以我們在製作的時候有一個概念,就是
一定要用燈光來給玩家作為記憶點,這就造成了光對我們來說非常重要,使用相同的素材,要根據打光的不同,營造出不同的場景氣氛,這點是我們在整個製作場景中的一個難點。說到整個遊戲的陰影,這一塊分為角色陰影、場景陰影,還有一些其他動態陰影。
我們投影的方法其實也是較為通用的做法,用專門的投影相機,按照光照方向給場景、角色拍一個剪影,拍到RT貼圖上,再根據投影投射到地表上。這樣做的話無論再多的怪和角色,只產生一次Draw Call,超出主角的範圍又可以不會被渲染,而且可以根據這張RT貼圖的格式設置,做一些處理,加一些鋸齒什麼的。場景陰影我們基本上用的傳統烘焙陰影,其他動態陰影,比如說像雲霧投射的陰影,基本上是用RT貼圖來實現的。場景裡的物件動畫,像植被,旗子,我們是用頂點動畫來完成的,相對來說比較省資源。除此之外,人走到草上把草壓彎是以人物坐標與草的位置遠近,程序控制,頂點偏移來實現的。視距這塊,我們世界觀的設計比較討巧,整個世界處在黑霧之中,所以遊戲風格開得非常強。如圖例所示,這幾個紅圈基本上都是霧氣,裡面其實都可以不用有細節。我們只要留下大石頭的剪影,還有一些建築的剪影,其他基本上能關的都關了。我們做起來其實就是
把所有的物品根據體量分組,越大的物體它的可視範圍越遠,例如一些建築剪影,或者造成整個場景的一些大石頭,越小的物體它的格式範圍越近。基本上參照這個規則,
所有的物體會被分到不同的層裡,然後去給每一層做一個可視範圍的設置,再加上LOD,這樣可以大大的減少消耗。這樣做了以後,LOD的工作量其實也不是很大。
霧氣分為體積霧、定製霧片和基礎霧。體積霧是用一些Shader模擬的,基本上就是傳統God Rays那種效果。定製霧片是用渲染粒子實現的,整個遊戲裡的定製霧片,基本上是放到地上的一些模擬流動的雲霧,靠近會消失,用軟粒子也不會出現硬邊,一個比較方便的做法。鏡頭調節,因為遊戲裡的敵兵種類體型跨度都非常大,
針對不同的體型和怪物,我們做了一套專門調節鏡頭的工具,可以說每一種怪物你鎖定他的時候都是專門獨立去調節的,這個過程中你還會考慮這個怪物的攻擊方式。比如說遠程法師它的攻擊拋物線比較高,鏡頭調的時候,距離和鏡頭的遠近都會拉得相對比較寬一點。在製作角色面部表情和口型動畫上,我們簡單
為角色設置了22個面部骨骼點來實現遊戲中面部所需要的基礎動畫,口型和表情都是提前設置好的一段動畫片段,然後根據音頻調用融合這些片段。Blend Tree,對於3D遊戲來說,不管是手機模擬搖杆,還是手柄搖杆,玩家在操控這些角色移動的時候,都可以朝任意方向來進行移動,例如我們在設計維奧拉的時候,鎖定目標以後的移動方式,為了拉開和另一個角色泰倫斯的區別,我們
前後左右、斜上斜下10個動畫片段來做融合,這就是當時維奧拉的一個Blend Tree。除了一般的走路位移動畫之外,角色的攻擊動畫也佔據了非常大的一部分資源,其中攻擊和受擊的邏輯判斷非常重要,我們結合狀態機的參數制,自定義曲線取值,讓程序去分析當前的動畫邏輯狀態,實現角色在攻擊動作時的一個目標的判斷。比如說
武器判斷,根據預定的攻擊類型編號,去調取相應的攻擊碰撞盒來實現這些做法。另外像攻擊中是否可以轉向,攻擊碰撞打開的時機,還有連段判斷等等,
我們在項目製作中花費了大量的時間來去調這些Curve參數,調整的結果都直接影響了整個遊戲的手感。動作遊戲感的好壞其實都可以去拉這些曲線來實現,我們整個遊戲有非常多的工夫是在不停地去調整這些曲線。整個角色用了
全身的IK系統,包括人物瞄準、腳步IK,收集IK,比如這張圖就是人物站在不同的地表上,腳部骨骼會做出一些變形。我們在做關卡的時候,為敵兵製作了非常豐富的狀態機制,包括若干種休息動畫,隱藏的攻擊動畫,你會在遊戲中看到有的怪物隱藏在角落偷襲你,這些都是專門定製的,
怪物都會有視覺和聽覺方向還有範圍。比如說像這張圖裡黃色的圈,就是一個聽覺範圍,紅色的三角區是視覺範圍,如果怪物在沒有看見你的情況下,你慢走的話是不會驚醒他們的,但如果你跑過去可能就會引發他們的攻擊。關卡中採用了
動態加載的方式加載怪物,加載場景時會把這些怪物預先放到內存裡,場景中放了很多點,又放了很多專門設置過的顯示盒,就是圖中綠色的盒子,只有角色進入這個綠色的盒子範圍內的時候,綠盒子範圍內的怪物才會被動態加載,這樣
可以比較穩妥地控制怪物的加載上線,而且也可以比較精確地控制哪些怪顯示,哪些怪不用顯示。最後談一談過場動畫。過場動畫一般是我跟編劇先聊,聊完確定大概的劇情,先出一個故事板,把腦子裡的一些畫面先具像化,加上策劃以及程序來一起推敲修改。這個階段主要是確定一些效果是否能實現,如果不行的話,還要商量一個可行的方案,再不斷地修改故事版。當故事板確定了以後,我們會在max裡面做一個layout,主要用來確認故事結構以及鏡頭的合理性。這個階段
不會去加面部表情和口型,但會拿給配音去做參考,待他們把配音部分完成以後,確認沒有任何問題,才會繼續添加表情和口型。遊戲中有一些比較複雜的過場動畫,為了不佔用過多的內存資源,我們自定義了一套及時加載系統,在演出完成後可以立即釋放出遊戲內存。根據預設的攝像機,調用角色ID以及相應的過場動畫資源,比如說場景風格,一些燈光和一些音效等等,同時程序也可以通過代碼來控制美術的表現。
投稿郵箱:tougao@youxituoluo.com