崩壞3角色渲染技術分析

2021-02-08 數天技術

我們團隊在過去一年多主要關注卡通渲染效果,本次介紹我們對崩壞3這款遊戲角色渲染的研究和實踐。

先看看我們的效果(截圖造成精度有所下降)。

這次是針對崩壞3角色效果的逆向復現,實現基本的角色效果,不討論角色的特殊效果,比如消失效果這類的特效,主要是還原基本的效果,包括面部表情變化的實現,描邊效果的實現,還有卡通顏色色塊渲染的實現。下面分成三個部分來說明。

我們先看看崩壞3的一張貼圖,下面這張圖:

再看看下面這張圖,注意左邊圖的網格線:

是不是看出了什麼?其實很簡單,就是通過再面部創建出左眼和右眼還有嘴部三個模型,再將眼睛和嘴型的貼圖貼上去,在一張貼圖上繪製出不同的眼睛和嘴型,通過uv縮放和偏移來對應,就能做出不同的表情。

這個shader的實現相對簡單,只要在渲染順序,深度比較,和顏色混合上稍加注意就行,這個可以有多種方案。我選擇是:

1.在渲染面部之後去渲染眼睛和嘴巴模型。

2.加一個偏移Offset -2, 2進行深度比較。

3.混合使用Blend SrcAlpha OneMinusSrcAlpha,就是默認的就行了。

崩壞使用和罪惡裝備同樣的方式, 結合了shell method和z-bias method,並引入了物體的頂點色來控制描邊細節,同時也是為了保證描邊粗細不會隨著攝像機視距發生變化。shell method是在模型的Shader中添加一個額外的pass繪製backface, 在計算頂點的投影變換過程時,將頂點的坐標進行一個 Z方向的修正,讓這個部分超出模型一部分以達到繪製邊緣的效果,同時使用頂點的顏色來控制這個Z方向的位移的強度,這樣就完成了一個基本描邊效果。

        這樣處理會遇到幾個問題,第一,是在什麼空間做的頂點偏移。第二,頂點沿著什麼方向偏移。第三,當角色和攝像機的距離出現遠近變化,描邊粗細變化怎麼控制。

        崩壞3選擇在攝像機空間中讓頂點沿著切線方向偏移,為啥不是法線方向呢?肯定是效果不一樣,這不是廢話嘛。效果的差異就在於,沿著法線方向擠出,產生的描邊粗細比較一致,基本不會變化,看起來比較死板。沿著切線方向擠出,產生的描邊會有粗細變化,隨著視角變化,有的地方會消失,有的地方會變粗。再加上切線不像法線那麼穩定,切線和UV的展開有關係。這樣的效果就會有更多的變化,所以在製作模型時,uv的展開也有一定的要求。

        再來說說角色和攝像機的距離關係,當距離遠時,頂點擠出0.1,當距離近時,頂點也擠出0.1,這樣在畫面看起來角色的描邊就比離的近時粗了很多。崩壞對這個擠出距離進行了修正,通過unity_CameraProjection這個矩陣的第二行第二個元素,對攝像機空間中頂點坐標的z值,和這矩陣的商,來控制頂點的擠出距離。

公式為:Offset= viewPos.z / unity_CameraProjection[1].y;

注意下圖,角色和攝像機角度變化,描邊的變化。

現在到了我們的重點,蹦壞3的風格化渲染。下面的遊戲截圖,可以看到著色是以單色塊為主,有明顯的交界線,交界線有鋸齒,不是平滑曲線。高光隨觀察角度變化而變化,高亮色塊和燈光方向相關。我們再來看看蹦壞3用到的資源,兩張貼圖,頂點顏色。


我們先看看用到的資源的特點,MainTex這是一張基本顏色貼圖,主要使用了RGB三個通道,沒有用到alpha通道。記錄的是角色的基本顏色信息。

LightMapTex這是一張比較複雜貼圖,主要使用了RGB三個通道,沒有用到alpha通道。記錄了豐富的信息,每個顏色通道有不同的用處。下面我們分別看看每個通道的特點和作用。

LightMapTex的G通道,基本可以理解為是一個AO效果。基本的結構陰影關係。

在G通道還對面部做了特殊的繪製,把頭髮的陰影繪製上去了,如下圖。還有臉和鼻子的高亮區域。

