1. 程式人生 > >最接近2D風格的3D畫面

最接近2D風格的3D畫面

因為《罪惡工具:X標記》畫面的目標是2D動畫風格,在開發團隊看來,“目標不是物理上的正確性,而是繪製上的正確性
具體而言,《罪惡工具:X標記》的遊戲世界中,全域性光源只有一個相當於太陽光的平行光源。這個光源用於生成角色投到
地面上的影子。其他的影子,比如背景靜態物體的影子就是通過頂點顏色和紋理烘培的。




角色自身的影子,是跟隨角色的專用光源進行光照的效果。可以說每個角色都有“大家看不見的,圍著角色的燈光師”。
石渡:著眼於2D動畫效果,也就是重視觀感。通過場景裡設定的光源進行光照,也許看上去是真實的。但有的位置角色站
上去,影子落在臉上會變得很暗,還會出現陰影消失的平板狀態。觀感的不一樣,對於時常在對等條件下進行的2D格鬥遊戲來
說是要儘量避免的。

本村:實際採用情況是,每個角色各自的光照用著色器裡有自己的光源。應該說每個角色都擁有具備單獨向量引數的光源
比較正確。
這個“角色專用光源”,會根據動作的位置和角度進行調整。戰鬥畫面不說,特寫畫面裡為了視覺觀感,光源的方向是逐
格進行調整了的。


普通渲染



2D渲染



影子調整前


 
影子調整後

對於產生光照結果的shading來說,基本上超過閾值的就是明,低於的就是陰,是很常見的二階調動畫著色器機制。也就是
光照結果是0-255,128以上就是明,0-127就是陰。
但是,計算結果在閾值接近的領域,鏡頭和角色稍有變化就容易出現明暗反轉的情況,明暗區域容易出現破碎的斑紋,影
響到最終的視覺效果。


修正前



修正後


《罪惡工具:X標記》為了讓實現賽璐璐動畫那樣的明暗效果,在3D模型上下了多種多樣的功夫。
其一就是頂點顏色。具體來說就是在頂點顏色中的R通道加入了陰影權重引數。這個可以設定凹陷和被周圍遮蔽地方的強度
。在主人公索爾的場合,陰影權重引數為下巴和頭附近的自投影效果做出了很大的貢獻。


陰影權重



陰影調整開



陰影調整關

木村:陰影權重引數從結果上說就是Ambient Occlusion一樣的引數,是基於藝術家的感覺手動設定的。這個引數也通過控

制照明的紋理—開發團隊將其稱之為“ilm紋理”—設定在G通道里面。值調成最大的時候,就相當於被烘培進紋理中的陰影。
比如下巴內側,頸子部分時常處於陰影中的部分,就是通過這種方式實現的。

頸子和下巴上的陰影輪廓一眼看上去像是自投影的結果。實際上是引數控制實現的。



陰影編輯前



陰影編輯後



使用陰影控制的效果



不使用陰影控制的燈光效果

還有一點就是頂點法線的調整。
頂點法線就是頂點的方向。3D影象中的光照計算需要光源的方向,視線的方向,面的朝向(法線方向)三個引數。也就是會
通過法線方向的調整,控制陰影的外觀。

《罪惡工具:X標記》的角色模型有4萬面。如果什麼都不做,模型會產生複雜的陰影。不過開發者想要的是賽璐璐動畫那
樣大片,概括的陰影。所以在維持3D模型精度的同時,將多邊形的方向資訊進行調整,擴大光照產生的陰影。

UE3在標準情況下,匯入骨架網格時會重新計算頂點法線。這樣就不能反映出在Softimage中編輯的法線。於是程式設計師家弓
對引擎的網格匯入部分進行了自定義,讓編輯後的法線可以在遊戲中使用。

通過改造UE3,調整頂點法線成為可能。但這個方法還有幾個分支選項。
本村:《罪惡工具:X標記》最為重視角色的觀感。對於面部陰影出現的方式花了大量功夫。臉部和頸部是由藝術家手動進
行法線調整的。

比如把臉頰附近的法線調整到和鬢角處接近,在鬢角變暗的時候,臉頰附近也會變暗。通過法線調整實現了讓高精度模型
擁有低精度模型的概括陰影。


木村:一方面,衣服和頭髮使用了Gator。通過轉寫簡單形狀模型的法線分佈,也能讓複雜形狀的模型出現概括的陰影。
索爾的腳步有複雜的形狀。為了實現概括的陰影,開發者準備了大小相近的圓筒模型。通過轉寫圓筒模型的法線進行法線
調整。




這部分不是手動,而是半自動生成的。
《罪惡工具:X標記》角色的頭髮有著相當複雜的形狀。這部分也需要形成符合賽璐璐動畫風格的陰影。通過法線編輯,法
線轉寫,以及建模階段的特殊調整,最終實現了可接受的效果。





lighting和shading之二 鏡面反射控制和模擬子面散射技巧
賽璐璐風格的2D動畫裡,高光的存在感並不明顯。《罪惡工具:X標記》對於高光部分,通過手繪附加高光的法則,將之加
入了光照中。




法則是什麼呢?舉幾個例子。在一起的衣服和面板,位置接近但材質不同,使其高光不連續;在凹凸和材質的邊緣加入物理
上不合理但人能接受的高光。


衣襟,嘴脣,頭髮的高光基本是固定的,根據角度會有粗細的變化。



為了強調肌肉加上了高光



金屬的光澤會隨著角度變化



高光會隨著角度變化出現改變。

高光的控制,會通過照明控制紋理中B通道的高光顯現引數來進行的。這個引數是調整鏡面反射計算結果強弱的。最大就會
出現烘培進去的高光。調小就會衰減高光。

照明控制紋理中的R通道是高光強度引數。
花了這麼多功夫,開發團隊依然不滿足。要達成作為目標的“完全賽璐璐風格”還有什麼不足呢?
本村:是顏色。shading可以產生明暗結果,但這個明暗讓人會有單調的印象。在陰影部分進行單色的陰影乘算,做單純的
TOON處理,材質的說服力和豐富性就表現不足。在電視動畫製作中,有叫色彩設計的專門職務,會進行“這個角色的這個部分
,在被太陽照到的時候是這個顏色,處於陰影中時是這個顏色”那樣,對色彩進行細緻設定的工作。我們認為差別就在這裡。

當然不會進行電視動畫那樣細緻的設定。開發團隊研究認為,電視動畫的色彩設計人員會根據環境光和表現物件材質的透
光率來決定使用的顏色。基於這個推斷,開發團隊實現了接近理想的結果。
實現的方式並不複雜。
首先準備對應3D模型基本紋理的“陰影狀態顏色”分佈紋理。開發團隊為方便將之稱之為SSS紋理(實際並不是子面散射材質)




不使用SSS紋理



使用SSS紋理


 
改變環境光和陰影色的效果

成為陰影的時候,對應的畫素會把SSS紋理的值和環境光的值進行乘算生成陰影的顏色。如果光照判斷為亮部,就無視SSS
紋理的值。畫素就只受光源色的影響。
通過這個區分,開發團隊實現了接近理想的賽璐璐風格彩色。
具體來說,角色面板上出現的陰影會帶上一些紅色,衣服上的陰影會帶上衣服色彩的飽和度
本村:SSS紋理並不是在模擬子面散射。所以這個名稱嚴格來說不正確。補充說明一下,SSS紋理是在直接表現“這個材質

有多透光”。