本文首發於知乎專欄 " 一個想法,不一定對 ",作者為遊戲制作人潘翔(知乎名稱:我亂寫的),遊戲葡萄已獲轉載授權。
想瞭想好像在國產遊戲開發中,真正稱得上電影級的遊戲角色還真是不多,就算是射擊賽車之類的遊戲,為瞭迎合大眾的審美口味,角色造型也是以偏日韓風格的卡通唯美為主。所以國內遊戲公司對制作寫實類型遊戲角色的經驗大多也都比較淺(國外大作角色外包經驗不算完整經驗,模型資產隻是整個角色制作流程中很小的一部分)。
主機遊戲中高精度的寫實角色在制作上和傳統網遊角色差別是非常大的,流程上更接近影視。寫這個也是為瞭分享一點經驗,起個拋磚引玉的作用。本文由本人寫的我們遊戲中的角色制作規范修改而來,業內人士也可以把它當制作文檔來看。
國內目前流行的是這種唯美的角色,嚴格來講不算太寫實。
即便是寫實為主的射擊遊戲的臉型也更像玩偶而非真人
高精度的遊戲角色一般在單機和主機遊戲上應用比較多。相對於網遊,因為遊戲內出現的內容可控,通常情況下不用考慮用戶配置和多人在線的限制,所以在玩傢控制的角色上能投入大量資源把角色做得很精細很生動,讓玩傢遊戲過程中能產生良好的帶入感,增加遊戲感染力。在模型面數的預算上比多人遊戲要高很多。PS3 時代一個主角級別的角色面數通常在 5 萬面左右。PS4 時代則升級到瞭 15~20 萬面。多邊形數量的提高帶來瞭角色細節的提升,從 PS3 到 PS4,玩傢能明顯感受到角色細節的變化。
古墓麗影 9
古墓麗影 10
模型
所以寫實類角色非常吃多邊形數量,要做出足夠生動的角色,在不超過面數限制的前提下,能用模型表現的細節就不要用貼圖。同時為瞭讓角色的動畫生動自然,在模型能夠運動的關節部位都需要留出足夠多的佈線。佈線應該盡量以 4 邊面為主,在重點區域需要重點照顧,比如眼睛,嘴等部位。而且能夠運動的部分的結構都需要用模型做出來。比如毛發,眼球,淚腺,眉毛,睫毛,口腔,牙齒,舌頭等。圖中是我們遊戲中的角色,可以看到角色面部的多邊形數量是非常豐富的。
眼球和口腔的制作也要盡量按照真實眼球來做,至於為什麼這麼做下文會有解釋。
隱藏掉頭部後眼睛和口腔內的結構,這個畫面在很多遊戲出 bug 的時候會經常看見
起伏較大的佈褶也要用模型表現
貼圖
同樣高精度角色對貼圖分辨率要求也不低。一個角色通常由好幾張貼圖組成,貼圖分辨率一般在 4K 以上。根據換裝和 shader 的要求,貼圖會分為由皮膚,衣物,毛發,眼睛,其他組件等組成,根據實際需求增減。
一個角色的貼圖組成
模型和貼圖質量的好壞是遊戲畫面的基礎,也是美術成本消耗最大的部分。隨著硬件機能的提升,一個高精度角色的制作周期也大大拉長,類似神秘海域那種精度的角色制作周期會長達數月。不少大廠也開始嘗試新技術如掃描建模來降低制作成本。但是對於現實中不存在的角色,還是需要美術自己動手制作,這也是一個非常考驗美術基本功的環節。
皮膚材質
當然光有模型和貼圖是遠遠不夠的,這篇文章也不是模型貼圖的教程。要做出令人信服的真實角色效果,材質表現更加重要。在本時代主機上,因為 PBR(Physicallly-BasedRendering 基於物理渲染)技術的大范圍使用,材質效果的真實性有瞭很大程度的提高。而如何表現真實自然的皮膚材質,更是提高的重點。
皮膚材質類型屬於次表面散射材質(Subsurface Scattering),顧名思義,就是光線會在物體內部產生散射,呈現出一種柔軟剔透的效果。簡稱 3S 材質。
生活中常見的玉、皮膚、蠟燭、水果、樹葉等都具有次表面散射特性
本時代成熟的 3D 引擎一般都自帶次表面散射的 shader,例如在我們使用的虛幻引擎中,就可以將材質類型選為 subsurface profile 來配置次表面散射參數。通過修改指定的 subsurface profile 來調整出想要的皮膚透光效果,通過一張遮罩貼圖來控制不同部位散射的權重。
當然,真實的皮膚並不隻具有次表面散射這一特性。除此以外,人類的皮膚上還有無數細小的毛孔,分泌的油脂,汗水等會影響皮膚表面的紋理,高光和光澤度。要想角色效果真實,這些細節也必須體現出來。我們的做法是在基礎紋理上疊加一張無縫的細節紋理來模擬皮膚表面細小的毛孔,皮膚的光澤度和高光分別由不同的參數控制強度,由遮罩貼圖控制其范圍和權重。
貼圖使用如下,皮膚部分基礎紋理一共三張,分別是顏色法線,和細節貼圖。其中 3S 貼圖和粗糙度,高光貼圖整合在一起,分別放置在 RGB 通道上。
材質節點如下
眼睛
接下來是眼睛。眼睛角色中結構最特殊的部分,也是最出彩的部分。一個水靈靈的眼睛能讓角色顯得神采飛揚。所以表現眼睛的重點是高光和反射。傳統的做法是將高光繪制在眼睛的貼圖上,這樣的缺點也很明顯,眼睛的高光是死的,不會隨環境的改變而改變。復雜一點的可能會單獨處理高光的位置,讓高光能有一定程度的變化。但是這樣也有缺陷,就是不能真實反應角色和環境之間的關系。因為眼睛質感其實像一個玻璃球,能反射出周圍景象和光源位置,所以在制作眼睛的時候,需要考慮到這個特點,對材質進行特別處理。
傳統網遊的做法,將眼睛的高光繪制在貼圖上,實際上位置是不正確的
單獨處理過的眼睛高光,能一定程度模擬眼球的反射效果
為瞭得到真實的效果,眼球的建模也必須按照真實的結構來制作。人的眼球並不是一個標準的球形,眼球的前方有一個突起,裡面填充著角膜和前角房等物質,瞳孔則是凹陷進去的,正是這個結構讓眼球呈現出一種特別的高光。
眼球的貼圖和模型比較簡單,但是材質比較復雜,虛幻引擎中提供瞭單獨的眼球 shader,但是除瞭常規的顏色粗糙度高光反射屬性外,需要添加一個 bumpoffset 節點用來模擬瞳孔的凹陷效果,這樣才能得到正確的眼睛高光。另外,還需要一張切線空間貼圖來控制光線通過角膜產生的折射。因為引擎中光照的精度並不能總是滿足照亮角色眼睛的需求,為瞭讓眼睛看起來有水靈靈的質感,在眼睛的自發光通道上也加入瞭環境貼圖模擬眼球的反射。材質如下
眼球的效果,眼睛的高光和瞳孔有一定距離的,在光源不足的暗部可以提高環境反射讓眼睛看著透亮。
另外,在眼睛和眼皮相交的位置,為瞭呈現出眼睛的濕潤感,通常會單獨制作一個線條狀的模型放置在相交處模擬眼睛上的水分。同時為瞭讓眼睛在人臉上的位置關系更加明確,還會用透明貼圖模擬眼睛周圍的淡淡的陰影。
註意下眼皮和眼球相交位置的細小反光,這個是用模型模擬的,眼睛周圍的陰影也是用透明貼圖模擬的
毛發
毛發一直是實時渲染中的難點,傳統的做法是透明貼圖面片模型。這樣做的問題也是一大堆,比如不夠真實,排序問題,運動困難,費資源等等。現在有瞭實時毛發,可以解決一些真實性和運動的問題,缺點就是更費資源,同時因為技術不夠成熟,在某些硬件上可能會有 bug。為瞭方便優化和照顧大眾配置,大部分遊戲還是使用傳統做法,用貼圖加面片表現。通過改進 shader,傳統做法也能取得不錯的效果。
毛發有以下幾個特點:1,頭發的高光並不是匯集在一個點上,而是沿表面散開。這種效果通常被稱為各向異性反射(效果見洗發水廣告)。2,光線會穿過毛發,所以稀疏的發絲會比濃厚的發絲看起來顯得更亮。3:發根和發梢因為粗細程度不一,光源穿過的效果也會不同,並且導致每縷頭發上顏色上也會有區別。
虛幻引擎提供瞭單獨的毛發 shader,毛發 shader 用散射 Scatter,切線 tangent 代替標準材質中的金屬度和法線。另外還增加瞭背光 backlit 參數,但實際上並沒有什麼卵用。
基於 shader 的變化,貼圖繪制的要求也發生瞭改變。毛發的貼圖由五張貼圖組成,分別是 diffuse 貼圖,控制顏色,alpha 貼圖,控制不透明區域,root 貼圖,控制發梢到發根的變化,depth 貼圖,控制頭發的層次感。貼圖效果如下
材質節點如下,看不清也不要緊,這些官方范例裡都有
值得一提的是為瞭表現出良好的發絲效果,alpha 貼圖中的發絲要畫的比較粗,必須一根一根的都能看出來,而不能按常規做法一縷一縷的畫。另外這個 shader 對毛發面數要求比較高,必須要有足夠多的面數才能呈現出比較好的效果,我們角色毛發就使用瞭 18000 個三角面。
毛發效果
背光效果,可以看出發絲邊緣呈現出真實的透光感
最後是角色整體效果
官方參考文檔:照片級角色(可點擊此處查看)
光照
僅僅完成角色模型貼圖和材質的制作是遠遠不夠的,必須要放到遊戲的實際環境中運行才能看到最終效果 。因為光照環境的改變,所以角色在遊戲中實機運行的效果和預覽效果經常有很大差別。
引擎中的光照一般分為靜態光照和動態光照。在虛幻及大多數引擎中,靜態光源隻影響靜態物體,而角色屬於動態物體,要照亮角色,必須使用動態光照。但是在不開啟動態全局光的前提下(也不建議開啟),動態光源是不會產生間接光照的,所以角色的陰影效果會很難看。所以需要在場景中放置 LightmassCharacterIndirectDetailVolume(作用類似於 unity 的 Light Probes),讓靜態光照烘焙產生的間接光能影響角色。
動態光照可以同時照亮角色和靜態物體,但是不會產生間接光照,所以陰影的效果非常難看
靜態光照會產生間接光照但是不會照亮動態物體,所以角色隻收到間接光照影響,沒有被光源照亮
同時受間接光照和直接光照影響的角色,陰影效果自然瞭很多
所以在遊戲場景中角色能到達的區域,必須保證角色同時都收到間接光照和動態光源的影響。另外天光也能有效的改善角色的光照效果,但是天光也有其自身的局限性。天光作為無方向的光照,會讓整個暗部的效果平淡,缺乏細節層次變化,另外在室內環境中,天光的效果並不是很理想。
有光照就會有陰影,陰影精度的效果對角色影響極大。在 3D 遊戲中,影子都是非常消耗渲染資源的。所以實時光照的陰影精度都不會很高,這就會導致遊戲中角色細節大量丟失。因此角色的陰影一般都需要單獨處理。
默認陰影效果,可以看到臉上五官的體積感很差
提高陰影精度後的效果,角色的五官毛發都變得立體起來。
之前說過,陰影的渲染非常消耗硬件資源,所以角色的光照和投影一般都是和場景采用不同的通道處理,某些時候會為角色單獨設置一套光照。
表情
動不起來的角色做得再精細也是無法讓玩傢產生代入感的,表情則是角色動畫中比較難表現的部分。不過隨著技術的進步,低成本的表情捕捉也可以做到不錯的效果。一個 kinneck 攝像頭配合 faceshift 表情捕捉軟件,花費數千元就可以在普通 PC 上實現表情捕捉效果。但是在次之前有大量前置工作需要準備。
表情的制作通常有兩種方案,一種是骨骼驅動,根據生物面部的肌肉結構創建骨骼,通過骨骼驅動模型表情。這樣做的優點是調整方便,缺點是需要大量骨骼支持才能做到自然的表情運動,優化起來略麻煩。例如神秘海域 4 的角色面部就使用瞭 500 多根骨骼。另一種是變形器驅動。制作大量 morhp target 模型,用頂點變形的方式實現表情運動。優點是可以實現很多細膩的表情效果,缺點是調整麻煩,需要制作大量模型。在我們的遊戲中,經過評估測試,決定采用第二種方式。
骨骼驅動的面部表情
morhp target 驅動的表情,需要制作大量有不同表情頭部模型
任何捕捉得到動畫數據都是不能直接使用的,捕捉的過程中會產生大量錯誤,為瞭修正這些錯誤,最後呈現的動畫仍然需要美術手動調整。另外真實的角色動畫在遊戲中是比較復雜的技術,後面有空再寫。
最後核算一下成本吧。高精度模型和貼圖的制作通常要花費數月時間,根據要求不同,人工成本可能會有 3 到 5 萬。shader 的編寫和調整也要花上一兩個月時間,成本 2~3 萬。然後就是表情制作也要花上幾個月的時間,成本差不多也的 5 萬以上,再加上角色動畫,以刺客信條那樣的動作遊戲為例,一個角色大概需要 500 種以上不同的動畫來驅動,需要動用演員捕捉,動捕設備和場地,然後動畫師修正數據,加起來成本也得 30 多萬瞭。
最後再在引擎裡整合,優化。加上特效換裝什麼亂七八糟的功能,一個高精度的遊戲角色開發成本上百萬並不稀奇,當然流程熟練的話成本會低一些,如果不熟悉,中間犯點什麼錯誤需要來回返工,再多花一倍的錢也是有可能的。而這隻是一個角色。如果是像大型網遊這種動不動幾十個職業門派種族的,都用這種規格來開發,幾千萬就沒瞭,所以一般也隻有單人遊戲的角色才會這樣做。當然,隨著技術的進步成本也會降低,所以未來高精度角色在遊戲中的應用會更加普遍。