LightMapTex的B通道,基本可以理解為控制高光範圍,高光出現的地方。頭髮上的高光,胸部,盔甲,鞋子的部分都是有高光的。這些地方可以繪製的亮一些,沒有高光的地方繪製的很暗。高光可以繪製出形狀和過度,例如胸部和頭髮的高光。在這個通道面部是黑的。

LightMapTex的R通道,基本可以理解為控制高光的強度。不同材質高光強度不同。這個通道可以用來微調材質效果,也可以做些過度。比較身體上相鄰區域,不同材質的地方,高光的強度有較大的差異。體現細節的地方。在這個通道面部是黑的,也就意味著面部不會出現高光。 

頂點顏色R通道,基本可以理解成LightMapTex的G通道的補充。下圖左邊是頂點顏色R通道,右邊是LightMap的G通道,基本上頂點的R通道是強化大的暗面。但是臉部保持白色。

頂點顏色的G和B通道用處暫時不明。

頂點顏色A通道,基本可以理解成控制描邊的。下圖的頭髮發梢,給的基本是黑色,可以看到左邊是使用了A通道的,發梢描邊會更細,更自然,中間沒有用A通道控制,發梢描邊沒什麼粗細變化。右圖就是A通道描邊的展示,描黑的地方都是描邊不擠出的地方。

 

通過上面對資源的介紹和分析,我們再來看看角色shader的計算。

第一步是對角色的顏色分塊,分成幾個部分三個顏色部分,基礎顏色和兩層陰影顏色。

這三個部分的顏色:

基礎顏色是MainTex貼圖的顏色;

第一層陰影顏色是MainTex* _FirstShadowMultColor

第二層陰影顏色是MainTex* _SecondShadowMultColor

分塊的算法:

dotNL =dot(worldNormal,worldLightDir) * 0.5 + 0.5;tmpvar =vertexColor.x  *  LightMapTex*.y;tmpvar = ( tmpvar+ dotNL) * 0.5;if(tmpvar < _SecondShadow){        Color =  MainTex  * _SecondShadowMultColor;}else{        If(tmpvar < _LightArea)  {        Color =  MainTex  * _FirstShadowMultColor;  }esle  {        Color =  MainTex;  }}

可以看出顏色分塊和燈光方向相關,燈光方向的dot的值(-1,1)重映射到了(0,1),頂點顏色的R通道和LightMap的G通道相乘,最後兩者相加後乘以0.5。去和_SecondShadow值進行比較,小於_SecondShadow的是第二層陰影,大於等於_SecondShadow的再和_LightArea進行比較,小於_LightArea的是第一層陰影。大於等於_LightArea的是亮面,也就是MainTex基礎顏色。這種比較方式肯定會帶來鋸齒,很硬的過度。從遊戲畫面也能看到鋸齒線條。

第二步計算高光顏色。

先算出視角向量viewDir,注意是在世界空間中的視角向量:

viewDir = normalize(_WorldSpaceCameraPos  -  worldPos);

再算出:

halfDir = normalize(viewDir + _WorldSpaceLightPos0.xyz);

然後:

specularThreshold = pow(max(dot(worldNormal,halfDir),0.0),_Shininess);if(specularThreshold >= (1.0 -lightMap.z)){        specularColor= _LightSpecColor * _SpecMulti * lightMap.r;}else{        specularColor= float3(0.0,0.0,0.0);}

在這高光的計算中,用到了燈光方向,攝像機方向,求出了折半方向。這是指向視圖和光線向量中間的方向。再計算specularThreshold高光的範圍,用normal和折半方向的dot值,映射到(0,1),和_Shininess乘方。最後specularThreshold和1減去Lightmap的B通道進行比較。大於等於的地方有高光,其餘地方就為零。高光顏色用_LightSpecColor高光顏色和_SpecMulti高光強度相乘得到。高光顏色再乘以LightMap的R通道,高光的最終顏色就得到了。因此LightMap的B通道可以控制高光範圍,值越暗高光範圍越小,值越大高光範圍約大。LightMap的R通道可以分區域控制高光的強度,值越大高光越亮。

第三步顏色合成。

outColor = Color + specularColor;

這步很簡單,此處不做過多說明。

下面的都是用來調節的一些屬性變量:

_SecondShadow 調節第二暗部的範圍

_LightArea調節第一暗部的範圍

_SecondShadowMultColor第二暗部顏色調整

_FirstShadowMultColor 第一暗部顏色調整

_SpecMulti 高光強度

_Shininess 高光範圍

_LightSpecColor 高光顏色

最後我們使用完成的shader進行的嘗試

我們製作了一個角色,也做了相應的資源,測試效果。

