建立下個時代的高清遊戲美術資源生產管線(四):角色服裝篇

語言: CN / TW / HK

終於抽出點時間寫這個年更專欄了。最近忙了很多事情,壓力也比較大,無論是回答還是文章更新頻率都有一點小慢了,這次多寫點東西。

俗話說,人靠衣裝,佛靠金裝,服裝是塑造角色形象的重要一環,也是遊戲產品收入貢獻的重要一環。因此在遊戲資源生產,服裝製作也是不少廠商關注的重點。在遊戲角色服裝製作環節中,有兩個要點是必須保障的,第一是量大,遊戲中的角色往往有大量換裝需求,而面板產量又直接和產品營收掛鉤,第二是質量要求高,衣服制作不能馬虎,否則玩家不會買賬。那麼問題來了,因為美術人員製作水平高低不齊,我們如何設計一套既能滿足高效率,又能滿足高品質的穩定高效的生產管線?

首先是 資源生產環節 :

1:自動化

要想品質穩定,我們在設計生產流程的時候必須儘可能的降低人員水平因素的影響,能用軟體自動解決的堅決不使用人力.因此在流程設計上必須儘可能的減少人工建模的比重.這裡有兩個比較切實可行的方案,可以並行使用

第一是使用攝影測量建模技術,將需要製作的服裝拍攝全形度照片,然後進行數字化重建.好處不言而喻,缺點就是你必須在現實中把這套衣服先做出來.或者現實中有近似的服裝原型,可以去淘寶買,也可以拍手辦,總之得有東西讓你拍.這樣做比較適合寫實型別的專案,我在2020年的李寧數字服裝釋出會上主要採用這套流程製作數字化資產.關於攝影測量建模可以看我之前的這篇文章:

建立下個時代的高清遊戲美術資源生產管線(一):攝影測量建模 - 知乎 (zhihu.com)

第二是使用Marvelous Designer進行服裝版型和拓撲製作

Marvelous Designer (簡寫為MD)是一款由韓國人開發的專業的3d服裝設計軟體,它可幫助使用者快速的在軟體中製作精美的虛擬服裝,並且製作出來的效果跟真實的效果一模一樣。該軟體還可以實時進行服裝修改和試穿,可以與其它3D軟體完美相容,新版本帶來更多的新功能,包括重拓撲、GPU模擬以及網格細分等等。Marvelous Designer 9製作出來的結果可以完美的展現出現實服裝中的垂墜感、皺褶效果和各種面料獨有的細節和感覺,讓大家能夠在最初的階段就能夠展現出最終的效果,能夠節省您的設計時間,同時能夠提高服裝品質,及時進行優化和改善,避免後期的成本和資源浪費,使用軟體,您不僅可以製作常規的T恤,還可以製作各種複雜細節的連衣裙和職業裝等,同時,對於一些釦子、飾品等的物理屬性效果也能最真實的展現出來,精確的模擬展現。

目前應該大部分角色美術都能熟練掌握MD打板的製作流程.使用MD製作衣服的思路跟現實中一摸一樣,需要模型師先進行衣服版型設計,確定服裝的縫線,褶邊,板片的分割,鈕釦,拉鍊等部件的位置和銜接關係等等,還要考慮衣服的層數,厚度,這樣製作出來的衣服才有足夠的表現力和說服力.

美術習慣的傳統的製作流程是在MD裡面進行版型製作後進入zbrush中進行細節雕刻,生產成本中的效率問題的大頭和品質的不確定性往往也是來自於這個環節.我的方式是除非是萬不得已,不允許在zbrush中做這些無謂的操作,因為布料的紋理細節可以用SD進行程式化製作,每個布料紋理都可以視為簡單元素的重複排列組合,而這種操作對人類來說是最費時費力但是對機器來說又特別適合程式化處理的,在shader中處理也可以,這個後面會寫到.而布料的褶皺細節完全可以通過物理解算得到,美術人工雕刻的細節不可能有物理解算的精確,就算是有少數大神鵰刻出來的結果比物理解算的更優美,也無法作為量產標準推廣,你不可能指望每個參與制作的美術人員都是業內頂級大神水平,要量產只能儘量依靠機器.並且人工雕刻的布褶有時候會和實時布料模擬需求產生衝突.

