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


前面的話

上一篇Unity醬~ 卡通渲染技術分析(一) 寫了CharaMain.cginc,服裝的渲染是怎么實現的。這篇來分析一下頭發跟皮膚的實現

頭發

本來以為unitychan的頭發會有各向異性的實現,沒想到她也是用的CharaMain.cginc實現的。我們來看看頭發的材質
頭發材質
其他實現都一樣,也是通過高光反射貼圖來控制高光區域跟反射區域

計算法線跟視角向量的點積,這樣的效果是越垂直於視角向量的高光越大,然后用RGB貼圖來控制哪些區域更容易出高光

RGB

反射依然是用A通道來控制,越白的地方,反射的越強
Alpha通道

如何實現皮膚效果

這么漂亮的皮膚,其實只用了兩個效果就實現了

漫反射+邊緣光

這一次我們來詳細說一下漫反射的實現

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

還是用法線跟視角向量的點積,並且限制在了0.02到0.98的范圍。
本來是夾角越小的值越大,夾角越大的值越小,用1 - 去點積的絕對值后,表示越靠近視角向量的,就越接近0。跟視角向量夾角越大,值也就越大,也就是邊緣的部位值會越大

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

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

FALLOFF_POWER 是一個衰減系數,skin shader中的值為1,也就是不衰減

skin falloff

皮膚漫反射

再加上邊緣高光

皮膚漫反射+邊緣光

總結

unity chan的技術分析差不多完了,主要的技術特點如下:

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

最后再來兩張照片吧~~ 這套渲染效果其實還是蠻不錯的


免責聲明!

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



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