【翻譯】西川善司「實驗做出的游戲圖形」「GUILTY GEAR Xrd -SIGN-」中實現的「純卡通動畫的實時3D圖形」的秘密,前篇(2)


Lighting和Shading(2)鏡面反射的控制和模擬次級表面散射技術

 
    Cel Anime的2D圖形上,由鏡面發射而出現的[Specular Highlight](依賴視線的高光)的存在感並不覺得很多。但是, GUILTY GEAR Xrd -SIGN的Specular Highlight,也是基於[附加上手繪圖的高光的文法]的調整的結果,可靠的附加到Lighting里。
I-No的ilm Texture
I-No的ilm Texture的B通道
I-no的ilm Texture的R通道
I-No的Specular Highlight的無效化的狀態
I-no的Specular Highlight的有效化的狀態
I-no的Specular Highlight的有效化的狀態,變化角度靠近
 
    那么這個文法 是什么?
   一句話來表現是很難的,舉幾個例子的話,就好像肌膚和服裝,相互位置接近但是材質不一樣的時候,高光也會變得不連貫,就要在理解物理的完全不正確性的基礎上,沿着凹凸邊界和材質邊界作出高光來。
胸口的衣領和毛發,前額護具的下端,臉頰,嘴唇等高光就大體上固定的,根據角度有粗細的變化,極端角度時消失。
 
Potemkin的話,為了強調肌肉,衣服上也會加入肌肉的高光,在Texture來設定。
金屬光澤如果固定的話就會產生違和感,要根據角度進行變化

攝像機和光照的角度根據 通常 高光最適合的位置來設置,以提升說服力。
    Specular highlight的控制,是根據照明控制用的Texture的B(藍)通道里存放的[高光的進入傾向]參數來進行的。這個參數是對應鏡面反射的計算結果的強弱的調整,最大值就是烘培的高光,相反的值的越小,高光也越衰減。
    順便說一下,照明控制用的Texture的R通道是[Specular Highlight的強度]的參數,金屬或光滑的材質的部分會設定的成稍大。
ilm Texture,從上開始是 α,R,G,B的要素分解的texture
 
   只是,只有這種方法被加入,開發組還是不能滿意,目標指向 「完全的Cel Anime風味」,還有什么不足。
 
本村・C・純也氏(Lead  Modeler 兼Technical Artist )。擔任 GUILTY GEAR Xrd -SIGN-的角色模型的全部制作和bone以及Rig的設計。過去參加的產品有蒼翼默示錄系列,格斗游戲版的女神異聞錄4系列,以及[ GUILTY GEAR2   OVERTURE ]
 
本村氏:
    (不足的)是[顏色],Toon Shader的結果產生了明暗,這個明暗,總感受到一些單調的印象。成為陰的部分用單色的陰色乘算來載入,單純的Toon Shader處理,這個素材感的說服力和充實方面都感覺到不足。
     另一方面,電視Anime的制作現場,有稱作色彩設計的,轉職的美術師, 「這個角色的這個部分,陽光照到成為這個顏色,成為陰的狀態是這個顏色],是這種感覺,從事個別顏色的詳細設定。我想差別應該在這里。
 
    當然,像Cel Anime那樣每個細節都個別設定是不行的。於是,為了系統化實現的 推進 研究的結果,電視Anime的色彩負責人員是本能的,在[場景的環境顏色]和[表現對象的材質的光的透光率]做斟酌,並不是決定顏色的設定,而是很辛苦的達到一種推論。基於這個推論來實現,獲得了接近理想的結果,並決定加入到最終配置里, 本村氏說道。
  
    實際的結構,並不是那么復雜的東西。
    首先准備的是, 對應3D模型使用的基本Texture(Base Texture)的[陰的傾向顏色]分布的Texture。這個Texture是在開發組內稱為方便起見稱作[SSS Texture] (SSS:SubSurface Scattering)。
 
    lighting后成為 陰的地方,相關的Pixel,用這個SSSTexutre的值與[環境光的顏色]做乘算得到的顏色來決定陰色。另一方面,lighting后成為明的地方, 無視 SSS Texutre的值,結果是只受光源顏色的影像。
    由於這種區分的處理,變得接近Cel Anime風格,開發組是滿意了。