拓撲和UV也必須按照固定規範製作,因為這牽涉到shader,繫結,布料模擬,LOD優化等後續一系列流程,隨意分配或者讓美術按經驗規範會導致後續流程不可控。在我設計的生產流程中,拓撲和UV也必須在MD裡完成,並且UV分配需要和版型一致。UV的縮放也必須依照規範好的畫素比進行縮放,關於貼影象素比的概念可以見我前一篇文章: 建立下個時代的高清遊戲美術資源生產管線(二):材質與紋理規範——場景篇 - 知乎 (zhihu.com)

實際上,我們也可以將MD的版型製作和攝影測量建模同時使用,比如我們可以單獨掃描衣服的褶皺形狀,建立成統一的素材庫,然後將在MD中製作的模型導進zbrush中,選擇性的對映掃描模型對應部位的褶皺,這樣可以快速得到逼真的服裝效果。

通過MD設計和製作服裝模型基礎形狀,zbrush進行細節對映處理,最後maya或max統一整理模型單位,比例,UV空間,頂點序號,座標軸等,這樣做的好處就是每個軟體負責的模組彼此獨立,可以根據人員擅長領域分配不同的工作內容,有的時候可以並行製作,最終統一整合,完全的工業化作業。熟練的美術師通常2-7天就可以高品質完成一套常規服裝的製作。

2:模組化

當然,遊戲中的角色往往不止布料一種材質。可能還有皮革,盔甲,外骨骼,緊身衣等各種設計。這些設計超過了MD能製作的範圍。但是硬表面建模有個好處就是比較簡單,很多細節我們不需要在模型上做出來而是可以直接在貼圖或者shader中處理。這裡就可以應用到模組化的製作思路。

遊戲行業發展了這麼多年,已經累計了大量的素材庫,稍加心思我們就可以在各大網站上搜索到,利用這些素材庫,我們可以建立一套模組化生產流程,來滿足一些建模軟體無法快速實現的需求。類似上面的案例,我們可以將角色服裝拆分為頭盔,肩甲,胸甲,腿甲等分別建庫,從已有的類似素材上修改比從0開始做要快很多.例如下圖就是A站上的模組化怪物生成器。

對於複雜的服裝,我們可以進行流程上的拆分,比如硬表面部分我們可以採用模組化的思路構建,布料部分我們可以採用服裝設計的思路構建,保證每個工序都有序可控,並且可以隨時朔源,按工序檢查效果,出了問題可以及時修改,而不是非要等整套做完才能檢查出問題,要整個推翻從頭修改。可以大幅度提高生產效率和效果。

其次是 渲染環節

有人總結得好,遊戲畫面效果是兩部分決定的,美術資源的品質決定畫面效果的下限,shader,光照,後處理等引擎內實時渲染的品質決定畫面效果的上限。我們從資源生產管線把控了下限,如果渲染層面搞不好,那下限就是我們畫面的上限了。所以要呈現一套高品質服裝效果,shader也非常重要,它同時承接了美術資源製作規範和材質的質感表現兩大重擔。

要調好shader,我們首先要做好 材質規劃

角色服裝常用材質型別有布料,絲綢,塑料,皮革,金屬,寶石等,一般不會超過這些型別,我們通常會製作好對應的材質模板,調整好引數和渲染效果,然後按材質型別為模型指定材質。這樣只要呼叫對應的材質模板,就可以快速實現正確的材質效果,不用為每個模型重複調整引數.方便量產化處理.

比如布料部分使用同樣的材質,金屬使用同樣的材質,需要注意的是,同一材質屬性的物體,透明和不透明也要區分開(半透明和不透明要分別指定不同的材質),這個情況布料和塑料比較常見

為了簡化和優化,也可以把相似材質型別合併處理,比如金屬,皮革,塑料用一個通用材質搞,這屬於專案細節需求,這裡不再贅敘。

為了方便進行資源管理,儘量要求美術將同材質物體的貼圖畫在同一張上面,這樣一張(或者說一套)貼圖對應一個材質型別,當然也可以不同材質共用一張貼圖,但是切忌同一材質使用不同貼圖,例如材質型別都是布料,但是畫這個布料用了四五張貼圖。如果因為精度問題同一質需要使用多張貼圖,也不要和其他材質型別的貼圖混用,比如說把布料和金屬畫在一起,這樣會造成材質型別混亂,為了區分材質型別,那麼可能需要為使用同樣貼圖的模型指定額外的材質,增加不必要的工作量和材質效果調整難度,核心原則就是 貼圖儘量與材質型別對應, 所以貼圖和材質數量對應,材質數量又和模型的mesh分割方式有關,一般是建議同一貼圖對應同樣的材質,對應同樣的部位,這樣邏輯清晰,方便管理。

為了表現服裝精度和質感,我們在設計shader的時候就必須考慮如何最大程度表現服裝細節。在我的前一篇文章中已經分析過細節和質感的關係,沒看過的可以移步這裡先補課: 建立下個時代的高清遊戲美術資源生產管線(三):細節與質感 - 知乎 (zhihu.com) 。UE和unity中都有自帶的布料shader,效果都很不錯,能滿足大部分需求,但是也有自己的限制,比如UE的布料shader不相容各向異性,大多數布料shader不支援移動平臺,而現實中的布料材料型別十分豐富,專案需求也經常變化,所以有的時候我們需要一個能相容易用性和通用性的服裝shader,方便我們調整效果。

現實中的布料可能同時具備菲涅爾,次表面,各向異性,薄膜干涉等特點,如果這些都寫在一個shader中會十分臃腫,在儘量不修改引擎的前提下,我們可以用一些擬合的思路解決各種質感問題。很多效果我們可以直接在base color通道中處理。

布料的散射效果,光線照射到布料上往往呈現出柔和的感覺
絲綢效果,除了各向異性,絲綢高光部分的顏色也會有變化
現實中的布料往往同時具備好幾個以上舉例的屬性

以下是一些材質效果的實現方式

模擬光線在布料內部散射
鐳射材質效果
模擬各項異性,詳細做法和原理可以參考@落月滿江樹的文章

如何在UE4中製作拉絲金屬的各向異性 - 知乎 (zhihu.com)

這些修改也可以適當新增到rouhness和specular通道,也可以配合shader本身對應屬性調整,這樣我們可以做出一些既尊重現實,卻又高於現實的效果。

旗袍效果
肉隱肉現的白襯衫
還有紳士們最喜歡的黑絲

同時材質也要兼顧美術工作流。為了讓服裝呈現更好的效果和精度,我們在材質設計上最好按功能劃分層次。一般可以分為結構層(表現服裝版型,衣褶等結構),細節層(表現微表面細節),環境層(表現環境的影響,比如髒舊,磨損,溼潤效果等),這樣方便我們在引擎中實時調整細節,簡單的說,其實就相當於把SP一部分功能直接搬進引擎。不同質感的面料和紋理可以用mask貼圖進行區分混合,能混多少種主要看專案需求。總的來說混合越多效果越好,從巨集觀角度看專案的整體效果也更加可控。

以下圖為例,服裝的縫線,板片之間的銜接關係,褶皺這些屬於結構層,結構層無法複用,和對應美術資源深度繫結。主要是法線貼圖,和一些顏色貼圖。(也可以解耦,但是效果會打折,要想彌補只能增加shader的消耗)。面料的紋理,質感屬於細節層,細節層可以使用統一的材質庫表現。搞清楚了效果之間的層次關係,我們就可以很輕鬆的以很小的消耗表現極其細膩的細節效果。

