Unity醬~ 卡通渲染技術(shù)分析(二)

前面的話

上一篇Unity醬~ 卡通渲染技術(shù)分析(一) 寫了CharaMain.cginc,服裝的渲染是怎么實(shí)現(xiàn)的。這篇來(lái)分析一下頭發(fā)跟皮膚的實(shí)現(xiàn)

頭發(fā)

本來(lái)以為unitychan的頭發(fā)會(huì)有各向異性的實(shí)現(xiàn),沒(méi)想到她也是用的CharaMain.cginc實(shí)現(xiàn)的。我們來(lái)看看頭發(fā)的材質(zhì)


頭發(fā)材質(zhì)

其他實(shí)現(xiàn)都一樣,也是通過(guò)高光反射貼圖來(lái)控制高光區(qū)域跟反射區(qū)域

計(jì)算法線跟視角向量的點(diǎn)積,這樣的效果是越垂直于視角向量的高光越大,然后用RGB貼圖來(lái)控制哪些區(qū)域更容易出高光

RGB

反射依然是用A通道來(lái)控制,越白的地方,反射的越強(qiáng)


Alpha通道

如何實(shí)現(xiàn)皮膚效果

這么漂亮的皮膚,其實(shí)只用了兩個(gè)效果就實(shí)現(xiàn)了

漫反射+邊緣光

這一次我們來(lái)詳細(xì)說(shuō)一下漫反射的實(shí)現(xiàn)

    float_t normalDotEye = dot( i.normal, i.eyeDir );
    float_t falloffU = clamp( 1 - abs( normalDotEye ), 0.02, 0.98 );

還是用法線跟視角向量的點(diǎn)積,并且限制在了0.02到0.98的范圍。
本來(lái)是夾角越小的值越大,夾角越大的值越小,用1 - 去點(diǎn)積的絕對(duì)值后,表示越靠近視角向量的,就越接近0。跟視角向量夾角越大,值也就越大,也就是邊緣的部位值會(huì)越大

    float4_t falloffSamplerColor = FALLOFF_POWER * tex2D( _FalloffSampler, float2( falloffU, 0.25f ) );
    float3_t combinedColor = lerp( diffSamplerColor.rgb, falloffSamplerColor.rgb * diffSamplerColor.rgb, falloffSamplerColor.a );

用剛剛求出來(lái)的值,采樣的這張衰減貼圖,也就是反映出皮膚質(zhì)感的重要一步了!值越大,采樣出的顏色就越接近肉色。也就是越邊緣越接近肉色

FALLOFF_POWER 是一個(gè)衰減系數(shù),skin shader中的值為1,也就是不衰減

skin falloff
皮膚漫反射

再加上邊緣高光

皮膚漫反射+邊緣光

總結(jié)

unity chan的技術(shù)分析差不多完了,主要的技術(shù)特點(diǎn)如下:

  1. 漫反射是用N.V的值去采樣一張衰減貼圖實(shí)現(xiàn)的,這張貼圖還可以用來(lái)實(shí)現(xiàn)皮膚效果
  2. 通過(guò)一張高光反射貼圖來(lái)控制高光的細(xì)節(jié),以及哪些區(qū)域要顯示反射
  3. 邊緣光沒(méi)用菲涅爾反射,而是采樣rim貼圖后去乘以漫反射值得到的邊緣高光
  4. 描邊不是純色的,采樣了紋理顏色,再做了暗化處理

最后再來(lái)兩張照片吧~~ 這套渲染效果其實(shí)還是蠻不錯(cuò)的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容