今天的分享就先到這兒咯,我們下期分享再見~

相關焦點

  • 《崩壞3》如何做卡通渲染?
    訪問三文娛網站3wyu.com查看產業必讀文章米哈遊技術總監賀甲《崩壞3》的案例分享,包括這款人氣二次元遊戲的渲染特性,動畫風格CG
  • 技術分享|《原神》部分渲染效果分析(非官方)
    就是設置一個與光照角度一致的正交相機跟隨角色進行拍攝,設定一定的拍攝範圍,並在邊緣進行陰影過度。然後使用Project將渲染的圖投影到地面即可。好處是投影的距離可控,投影的物體和接收陰影的物體可控,陰影解析度高,且不進行燈光深度繪製的草上也可以繪製陰影,一句話就是性能較好。
  • 《崩壞3》朔夜觀星怎麼樣 朔夜觀星角色強度分析
    導 讀 崩壞3朔夜觀星怎麼樣?崩壞3最近公布了全新角色朔夜觀星,這次的新角色是德麗莎新女武神。這次的朔夜觀星屬於長流程物理輔助。
  • 【技術解碼】任天堂新作《火焰紋章:風花雪月》角色渲染分析
    《火焰紋章:風花雪月》角色渲染主要分為兩種,第一種為近距離展示,渲染比較精細,非常接近立繪畫面,第二種是大地圖戰鬥中的角色渲染,是立繪渲染的簡化版。當然,劉海投影渲染也有例外,例如瑪麗安奴這個角色,為了體現角色性格,劉海下方和下眼瞼都畫上了暗面。
  • 崩壞3與EVA聯動,明日香作為全新角色登場!
    崩壞3是一款3D動作遊戲,特效、打擊感、畫質、語音、建模一直都是遊戲內比較頂尖的存在!不僅僅是遊戲,手辦、周邊、漫畫、小說都是很好的!近日,崩壞3又有新的消息。崩壞3和EVA迎來了聯動,下個版本應該會有1G多的更新包。明日香作為新的女武神加入到崩壞3 的大家庭中。明日香在劇情中被稱為使徒,劇情得到新的發展。從圖片上來看,該角色的特效、攻擊方式都是很炫酷的。據玩家分析,這個角色應該是火元素的角色。以火元素聖痕為主、QTE和分支都會有新的動作。可玩度有上升了人一個檔次。
  • 手遊推薦《崩壞3》
    首先作為一個遊戲時間佔據我人生半數以上時間的人,我接觸的遊戲基本是各大主機遊戲以及pc的現象級網遊,手遊來說屬於輕度玩家,但是對這樣我的依然被《崩壞3》給吸引了,因此我想簡單談一下《崩壞3》是如何吸引我的,並且和一些可以作為放棄《崩壞3》的理由。
  • 崩壞3、黑色沙漠手遊畫面對比 誰是畫質之王?
    在國內,目前公認的畫質比較厲害的手遊是米哈遊二次元作品《崩壞3》,這款遊戲的畫面渲染、戰鬥場面展示以及畫面細節刻畫都是王者級別的,與眾多遊戲大廠推出的作品相比有過之而無不及。那麼《黑色沙漠》手遊臺服版本的到來,會讓《崩壞3》在中文手遊領域的「畫面地位」屈居第二嗎?本期筆者將和大家對比《崩壞3》和《黑色沙漠》手遊的畫面,看看誰是真正的畫質之王。
  • 《崩壞3》失落迷迭角色怎麼樣 失落迷迭角色強度一覽
    導 讀 崩壞3失落迷迭怎麼樣?
  • 崩壞3v4.4角色強度排行榜
    崩壞3v4.4版本什麼角色最強?崩壞3在4.4版本中推出了新角色不滅星錨,所以在4.4版本中角色強度榜也發生了一些變化,下面就為大家帶來崩壞3v4.4角色強度排行榜。崩壞3v4.4角色強度排行榜輸出型角色強度排行榜:輔助型及全能型角色強度排行榜:新增部分:1、不滅星錨作為全新火傷輸出角色
  • 《崩壞3》幽蘭戴爾怎麼樣 幽蘭戴爾角色強度點評
    導 讀 崩壞3幽蘭戴爾角色怎麼樣?
  • 從崩壞3到原神,米哈遊的角色設計思路沒變,為啥鍾離引發熱議?
    但在最近,因為新五星角色巖神鍾離的登場,原神又一次被推上了風口浪尖,官方不止一次地被玩家懟上熱搜。對此,ACG次元飯君在了解具體情況後,對比分析了原神官方,也就是米哈遊的其它遊戲,其實從中可以發現一些有趣的事情。
  • 崩壞3希兒芙樂艾聖痕誰用合適 希兒芙樂艾聖痕分析
    導 讀 崩壞3希兒芙樂艾聖痕誰用合適?
  • 崩壞3:「白頭髮」都是親女兒,深入分析卡蘿爾的實戰玩法
    3#各位艦長好,我是你們的好朋友拾柒。導讀:眾所周知,崩壞3中的女武神只要是白頭髮都會受到策劃的寵愛。就是傳說的親女兒,到了後崩壞書中,米哈遊依舊堅守了這個「傳統」。我們的新晉女武神卡羅爾也繼承了這一特性。那麼,今天,我想給大家帶來的內容就是破甲小能手,後崩壞書中的白頭髮。一.卡蘿爾女武神背景首先我們都知道,卡蘿爾是崩壞3的開放地圖後崩壞書的一個角色。
  • 崩壞3EVA聯動角色是誰 崩壞3EVA聯動聯動女武神介紹
    崩壞3EVA聯動角色是誰?崩壞3在最近的直播中公布了新的聯動活動,這次的聯動內容是EVA。而和之前的聯動活動不同,這次聯動將首次增加聯動的女武神角色。EVA中高人氣的角色還是很多的,那這次聯動的角色是誰呢?這裡就帶來了聯動角色的介紹。
  • 《崩壞3》新拳套神之鍵羽渡塵怎麼樣 技能介紹及分析
    導 讀 崩壞3新全套神之鍵羽渡塵到來了,許多玩家都想知道羽渡塵的技能是什麼強不強,畢竟這是和我們的戰鬥息息相關的
  • 《崩壞3》新超限武器空無之境永劫數據分析
    最近《崩壞3》在體驗服悄悄上線了新的超限武器-空無之鑰,相信很多玩家對這把女王專屬的武器相當期待,難道女王要從下水道裡面衝出來了?本期就給大家帶來這把武器的詳細介紹以及分析,一起來看看吧。 【空無之境:永劫】
  • 崩壞3西琳升華聖痕實測分析
    崩壞3西琳升華聖痕值得抽嗎?西琳升華聖痕的在光之境的UP池中已經更新,那麼西琳升華聖痕怎麼樣?值不值得抽?小編這就為玩家們帶來實測分析。西琳聖痕實測分析及光之境UP池抽取推薦頂級裝備:強力角色畢業:空無之鑰(超限)、斷光之努亞達(超限)、彼岸之扉、西琳·升華套、石川五右衛門中下、迪拉克中屬性較為不錯:仿靈刀·冰曇天(超限)、猶大的誓約、米開朗基羅套、羅伯特·皮裡套、迪拉克上下屬性較差
  • 崩壞3角色翼展越來越寬,遊戲穿模太嚴重
    眾所周知,在《崩壞3》的主線劇情裡,大多數強敵並非來自「反派」,而是隱藏在遊戲各個角色之中。從芽衣、布諾妮亞,再到性格越來越清晰的渡鴉,《崩壞3》的章節劇情幾乎全都是「自己打自己」。
  • 《崩壞3》4.0版本新角色觀星 角色裝備推薦
    《崩壞3》最新即將登場的輔助角色德莉莎觀星,相信不少小夥伴都已經屯好星石打算直接升到3s了,本期就給大家帶來這位新角色的裝備推薦,小夥伴們近期可以早早備好聖痕啦~【武器推薦】畢業武器中期武器上圖這把武器,垃圾屋有時候會遇到,主動技能釋放後可以使得怪物進入眩暈狀態,同時提高我方角色的物理傷害加成,實戰效果表現應該相當不錯,有能力的大佬可以換一個試試。萌新武器隨便帶把十字架就ok,觀星只是輔助角色。
  • 崩壞3:三崩子究竟優秀在哪裡?一半的艦長都是因這10個原因才入坑
    「崩壞3敢說國內3D渲染手機遊戲第一人,沒人敢稱第二」這句話是本仙子說的。因為崩壞3在本仙子心中是生活的信陽,是內心平和的寄託。自從有了崩壞3之後,發現生活中多了很多小美好。不僅是本仙子,崩壞3能夠讓很多艦長都一一入坑還是有某些原因的。那麼崩壞3為什麼讓人喜愛?