Last active
December 7, 2018 02:50
-
-
Save baobao/641204cfdcf4b927dd87a93ef258b573 to your computer and use it in GitHub Desktop.
Unityちゃんシェーダ肌部分のフラグメントシェーダに自分なりのコメントを入れたもの
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
float4 frag( v2f i ) : COLOR | |
{ | |
float4_t diffSamplerColor = tex2D( _MainTex, i.uv ); | |
//return float4_t(diffSamplerColor.rgb, diffSamplerColor.a); | |
// ###### 視線ベクトルと法線ベクトルのdot積 | |
float_t eyeDotNormal = dot( i.normal, i.eyeDir ); | |
//return float4_t(eyeDotNormal, eyeDotNormal, eyeDotNormal, diffSamplerColor.a); | |
// ###### 視線ベクトルに対して平行の法線ベクトルだった場合、値は最も小さくなる値 | |
float_t invEyeDotNormalU = clamp( 1 - abs( eyeDotNormal ), 0.02, 0.98 ); | |
//return float4_t(invEyeDotNormalU, invEyeDotNormalU, invEyeDotNormalU, diffSamplerColor.a); | |
// ###### Falloffカラー | |
// uが小さいほど白(0.0)->肌色(1.0) | |
float4_t falloffSamplerColor = FALLOFF_POWER * tex2D( _FalloffSampler, float2( invEyeDotNormalU, 0.9999f ) ); | |
//return float4_t(falloffSamplerColor.rgb, diffSamplerColor.a); | |
float4_t grayscaleSamplerColor = tex2D( _FalloffSampler, float2( invEyeDotNormalU, 0.1f ) ); | |
//return float4_t(grayscaleSamplerColor.rgb, diffSamplerColor.a); | |
// ###### Falloffカラーとデュフューズカラーの合成 | |
// aの値に変化がないので一律でdiffSamplerColor.rgb * falloffSamplerColor.rgbになっている(オリジナル) | |
//float3_t combinedColor = lerp(diffSamplerColor.rgb , diffSamplerColor.rgb * falloffSamplerColor.rgb, falloffSamplerColor.a); | |
// このグラーデーション処理を入れることで、回り込んだ部分に濃い肌色が入る | |
float3_t combinedColor = lerp(diffSamplerColor.rgb , diffSamplerColor.rgb * falloffSamplerColor.rgb, grayscaleSamplerColor.r); | |
//return float4_t(combinedColor, diffSamplerColor.a); | |
// ###### ライトベクトルと法線のdot積 | |
float_t lightDotNormal = dot( i.normal, i.lightDir ); | |
//return float4_t(lightDotNormal, lightDotNormal, lightDotNormal, diffSamplerColor.a); | |
// ###### [0.5 - 1.0]の範囲に変更 | |
float_t lightDotNormal2 = saturate( 0.5 * ( lightDotNormal + 1.0 ) ); | |
//return float4_t(lightDotNormal2, lightDotNormal2, lightDotNormal2, diffSamplerColor.a); | |
// ##### リムライトU座標 視線と交差すると値が大きい | |
float_t rimlightSamplerU = saturate( lightDotNormal2 * invEyeDotNormalU ); | |
//return float4_t(rimlightSamplerU, rimlightSamplerU, rimlightSamplerU, diffSamplerColor.a); | |
// ###### リムライトの強度 | |
// テクスチャからリムライトの強さを取得する | |
float_t rimlightStrength = tex2D( _RimLightSampler, float2( rimlightSamplerU, 0.25f ) ).r; | |
//return float4_t(rimlightStrength, rimlightStrength, rimlightStrength, diffSamplerColor.a); | |
combinedColor += rimlightStrength * diffSamplerColor.rgb; | |
return float4_t(combinedColor, diffSamplerColor.a); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment