如何改造UE4用于赛璐璐3D卡渲?这里有一份日本大厂的实操分享
當今市場中,3D卡渲無疑是最熱門的一個技術競爭領域,此前也有不少廠商分享了各自基于不同引擎的3D卡渲實現技術。
前幾個月葡萄君分享了萬代南宮旗下一款基于UE4制作的賽璐璐3D卡渲產品《藍色協議》的技術經驗,提及它的風格選擇、實現思路,以及相關的基本手法。
就在前不久日本舉辦的CEDEC 2021開發者大會上,萬代南夢宮Studio的執行技術總監大井隆義又以《實裝篇》為題,進一步分享了《藍色協議》在實現賽璐璐3D卡渲時,針對UE4引擎進行的技術改造。
?
在大井隆義看來,一般的賽璐璐shading手法,要么不使用游戲引擎自帶的光照系統,自行處理光照,要么是對引擎渲染出來的畫像進行后處理讓它看起來有動畫的風格。這類手法的參考資料已經非常多了,但不改造引擎的做法有好有壞。
比如在UE4當中,不使用光照系統,相當于拋棄了UE4自身畫面表現極其豐富的一大特色,轉用后處理的做法,又相當于在已經渲染好的東西上再加一層多余的表演處理。于是萬代南夢宮Studio嘗試的是:如何在不遏制UE4功能的前提下,針對想要實現的渲染效果進行最小限度的引擎改造。
01:光照的處理
首先是為了生成陰影的光照處理。在《藍色協議》中,比較獨特的地方是,1個角色模型對應著兩種法線數據。其中一種是模型數據自身的法線,另一種則是畫師繪制的法線。下圖右上是模型法線,右下是手繪法線。
?
直觀地對比一下就能看出,模型法線呈現出了3D角色豐富的立體感,而另一套法線看起來就比較糊,尤其是角色面部的細節層次感不強。
原因在于,在通常的動畫作品中,大多數的角度來看,在光源相反的臉頰邊緣,都會以簡潔的線條來區分出面部的陰影。而鼻子這類突出的位置,大多數情況都不會重點繪制陰影(具體情況根據畫風也有差別)。所以使用相對模糊的法線數據,反而能呈現出更貼近動畫風格的陰影表現。
?
此外,角色面部還搭在了捏臉功能,總共可以分割為6個部件。如果將這些部件單獨計算為一個物件進行輸入,每個部件都會呈現出自己的邊緣,所以需要將他們囊括為一個整體進行輸入,邊緣部分的法線才能銜接順暢。
?
通過手繪法線的數據以及主光源數據,就可以計算出角色的陰影。在《藍色協議》中用到的皮膚陰影,屬于動畫術語中的一級陰影。要實現這個效果,首先需要準備一張二值化處理(將圖像上的像素點的灰度值設置為0或255,即黑白化)后的遮罩。再保證即便存在再多光源,作用到角色陰影的只有主光源。
?
然后用主光源,以及通過手繪法線得到的二值化陰影數據進行對比,在明亮處使用角色基本色,在暗處則使用陰影色來進行著色。這樣一來,一個角色的動畫式著色就算完成了一大半。其中關鍵在于角色陰影只受主光源的影響這一點。
?
當存在主光源以外的點光源時,為了保證不出現干擾的陰影效果,光照效果需要無視法線只呈現與光源的距離關系。這種情況下,亮度過高的情況會比較常見,所以需要再做調整。下面這張幻燈片也是亮度過高的例子。
?
天空光、間接光也是如此,在渲染的時候都會基本無視發法線,這樣就可以將外部光的色彩影響控制在最小的范疇內。盡管不是完全沒有影響,但這種做法首要考慮的是優先呈現角色自身的顏色。畢竟藍天背景下,背景求的顏色是藍色,如果影響到角色也泛藍,就會顯得很奇怪。
?
此外,高光(鏡面反射光)要素也進行了一系列的特殊處理,其中最明顯的就是頭發。高光處理時,首先生成一張將Blinn-Phong模型二值化以后的高光遮罩,緊貼在高光出現的部位。頭發中間部分的高光偏圓偏小,周邊部分的則是偏細長。這些形狀差異,是根據相對物件重心的距離,來擴大或縮小高光遮罩而實現的。
?
需要注意的是,即便角色的輪廓沒有逆光,也需要加上邊緣光的處理,來強化與背景分開的立體感。邊緣光的處理,是基于深度buffer的內容用Sobel filter提取出邊緣數據,然后加強其亮度。不過這種做法需要追加一條渲染管線。
另外在filter的階段,通過offset可以調節輪廓線的粗細,也能順著輪廓添加邊緣光。而且在不希望出現邊緣光的地方(比如因為角色背部的光源生成陰影的地方等),還可以實施進一步的遮罩處理。
?
02:輪廓線的處理
輪廓線在動畫風當中占據了相當重要的位置,它的處理也需要下功夫。
輪廓線的處理是依靠深度值進行判定,然后通過Sobel filter檢測邊緣部分,在深度值較大的一側繪制輪廓線。角色數據中,頂點色2是輪廓線使用的數據,其中通過ID編排,二手手游賬號購買平臺存放了不同部位、不同粗細的數據,在繪制輪廓線的時候會被使用。在面部這類不希望出現輪廓線的地方,可以調整深度值,讓它更不容易呈現出輪廓線。
通過反轉深度值就可以指定不希望出現輪廓線的位置了。
?
?
值得注意的是,輪廓線可以想象成在角色的外側進行了繪制。這是因為當畫面太小時,如果在物件內部繪制輪廓線,會讓物件看起來更小。
此外,前面提到的部件ID也會在物件邊界部分的輪廓線上進行計算,即通過ID檢測出邊緣,然后在深度值較大一側繪制輪廓線。
而在手指等深度值相差較小的,很難分配ID的部位,就需要使用通過法線來判斷輪廓線的方法。同時,手繪法線也在事先準備好了,這里也會合成這方面的數據。
?
《藍色協議》的角色還會表現出動畫、原畫中常見的,眉毛呈現在頭發上面的效果,這是模擬透過頭發看見眉毛的效果。技術上,則是先制作一張眉毛形狀的遮罩,防止頭發覆蓋眉毛的處理手法。換句話說,單純為了這個效果,就追加了一層渲染管線。
?
除此之外,輪廓線對Temporal AA的兼容性不好,容易被模糊處理,所以需要使用Responsive AA的抗鋸齒處理。Responsive AA會使用模板,盡可能保持現在的圖像輪廓,再實現一個類似Temporal AA的效果,盡管抗鋸齒效果會偏弱,但對于張力比較強的圖像來說,這種效果反而更好。
?
另外外部物件的陰影有時也會落到角色身上,但除了面部陰影以外的不會使用到角色的selfshadow,所以處理角色的shadow map(比如落到地面上的陰影)時,只使用角色自身的影子。
不過,游戲使用了一些類似selfshadow的表現來作為代替。即使用offsetshadow比較臨近物體的深度數據和通常畫像的深度數據,然后寫入一張用來區分基本色和陰影色的二值化buffer。這樣一來陰影部分就會擴散開來。
?
最后用diffuse后處理,使明亮部分進行擴散,這個功能也可以用Bloom代替,但是會與特效部分的Bloom處理沖突,所以項目組最后選擇在另一邊使用這個功能。
?
進行這一連串的處理之后,《藍色協議》的3D賽璐璐風就實現了出來。當然,這也是在原本的UE4的渲染管線之上,追加了多層處理工序,deferred rendering的6個G-buffer幾乎所有通道都被用上了。在大井隆義看來,要做好賽璐璐動畫風格的3D渲染,絕對不是一件處理起來比較簡單的事情。
?
萬代南夢宮Studio這次針對UE4引擎的改造,基本都是集中在渲染通道的追加上,除此之外的引擎升級問題算是勉強處理完了。而這些改造比起追求物理的真實性,更傾向于實現創作者的想法和追求。「如果這么改動,會不會更有感覺?」這種不斷探求的欲望,是大井隆義認為最重要的思考。
03:結語
在葡萄君的上一篇文章中提到過這個產品的技術探索思路:用大量細節的打磨,去摸索制作組最希望達到的效果。
這決定了《藍色協議》不會簡單套用市面上某個模板,其實不難發現,自《藍色協議》曝光以來的兩年里,這款產品細微處的技術手法一直有不小的變化,我也很想看看最終這款產品會變成什么樣,拿出什么級別的技術呈現。
而每次看到類似的技術分享,葡萄君都會忍不住期待一下,3D卡渲已經成為標配和競爭入場券的國內市場里,什么時候會迎來風格與細節技術明顯分化的產品浪潮。也希望在這個浪潮到來之前,這類技術分享能為開發者提供一些不同的思路。
總結
以上是生活随笔為你收集整理的如何改造UE4用于赛璐璐3D卡渲?这里有一份日本大厂的实操分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 专访《花亦山心之月》:朝夕光年首款自研国
- 下一篇: 浅谈二次元场景特征和绘制手法