好的層次規劃可以輕鬆表現毫米級的細節

當然,調整材質的時候也要考慮到光照的影響,這個放到後面聊,這裡展示一些整體效果:

從上面圖中也能看出,案例中的服裝完全按照現實中的規則製作,從內衣內褲,到襯衣,外套,依次穿搭在虛擬角色身上,可以任意搭配,並沒有沒有刪掉衣服遮住部分身體mesh,這樣才能實現最高自由度的換裝效果。

繫結與動畫:

遊戲是需要互動的,我們最終的目標並不是做一個靜態畫面,所有的步驟都要考慮到動起來的效果。實現布料運動的方式主要有3種,骨骼動畫,骨骼物理,布料模擬,此外還有頂點動畫可以作為輔助手段。前兩種效果較差,但是很省效能,通常用於移動端。實時布料模擬效能消耗高,效果好,一般用於PC和主機端。

實時布料模擬一直是計算機圖形學中的難點,主要問題有2個,1:如何實現精確碰撞防止穿模。2:如何自然的模擬布料運動時的褶皺,拉扯。以目前CPU和GPU的算力,完全靠演算法來模擬布料在遊戲中的效果還是有比較大的風險。雖然目前也有不少外掛可以實現高品質的實時布料模擬,但是效能消耗很大,一般使用者的配置很難抗住,要實現普通使用者配置也跑得動的產品級布料效果,我們還是要從製作pipeline入手解決問題。

首先底層邏輯還是要從繫結解決問題。優秀的繫結方案可以在不依賴碰撞的情況下解決穿模問題。我們可以先暫時不考慮布料模擬的效果,先保證在純繫結條件下,服裝不能與身體穿模。其次可以用骨骼動畫或頂點動畫來進行初步的布料運動模擬。我們可以使用離線解算的方式將常規的關節運動下的布料狀態儲存為pose動畫,然後在角色播放骨骼動畫讀取這些pose動畫,從而實現實時驅動離線解算的布料效果。這種做法主要用於需要直播的虛擬偶像角色,如果是遊戲動畫則更加簡單一些,遊戲動畫都是固定死的,直接全部解算成離線布料動畫就可以。

這個時候MD流程的重要性就凸顯出來了,美術可以在衣服制作完成的同時將服裝的布料運動效果解算出來。

使用ssdr可以將離線解算的頂點動畫轉成骨骼動畫,關於ssdr的介紹文章見這裡: 線性蒙皮分解演算法及其在遊戲中的應用 - 知乎 (zhihu.com)

http://www.zhihu.com/video/1550730316469538816

不過還有一種情況,就是玩家的操作輸入並不是固定的,一昧的使用固定的動畫會使得最終效果非常僵硬。所以我們需要加入骨骼物理來銜接各個pose之間的過渡。unity和UE都有不錯的骨骼物理動畫外掛來實現這類效果。通過調參我們能在離線動畫和實時動畫中得到效果上的平衡,實現絲滑的過渡。

我之前製作的使用物理骨骼驅動的布料範例:

(5 條訊息) 啊?酒醉的蝴蝶早就過氣了??? - 知乎 (zhihu.com)

使用離線動畫+物理骨骼方式,可以在不消耗大量硬體效能的前提下,滿足絕大部分應用場景需求並且取得不錯的效果,如果希望細節能夠再上一層樓,我們這時可以再把布料實時模擬加上。一般來說,UE和unity自帶的布料方案就夠用,此時的布料效果主要是為了修正一些細節和細小的穿模問題,使我們布料效果更加生動。這也是目前頂級3A遊戲服裝效果的主要生產流程。

以下是我做的unity和UE中一些服裝動態效果展示:

http://www.zhihu.com/video/1550736232497500160 http://www.zhihu.com/video/1550741359107186689 http://www.zhihu.com/video/1550743911923945472

如果你有關遊戲,虛擬偶像,數字人等開發技術或遊戲產品及相關行業的想法可以加群908353590一起聊聊。

先寫到這裡