GameLook報道/11 月 16 –20 日,中國 Unity 線上技術大會以直播形式召開,為廣大開發者帶來了一場有關前沿技術和優秀案例的線上盛會。在11月18日晚的游戲專場中,TipsWorks《帕斯卡契約》項目總導演&美術總監丁成甲,為廣大開發者詳細拆解分享了《帕斯卡契約》研發過程中所使用到的技術以及游戲表現與優化方法。
《帕斯卡契約》是TipsWorks開發的首款游戲產品,并且該作采取了類似主機游戲的買斷制模式,同時在游戲的表現方式與呈現的最終品質十分優異,趨近于3A大作。因此這款游戲也被蘋果相中,登上了蘋果2019秋季發布會中,作為展現蘋果強大的A13仿生處理器演示游戲出場,成為首個國人研發登上喬布斯劇院的游戲。
前不久,《帕斯卡契約》剛剛官宣銷量突破100萬套,成為了今年首個銷量破百萬的國產單機游戲,在此次開發者大會中,丁成甲也著重以游戲的畫面表現、世界觀劇情安排以及關卡設計方面進行講解,為國內廣大同行帶來思考。
以下是演講實錄:
丁成甲:大家好,我是《帕斯卡契約》的總導演兼美術總監,我是整個負責項目里的劇情框架,游戲玩法還有美術表現,本期分享會我會以游戲制作的角度來介紹一下《帕斯卡契約》的創作流程,展示一下在創作《帕斯卡契約》中,我們經歷了哪些階段。最后我會舉一些游戲中的例子來解析游戲中的美術表現與優化。
說到帕斯卡契約,首先介紹一下我們項目,最早的時候是使用unity來制作的一款動作角色扮演項目。最開始我們用的是unity的5.6版本,最后一年我們升級到unity 2018。
從2016年開始研發,大概三年的研發周期,制作人員從第一年10個人,一點一點擴大,最后一年我們大概30個人,整個項目95%的資源都是自己產出的。這就是我們公司的一面墻,早期我們會在墻上面做很多的嘗試,其實我們早期沒有太多的方向,所以當時做了非常多的風格嘗試。
接著我出了這樣的小稿,這是一組黑暗中世紀題材的概念圖。出了稿子以后,工作室里的每一個人看了稿子后覺得非常有興趣,大家出乎意料的一致,覺得方向可以試一試。
確定了目標后,我繼續做了一些人設的細化,就有了現在這張圖,有劍士、女巫、貴族、獵魔人、重甲騎士這種風格。因為我們當時只有10個人左右的人力,決定把體量控制的小一點,我們商量了一下,做一款中世紀題材的動作對戰游戲,可能是一個比較保險的方案。
到了項目開始定初期目標,這階段我們覺得訂立的目標始終要量力而為,訂立可實際完成的體量,訂立可實現的玩法,而不是說我腦子里有非常多、非常決戰的點子,但實際制作的時候處處碰壁,結果只能完成它的60%或者70%。
所以我們考慮了很多,希望把制作體量控制在一個可掌控的范圍之內,這是我們當時做的初期聯機對戰demo。
10個人花了一年,做了一個已經可以刷到手機上的聯機對戰模式,可以WiFi聯機,就像《榮耀戰魂》一樣能夠實現PVP,但是當時游戲性和畫面都沒有調的很好,游戲內容略微有點單薄,所以我們決定加入一些PVE元素。這是接下來為 PVE模式制作的一張場景設定,看起來有點詭異而破敗的村莊。為此我們開始思考游戲的世界觀和簡單的故事。
當時我們做了一個所謂基地的PVE玩法,怪物不斷從遠方涌過來,玩家保護基地,需要不斷的擊殺怪物獲得能量,然后用能量強化自身,迎接下一波怪物。這個PVE玩法現在看起來非常簡單,但是對于當時的我們來說意義非常重大,因為時候我們終于得到了一個像樣的游戲框架,而且玩起來確實也蠻有趣,給了我們前期非常大的信心,我們看到這一步后,想想還不如把這塊好好做一做。
有幸的是場景最后被保存下來,就是這個場景。
這個場景現在是游戲最終上線后,第一關海格姆的畫面,保留了原來那塊區域,在這個基礎上繼續擴展了場景。這個時候我們目標比較明確,項目正式開始推動,就像雪球一樣越滾越大。
關于世界觀的包裝,我們有一些自己的想法,特別是做一款手游,當游戲受到了體量的限制,我們不能去做地圖很大的這種游戲,就不可能讓玩家隨心所欲地去任何地方,玩家一定會想為什么我去不了對面那座山,我過不了對面那個河,這時候我們一定要給玩家一個合理的解釋,讓玩家覺得這是一個合理存在的世界。所以我們在項目上的做法,是在世界上加了一個設定,比如這個世界失去了光明,只有在有光的地方才是人類正常可以活動的區域。
那么世界就需要一種發光體,可以讓故事、劇情、整個世界聚焦,非常自然。我就設計了上面的生物,它為世界帶來光明,人們依附他而活,形成了這個世界觀。
所以當時我們決定需要一個與世隔絕被黑霧籠罩的世界。那這里生活人們的故事以及發掘這背后的秘密自然就成了劇情核心。我們創建的場景就會是生活在世界里人們的生態環境,同時也需要完整的故事鏈。主線劇情、主要的人物一點一點的添加進來。世界觀的設定不斷完善,在整個世界觀里面不斷回滾,關卡設計也在不斷更新。最后我們得到了我們想要的故事體系和世界觀。
當世界觀設定好以后,我希望世界中的一切體系,一些系統,包括玩法系統都是服務于世界觀的。所以設計了理智系統,這是一個絕望失控的世界,每個人都有可能在崩潰的邊緣,主角當然也不例外。他看見瘋狂的事情,這些瘋狂會燃燒進他的理智,他可能時時刻刻都處在理性和非理性的邊緣。
在混亂的世界中,當理智崩潰時要遇到什么,是看見靈異的怪物,還是看到發狂的boss,還是看到背叛的隊友,這些都是通過游戲的理智系統所表現出來。但還是在一個統一的世界觀之下,所以這是一個完整的包裝,不是把玩法、美術,、劇情全部拆開來處理。我們希望無時無刻的提醒玩家,你正處在一個瘋狂的世界中。
當時我們有意考慮到我們就這么點人力,但還要想辦法節省資源和減少工作量。所以我們做的世界觀設定,是外面的世界都處在黑霧中,整個游戲都處在濃霧中,而且光源很微弱,看不清遠處,所以游戲的視距就不用開的很高,不用制作一些非常繁瑣的細節,也讓我們制作的實際體量確實小了很多,關于這塊我會在后面場景制作的環節里具體分析,
這是我們的主角團,以及動態狀態。
在做最開始的角色設計時,其實考慮過很多,比如手機屏幕比較小,人物占比較少,所以在設計的時候會把比例稍微做的夸張一點,物件的厚度都做得比較敦實,沒有特別細小的設計,基本上以體塊為主,哪怕東西縮小了,在屏幕上并不是很大,還是能感受到它的體積感和體塊感。
這幾張圖基本是角色的制作流程。
原畫到高模,再到材質的繪制。材質繪制流程上,我們基本上用painter來對材質進行寫實繪制,基本上用PBR的這套基本流程,手機內存非常寶貴的話,貼圖使用有限,我們主要把重點放在了材質的調節上,在游戲引擎里面在用unity還原出來實際效果。在做的時候基本上是全尺寸貼圖,會最終會根據游戲的內存來進行優化。
基本上貼圖不會專門去弄、去壓縮,像diffuse和specular可能會看情況進行一些壓縮,主要看內存的盈余。我們深入的研究了unity standard的標準材質,而且Substance Painter和unity也做了非常好的銜接,幾乎一導出就可以針對unity5當時的標準材質輸出。
最終我們用到的貼圖有三種,diffuse Specular以及Normel。金屬度或是粗糙度,基本上是在阿爾法通道里去調整,整體來說用的是比較省資源的做法。
這是另一個角色,貝妮塔,這個角色它的特色是攻擊別人的時候,同時可以吸收別人的生命,存在身上的血瓶里,血瓶會根據它自身的攻擊,或對自身的回血上下浮動變化。
針對血瓶,我們是用Shader graph來實現效果,并且隨著人物的位移,可以看到液體在里面晃動,基本上可以保持水平面的移動。當然這只是一半,最終實際效果要比這個好一點。
這是游戲中的小怪,主角團和boss我們基本上使用了PBR的流程。
但是因為主角或 boss都是相對單數出現,所以每個角色的材質球的數量控制可以控制的比較準,我們大概做了3~4個,分為武器、服裝、頭發和皮膚這幾個材質球。普通的怪物,作為一款ACT游戲,可能會復數,一個場景里出現很多,所以用的材質相對比較簡單。
雖然用的比較簡單,但與boss是一個生產流程,用Substance Painter來導出。只不過用的是比較傳統的材質球,它的一些反射度基本上用的是一些反射環境球來模擬。
這是一個boss,游戲里會有很多這種非人性boss,給動作確實添了很多麻煩,這個角色有300多根骨骼,但在戰斗場景里只有主角和boss,所以也是能消耗得起,而且大型 boss戰我們使用的都是骨骼碰撞,會根據打擊點的部位做出IK的收集反饋,甚至還有一些,比如這個boss的沙漏是一個弱點收集判斷,而小怪基本上使用的是膠囊體碰撞,所以在一個場景里,單個怪和很多很多怪,中間要做取舍。
場景制作,這里我會舉一個具體的例子,游戲中阿達米亞的場景,來解析它的制作流程。
從制作思路上來說,第一關結尾的時候,剛剛向玩家展現出了世界觀,玩家知道頭頂的大月亮其實是游戲里的巨像,正對著你。
那這一關就希望非常明確的讓玩家知道這是什么樣的世界,所以這一關的主題就是要玩家始終能看到巨像,在整個游玩過程中,希望達到的效果是,游玩過程中可以看到這個大家伙一直在你身邊行走。
大概確立了劇本以后,首先我會先出這樣的概念設計圖傳達出大的思路方向,以及確立一些主要的特殊事件場景,比如阿達米亞這樣的場景,因為第一關畫面有點陰暗,希望第二關可以明亮起來,但是又要有那種詭異孤寂的氣氛。思路明確了以后,就用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。比如像我們項目,用了很多的預制組件,就是Prefab,那是相同的模型和相同的材質,但是由于不會被分布在兩張不同的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的工作量不是很大,我們游戲里LOD用的其實并不是很多。
霧氣這一塊,霧氣分為體積霧、定制霧片和基礎霧。體積霧我們用一些Shader模擬的,基本上就是傳統God Rays那種效果,定制霧片用渲染粒子實現,我們游戲里的定制霧片,基本上是放到地上模擬流動的云霧,靠近會消失,用軟粒子也不會出現硬邊,是比較方便的做法。
鏡頭調節這一塊,因為游戲里的敵兵種類體型跨度都非常大,針對不同的體型和怪物,我們做了一套專門調節鏡頭的工具,可以說每一種怪物,鎖定他的時候都是專門獨立去調節,在這個過程中還會去考慮怪物的攻擊方式。
比如遠程法師攻擊拋物線比較高,鏡頭當時調的時候,距離和鏡頭的遠近都會拉得相對比較寬一點。
在制作角色面部表情和口型動畫上,我們簡單的為角色設置了22個面部骨骼點來實現游戲中面部所需要的基礎動畫,口型和表情都是提前設置好的一段動畫片段,然后根據音頻調用融合的這些片段。
Blend Tree這一塊,對于3D游戲來說,不管是手機模擬搖桿,還是手柄搖桿,其實玩家在操控這些角色移動的時候,都可以朝任意方向進行移動。例如我們當時在設計維奧拉的時候,鎖定目標以后的移動方式,為了拉開和另一個角色泰倫斯的區別,我們大概設計了10種,前后左右、斜上斜下10個動畫片段來做融合,這就是當時維奧拉的Blend Tree。
除了一般的走路位移動畫之外,角色的攻擊動畫也占據了非常大的一部分資源,其中攻擊和受擊的邏輯判斷非常重要,我們通過結合狀態機的參數制,自定義曲線取值,讓程序去分析當前的動畫邏輯狀態,實現角色在攻擊動作時的一個目標的判斷。
比如武器判斷,根據預定的攻擊類型編號,調取相應的攻擊碰撞盒來實現這些做法。另外像攻擊中是否可以轉向,攻擊碰撞打開的時機,連段判斷等等,我們在項目制作中其實是花費了大量的時間來去調這些Curve的參數,這些調整的結果都直接影響了整個游戲的手感,特別動作游戲,這些手感的好壞都是拉這些曲線來實現,我們整個游戲有非常多工夫是在不停的去調整這些曲線上。
我們整個角色是用了全身的IK系統,包括人物瞄準、腳步IK、收集IK等,比如說現在看到的這張圖就是人物站在不同的地表上,腳部骨骼會做出一些變形。
關卡制作,我們在做關卡的時候,其實為敵兵制作了非常豐富的狀態機制,制作了若干種休息動畫,隱藏的攻擊動畫,會在整個游戲中看到有的怪物它隱藏在角落,在這偷襲,這些都是專門定制的,怪物都會有視覺和聽覺方向還有范圍。
比如這張圖里黃色的圈,就是聽覺范圍,紅色的三角區是視覺范圍,如果怪物在沒有看見你的情況下,慢走是不會驚醒他們,但是如果跑過去可能就會引發他們的攻擊。
關卡中是采用了動態加載的方式加載怪物,加載場景時會把這些怪物預先放到內存里,場景中放了很多點,又放了很多專門設置過的這種顯示盒,就是這種綠色的盒子,只有角色進入綠色的盒子范圍內的時候,綠盒子范圍內的怪物才會被動態加載,這樣的話可以比較穩妥的控制怪物的加載上線,而且也可以比較精確的控制,我想哪些怪顯示,哪些怪不用顯示。
最后談一談過場動畫。說到過場動畫一般是我跟編劇先聊,聊完,確定了大概的劇情,先出一個故事板,把腦子里的想法一些畫面先具像化,加上策劃以及程序一起推敲修改,這個階段主要是確定一些效果是否能實現,如果不行,可能還要商量可行的方案,再繼續去修改故事板。
當故事板確定以后,我們會在max里去做layout,主要是用來確認故事結構以及鏡頭的合理性。
我們會做一個這樣的效果,這個階段不會去加面部表情,加口型,而且會拿給配音去做參考,待他們把配音部分完成以后,確認沒有任何問題,才會繼續添加表情和口型。
游戲中有一些比較復雜的過場動畫,為了不占用過多的內存資源,我們自定義了一套及時加載系統,在演出完成后也可以立即釋放出游戲內存。根據預設的攝像機,調用角色ID以及相應的過場動畫資源,比如場景風格,燈光和音效等等。同時程序也可以通過代碼來控制美術的表現。
Unity的Timeline功能非常強大,早期時候我們并沒有使用,是用笨的辦法,實現游戲里的一些過場需求。unity Timeline功能實現了以后,我們很早就投入去使用這個東西,發現使用了以后確實非常棒,效率直線提升,而且我們結合了自身的項目,設計了一套狀態控制器,可以通過判斷當前操縱的角色,動態的調用相應的一些演出動畫。
另外在一些簡短的動畫中GamePlay狀態下,也可以做一些簡單的一鏡到底方式。
以上就是我為大家帶來的一個分享,我們其實本身并沒有用一些特別復雜或自己自定義的一些功能,用的還是unity本身強大的那些自身功能。這些東西的怎么使用,通過今天的分享會能給大家帶來一些思考,以上就是我為大家帶來的分享。謝謝。
如若轉載,請注明出處:http://www.gamelook.com.cn/2020/11/404218