Skip to content

Instantly share code, notes, and snippets.

@baobao
Last active December 7, 2018 02:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save baobao/641204cfdcf4b927dd87a93ef258b573 to your computer and use it in GitHub Desktop.
Save baobao/641204cfdcf4b927dd87a93ef258b573 to your computer and use it in GitHub Desktop.
Unityちゃんシェーダ肌部分のフラグメントシェーダに自分なりのコメントを入れたもの
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