沒有SSS Texture(上)和有的(下)的比較 陰的部分受到了SSSTexture的影響。
 
    具體的 表現出了 什么樣的效果,例如,角色的肌肉顏色部分產生的陰是帶有若干的發紅。還有,衣服部分的陰的地方,殘留了衣服顏色的彩度。總之,SSS Texture是,那種[發紅]和[衣服的彩度的殘留色]構成的東西。
通過調整環境光和光源顏色,陰的顏色變化的樣子
    
本村氏:
     因為 SSS Texture並不是模擬次級表面散射,這個名稱的嚴格來說可能並不正確 (笑)。
     如果補足說明,SSS Texture應該是明確表示[這個材質有多少光透過的]。薄的紙上出現的陰色也薄一些。是有這種印象的Texutre。

輪廓線的秘密(1) ~背面法 

    除了形成 GUILTY GEAR Xrd -SIGN-的Anime調視覺的要素以外,擔當了相當基礎部分的是,輪廓線(描線)的部分。是漫畫里稱作 ペン入れ(鉛筆草稿后,用墨水筆描線)的部分,這個表現的情況在 GUILTY GEAR Xrd -SIGN-里,是用2種方法組合來實現的。
 
    最基本的描線是采用3D模型的形狀輪廓線的 「背面法」 (Back-Facing法)。
    通常,3D模型用GPU來繪制的場合,和視點相對背面部分的多邊形是[看不到的東西],作為繪制對象以外的東西來放棄掉。這個結構是,基於[ 朝向正面的角色模型的背后部分的多邊形,無論如何視點看不到,所以不用描繪 ]的想法,稱作[背面剔除 ] (Backface Culling)。
    但是對於 背面法的描線,是把這種背面剔除的結構進行反轉的Rendring組合起來。所謂[反轉]就是,把通常的[不繪制背面]的處理系統反轉,總之是[成為描繪背面不描繪正面]這樣。
 
沒有輪廓線(上)和有輪廓線的比較(下)
 
    說明 處理的流程的話,第一階段,把3D模型做一些膨脹,進行反轉的[背面剔除]。這樣的結果,這個模型的全黑的輪廓描繪出來了,把這個暫且保存起來。
    第二階段,把這個3D模型按本來的大小,用正常的處理系統來進行渲染。
    然后在最終階段,把全黑的輪廓和正常渲染的結果合並起來。全黑的輪廓,大部分會被繪制的正常渲染結果覆蓋,因為全黑的輪廓是3D模型進行了一些膨脹的狀態, 作為 結果只有 輪廓部分殘留下來了。   
     GUILTY GEAR Xrd -SIGN-的渲染管線是,先進行輸出 ZBuffer的 Z-Prepass,第一階段的時候,可以得到幾乎完美的輪廓線。所以最終階段的合成的部分覺得也不需要了,感覺是這樣的概念。
上面是膨脹后的反轉背面剔除繪制的輪廓,中央是正常繪制的角色模型,下面是最終圖像。這個部分里還有一個秘密,后話。
   
    實際上,這個方法是在Programer Shader技術興起前,就被使用的古典的東西,在 GUILTY GEAR Xrd -SIGN-里,通過使用Vertex Shader,把這個古典方法用自己的擴展來實現。
    
通過背面法生成輪廓線在 Programer Shader之前的3D游戲圖形里也實用化了,上面的幻燈片是使用背面法的 「XIII」(Ubisoft,2004年)。原始的是面向 PlayStation 2,當然 Programer Shader還沒有被使用。
 
    Arc System Works自己擴展的部分是,不管攝像機的Zoom狀況和角色的遠近,來回避線的粗細過粗和過細的控制部分,以及再現手繪作畫筆觸的給予曲線和直線部分的粗細強弱的控制部分。像實際的筆那樣移動繪制的 GUILTY GEAR Xrd -SIGN-的描線,就這樣由Vertex Shader控制來生成。
