From fc6de82e75310b4c007d80753a5f58e6692f4855 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 13 Oct 2020 10:33:05 +0800 Subject: +misc --- Assets/Art/Shaders/UnityChan/CharaSkin.cginc | 202 +++++++++++++-------------- 1 file changed, 101 insertions(+), 101 deletions(-) (limited to 'Assets/Art/Shaders/UnityChan/CharaSkin.cginc') diff --git a/Assets/Art/Shaders/UnityChan/CharaSkin.cginc b/Assets/Art/Shaders/UnityChan/CharaSkin.cginc index 15fb97ab..1f6d45be 100644 --- a/Assets/Art/Shaders/UnityChan/CharaSkin.cginc +++ b/Assets/Art/Shaders/UnityChan/CharaSkin.cginc @@ -2,104 +2,104 @@ // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' -// Character skin shader -// Includes falloff shadow - -#define ENABLE_CAST_SHADOWS - -// Material parameters -float4 _Color; -float4 _ShadowColor; -float4 _LightColor0; -float4 _MainTex_ST; - -// Textures -sampler2D _MainTex; -sampler2D _FalloffSampler; -sampler2D _RimLightSampler; - -// Constants -#define FALLOFF_POWER 1.0 - -#ifdef ENABLE_CAST_SHADOWS - -// Structure from vertex shader to fragment shader -struct v2f -{ - float4 pos : SV_POSITION; - LIGHTING_COORDS( 0, 1 ) - float3 normal : TEXCOORD2; - float2 uv : TEXCOORD3; - float3 eyeDir : TEXCOORD4; - float3 lightDir : TEXCOORD5; -}; - -#else - -// Structure from vertex shader to fragment shader -struct v2f -{ - float4 pos : SV_POSITION; - float3 normal : TEXCOORD0; - float2 uv : TEXCOORD1; - float3 eyeDir : TEXCOORD2; - float3 lightDir : TEXCOORD3; -}; - -#endif - -// Float types -#define float_t half -#define float2_t half2 -#define float3_t half3 -#define float4_t half4 - -// Vertex shader -v2f vert( appdata_base v ) -{ - v2f o; - o.pos = UnityObjectToClipPos( v.vertex ); - o.uv = TRANSFORM_TEX( v.texcoord.xy, _MainTex ); - o.normal = normalize( mul( unity_ObjectToWorld, float4_t( v.normal, 0 ) ).xyz ); - - // Eye direction vector - float4_t worldPos = mul( unity_ObjectToWorld, v.vertex ); - o.eyeDir = normalize( _WorldSpaceCameraPos - worldPos ); - - o.lightDir = WorldSpaceLightDir( v.vertex ); - -#ifdef ENABLE_CAST_SHADOWS - TRANSFER_VERTEX_TO_FRAGMENT( o ); -#endif - - return o; -} - -// Fragment shader -float4 frag( v2f i ) : COLOR -{ - float4_t diffSamplerColor = tex2D( _MainTex, i.uv ); - - // Falloff. Convert the angle between the normal and the camera direction into a lookup for the gradient - float_t normalDotEye = dot( i.normal, i.eyeDir ); - float_t falloffU = clamp( 1 - abs( normalDotEye ), 0.02, 0.98 ); - float4_t falloffSamplerColor = FALLOFF_POWER * tex2D( _FalloffSampler, float2( falloffU, 0.25f ) ); - float3_t combinedColor = lerp( diffSamplerColor.rgb, falloffSamplerColor.rgb * diffSamplerColor.rgb, falloffSamplerColor.a ); - - // Rimlight - float_t rimlightDot = saturate( 0.5 * ( dot( i.normal, i.lightDir ) + 1.0 ) ); - falloffU = saturate( rimlightDot * falloffU ); - //falloffU = saturate( ( rimlightDot * falloffU - 0.5 ) * 32.0 ); - falloffU = tex2D( _RimLightSampler, float2( falloffU, 0.25f ) ).r; - float3_t lightColor = diffSamplerColor.rgb * 0.5; // * 2.0; - combinedColor += falloffU * lightColor; - -#ifdef ENABLE_CAST_SHADOWS - // Cast shadows - float3_t shadowColor = _ShadowColor.rgb * combinedColor; - float_t attenuation = saturate( 2.0 * LIGHT_ATTENUATION( i ) - 1.0 ); - combinedColor = lerp( shadowColor, combinedColor, attenuation ); -#endif - - return float4_t( combinedColor, diffSamplerColor.a ) * _Color * _LightColor0; -} +// Character skin shader +// Includes falloff shadow + +#define ENABLE_CAST_SHADOWS + +// Material parameters +float4 _Color; +float4 _ShadowColor; +float4 _LightColor0; +float4 _MainTex_ST; + +// Textures +sampler2D _MainTex; +sampler2D _FalloffSampler; +sampler2D _RimLightSampler; + +// Constants +#define FALLOFF_POWER 1.0 + +#ifdef ENABLE_CAST_SHADOWS + +// Structure from vertex shader to fragment shader +struct v2f +{ + float4 pos : SV_POSITION; + LIGHTING_COORDS( 0, 1 ) + float3 normal : TEXCOORD2; + float2 uv : TEXCOORD3; + float3 eyeDir : TEXCOORD4; + float3 lightDir : TEXCOORD5; +}; + +#else + +// Structure from vertex shader to fragment shader +struct v2f +{ + float4 pos : SV_POSITION; + float3 normal : TEXCOORD0; + float2 uv : TEXCOORD1; + float3 eyeDir : TEXCOORD2; + float3 lightDir : TEXCOORD3; +}; + +#endif + +// Float types +#define float_t half +#define float2_t half2 +#define float3_t half3 +#define float4_t half4 + +// Vertex shader +v2f vert( appdata_base v ) +{ + v2f o; + o.pos = UnityObjectToClipPos( v.vertex ); + o.uv = TRANSFORM_TEX( v.texcoord.xy, _MainTex ); + o.normal = normalize( mul( unity_ObjectToWorld, float4_t( v.normal, 0 ) ).xyz ); + + // Eye direction vector + float4_t worldPos = mul( unity_ObjectToWorld, v.vertex ); + o.eyeDir = normalize( _WorldSpaceCameraPos - worldPos ); + + o.lightDir = WorldSpaceLightDir( v.vertex ); + +#ifdef ENABLE_CAST_SHADOWS + TRANSFER_VERTEX_TO_FRAGMENT( o ); +#endif + + return o; +} + +// Fragment shader +float4 frag( v2f i ) : COLOR +{ + float4_t diffSamplerColor = tex2D( _MainTex, i.uv ); + + // Falloff. Convert the angle between the normal and the camera direction into a lookup for the gradient + float_t normalDotEye = dot( i.normal, i.eyeDir ); + float_t falloffU = clamp( 1 - abs( normalDotEye ), 0.02, 0.98 ); + float4_t falloffSamplerColor = FALLOFF_POWER * tex2D( _FalloffSampler, float2( falloffU, 0.25f ) ); + float3_t combinedColor = lerp( diffSamplerColor.rgb, falloffSamplerColor.rgb * diffSamplerColor.rgb, falloffSamplerColor.a ); + + // Rimlight + float_t rimlightDot = saturate( 0.5 * ( dot( i.normal, i.lightDir ) + 1.0 ) ); + falloffU = saturate( rimlightDot * falloffU ); + //falloffU = saturate( ( rimlightDot * falloffU - 0.5 ) * 32.0 ); + falloffU = tex2D( _RimLightSampler, float2( falloffU, 0.25f ) ).r; + float3_t lightColor = diffSamplerColor.rgb * 0.5; // * 2.0; + combinedColor += falloffU * lightColor; + +#ifdef ENABLE_CAST_SHADOWS + // Cast shadows + float3_t shadowColor = _ShadowColor.rgb * combinedColor; + float_t attenuation = saturate( 2.0 * LIGHT_ATTENUATION( i ) - 1.0 ); + combinedColor = lerp( shadowColor, combinedColor, attenuation ); +#endif + + return float4_t( combinedColor, diffSamplerColor.a ) * _Color * _LightColor0; +} -- cgit v1.1-26-g67d0