本村氏:
    采用的背面法,因為感覺在美術方面可以從自由的控制畫線的強弱的部分獲得好處。 GUILTY GEAR Xrd -SIGN-的3D模型,在Vertex Color里加入了[畫線時的粗細控制值],根據這個可以讓加上畫線的強弱。通過這個,可以進行像在Anime的手繪作畫時看到的,臉頰附近是粗線,到了下巴變成細線的表現。
輪廓線粗細調整的結果
輪廓線的粗細調整 (Vertex Color A 通道的顯示)
 
沒有輪廓線強弱 (上)和有輪廓線強弱(下) 。鼻子,臉頰,下巴周圍希望可以注意下。
 
這個是從肩膀到腕部周圍的輪廓線強調的比較畫像,上邊是沒有的,下邊是有的
 
    根據 本村氏所說的,關於 GUILTY GEAR Xrd -SIGN-的Vertex Color的利用細節是下面這樣的。
 
          •R:判斷陰影的閾值對應的Offfset。1是標准,越傾向變成影子的部分也會越暗(接近0),0的話一定是影子。
          •G:對應到Camera的距離,輪廓線的在哪個范圍膨脹的系數     
          •B:輪廓線的Z Offset 值
          •A:輪廓線的粗細系數。0.5是標准,1是最粗,0的話就沒有輪廓線。
 
    G和A是控制輪廓線相關的參數, R是,Lighting和Shading (1)的部分接觸的,手工加入的 Ambient Occlusion的自己遮罩率系數。B是,用背面法膨脹時,對應視點在多大的深度方向(Z方向)上移動(=Offset) 膨脹的系數,這個值設定的很大的話,膨脹的模型就會埋沒到鄰接的面里,結果就是輪廓線消失了。根據 本村氏所說,頭發和臉的鼻子下面等,為了防止出現不受歡迎的皺褶一樣的輪廓線,而加進的參數。
實際的形狀(上),不進行輪廓線的ZOffset的狀態(中央),進行的 ZOffset的狀態(下)
 
石渡氏:
   沒有采用Post Effect的方法,是因為考慮到很難進行這次的[線的粗細強弱控制]。這種背面法的畫線的結構,美術師方面可以從3D模型制作的階段開始,進行真機上顯示的線的調整,模型的制作和輪廓線的出現方式可以同時的進行。
 
    石渡氏所說的[Post Effect的方法]是,把渲染的結果,用Pixel Shader實時的做圖像處理來進行畫線。具體的是,把渲染結果的深度值差異找出,或者像素單位的視線(視線向量)和平面的方向(法線向量)的點乘值的差異找出,來決定輪廓線的像素。這個方法,在判斷出背面法幾何體負荷高的情況來使用的比較多,最近的 「GRAVITY DAZE/重力的眩暈: 在向上層的回歸中,彼女的內在宇宙產生的攝動 ]中用來做背景3D模型專用的畫線方法。
 
來自GRAVITY DAZE/重力的眩暈: 在向上層的回歸中,彼女的內在宇宙產生的攝動」。角色模型的畫線是背面法,背景的畫線是Post Effect來進行實現的。
(C)2012 Sony Computer Entertainment Inc.

輪廓線的秘密(2)~新開發!? 的「本村式線」

   
    GUILTY GEAR Xrd -SIGN-在表現輪廓線的時候,衣服或飾品類的凹槽,接縫,肌肉隆起的地方,還有加上了一個其他的方法來畫線。
本村氏:
    3D構造的變成凹槽的部分等,是使用背面法也無法 做出輪廓線的存在 。在這個地方的只能通過Texture Mapping來加入(直接畫在貼圖上的意思),但普通的Texture Mapping,隨着攝像機Zoom的擴大會出現鋸齒,和通過背面法做出的漂亮的輪廓線的差異會很顯眼。這里,如何出現[不依賴Texture分辨率的漂亮的畫線],回過頭來從 Texture mapping 鋸齒的顯示化是怎樣的情況 」的基礎進行研究。
 
    這個結果產生的,就是開發組內稱作[本村式線]的,獨特的畫線技術。
 
只使用膨脹模型的背面法的輪廓線,輪廓內的任何部分都沒有線出現。
 
使用膨脹模型的背面法的輪廓線無法描繪的線,必須畫在Texutre上。
像以前那樣的手繪的線來產生的結果,看出鋸齒很明顯
 
對比的 本村式線的方法繪制的線,同一分辨率也一樣尖銳的繪畫。
靠近本村式線的地方(Wire Frame顯示)
    說起來,Texture Mapping的鋸齒,某個紋素(構成Texture的Texel)對應多邊形面用單獨Texel來描繪就會變得顯眼化 。相對的,如果有鄰接的Texel,和單獨Texel的時候不同,因為四角Texel形狀的輪廓實際上消失了,很難會呈現鋸齒感。
   不過,是因為鄰接也有斜上或斜下的,事實上這個和Texel是單一的狀態是一樣的,也會有鋸齒感出現。總之, 水平線形狀和垂直線形狀的Texel如果是排列好的的Texel集合的,附加一些模糊化,就可以回避鋸齒感出現的狀況
本村式線的UV展開的例子
 
    要試着理解是理所當然的事情,注意到這點的 本村氏,[輪廓線是, 只用垂直線和水平線 予的 實線 構成的Texture ]來制作出來。基於這個,在3D模型上使用時,在想要斜線或曲線的地方,把Mapping也一樣用 扭曲和彎曲的形狀 的來設計UV (3D模型上的每個多邊形,來表示和Texture Map對應的數據),
    好吧,這個方法是試着進行Texture Mapping,不可思議的。即使是那種分辨率不高的Texture,也可以獲得美麗光滑的畫線。
 
    下面,就是實際使用的本村式線用的Texture。還有,因為 本村式線用的Texture的只有畫線信息也沒什么關系,在 照明控制用Texture Map的alpha 通道上用單色來保存
 
本村式線用的Texture的例子。這里是垂直線的繪制。
本村式線的UV展開的地方
使用本村式線的結果
把本村式線使用的結果擴大。注意沒有鋸齒。
這個是Mesh構造的例子。 構成 繪制的線的拓撲設定這點請注意。
 
沒使用這個技術的參考,使用Line Texture(在貼圖上直接畫線)的例子。放大后的可以看到圖形鋸齒明顯。Mesh分割也是,進行的是和繪制的線無關的拓撲。
 
    本村式線的例子,只用直行的線段,看起來就像城市規划圖那樣不可思議的Texture,例如四角線沿着邊緣的Texutre, 適用於肌肉凸起部分的輪廓線。肌肉的隆起,變成橢圓形的半球形狀,使用本村式線就變成 「把四角形裝的邊緣線對橢圓形狀來Mapping」。
    四角變成橢圓形狀, 四角內部的領域有了很大的拉伸和歪曲。所以,如果這個四角型內部有文字或花紋,當然也會扭曲,因為最終這個Texture是用來附加輪廓線的東西,那樣的文字或花紋沒加進來。 因為是 外觀顯現的,最終只有線,這個手法生成的扭曲,作為外觀問題上並不會顯露出來。
 
    當然,給予歪曲和扭曲的是基於UV的Texture Mapping,角色或視點移動,Texture也會收到放大縮小旋轉的影響。所以說,繪制的線段也會受到這種影響,變成曲線或斜線,因為這種情況Texture Mapping可以使用 Bilinear Filtering,就會給曲線或斜線適當的模糊感。於是,這個正好成為了很好Anti-Aliasing的效果
 
不設定 Bilinear Filtering(上)和設定(下)
 
    本村式線描繪的線段的粗細的強弱是可以看到的。但是, 本村式線用的Texture的自身沒有這樣微妙的線段強弱,線的粗細是大體上單一的。既然Texture的線的粗細是平均的,如何處理畫線的強弱的?
 
本村氏:
    本村式線進行畫線的粗細的強弱,是用UV Map的設計來加上的。想要出現粗的線,在Texutre上的線表現用的Texel,所對應的多邊形面分配的大一些,在UV Map上下功夫就可以了。
 
    這個的 本村式線,和制作流程,預感到也會在Anime筆觸以外的游戲圖形里廣泛使用。
 
設定畫線粗細強弱的例子。上邊是沒有設定,中央是UV和線重疊狀態來設置強弱,下面是線自然的切斷的表現。
    前篇就到這里。
    后篇是,游戲表現的話題和聚焦動畫部分的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM