diff options
| author | yum <yum.food.vr@gmail.com> | 2024-10-05 17:32:47 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-10-05 17:32:47 -0700 |
| commit | 144d7bc5cc999b9c5f84a9a7fc2a86dafe276df1 (patch) | |
| tree | f258bc63750ed35720110edc457a1703763daf5d | |
| parent | 54cf2749759045b646282c5e28139510d3e7783e (diff) | |
Fix SSR
| -rw-r--r-- | Editor/tooner.cs | 27 | ||||
| -rw-r--r-- | MochieStandardBRDF.cginc | 6 | ||||
| -rw-r--r-- | feature_macros.cginc | 2 | ||||
| -rw-r--r-- | globals.cginc | 4 | ||||
| -rw-r--r-- | interpolators.cginc | 6 | ||||
| -rw-r--r-- | pbr.cginc | 18 | ||||
| -rw-r--r-- | tooner.shader | 1 | ||||
| -rw-r--r-- | tooner_lighting.cginc | 3 | ||||
| -rw-r--r-- | tooner_outline_pass.cginc | 4 |
9 files changed, 64 insertions, 7 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index d2588b2..8824de5 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -2056,6 +2056,33 @@ public class ToonerGUI : ShaderGUI { bct, bc); SetKeyword("_REFLECTION_STRENGTH_TEX", bct.textureValue); + + bc = FindProperty("_Enable_SSR"); + enabled = bc.floatValue > 1E-6; + EditorGUI.BeginChangeCheck(); + enabled = Toggle("Enable SSR", enabled); + EditorGUI.EndChangeCheck(); + bc.floatValue = enabled ? 1.0f : 0.0f; + SetKeyword("SSR_ENABLED", enabled); + + if (enabled) { + EditorGUI.indentLevel += 1; + + bc = FindProperty("_SSRStrength"); + FloatProperty(bc, "Strength"); + + bc = FindProperty("_SSRHeight"); + FloatProperty(bc, "Height"); + + bc = FindProperty("_SSR_Mask"); + TexturePropertySingleLine( + MakeLabel(bc, "Mask"), + bc); + SetKeyword("SSR_MASK", bc.textureValue); + + EditorGUI.indentLevel -= 1; + } + EditorGUI.indentLevel -= 1; show_ui.RemoveAt(show_ui.Count - 1); } diff --git a/MochieStandardBRDF.cginc b/MochieStandardBRDF.cginc index 1bf85c6..fbf6b66 100644 --- a/MochieStandardBRDF.cginc +++ b/MochieStandardBRDF.cginc @@ -86,7 +86,7 @@ half4 BRDF1_Mochie_PBS ( half3 diffColor, half3 specColor, half oneMinusReflectivity, half smoothness, half3 normal, half3 viewDir, half3 worldPos, half2 screenUVs, half4 screenPos, half metallic, half thickness, half3 ssColor, half atten, float2 lightmapUV, float3 vertexColor, - UnityLight light, UnityIndirect gi, float reflection_strength) + UnityLight light, UnityIndirect gi, float reflection_strength, float ssr_mask) { half perceptualRoughness = SmoothnessToPerceptualRoughness(smoothness); @@ -144,8 +144,8 @@ half4 BRDF1_Mochie_PBS ( ssrCol.rgb *= _SSRStrength; if (_EdgeFade == 0) ssrCol.a = ssrCol.a > 0 ? 1 : 0; - reflCol = lerp(reflCol, ssrCol.rgb, ssrCol.a * saturate(_SSRStrength)); - specCol *= 1-ssrCol.a; + reflCol = lerp(reflCol, ssrCol.rgb, ssrCol.a * saturate(_SSRStrength * ssr_mask)); + specCol *= 1 - ssrCol.a * ssr_mask; #endif half3 subsurfaceCol = 0; diff --git a/feature_macros.cginc b/feature_macros.cginc index daa9b4a..0dcaced 100644 --- a/feature_macros.cginc +++ b/feature_macros.cginc @@ -162,6 +162,8 @@ #pragma shader_feature_local _ _REFLECTION_STRENGTH_TEX #pragma shader_feature_local _ _GIMMICK_AL_CHROMA_00 #pragma shader_feature_local _ _GIMMICK_AL_CHROMA_00_HUE_SHIFT +#pragma shader_feature_local _ SSR_ENABLED +#pragma shader_feature_local _ SSR_MASK #endif // __FEATURE_MACROS_INC diff --git a/globals.cginc b/globals.cginc index 1601ad2..9f73932 100644 --- a/globals.cginc +++ b/globals.cginc @@ -89,8 +89,12 @@ sampler2D _NoiseTexSSR; float4 _GrabTexture_TexelSize; float4 _NoiseTexSSR_TexelSize; float _EdgeFade; +float _Enable_SSR; float _SSRStrength; float _SSRHeight; +#if defined(SSR_MASK) +texture2D _SSR_Mask; +#endif #endif diff --git a/interpolators.cginc b/interpolators.cginc index ce0058a..5942922 100644 --- a/interpolators.cginc +++ b/interpolators.cginc @@ -42,6 +42,8 @@ struct v2f float3 objPos : TEXCOORD11; float3 centerCamPos : TEXCOORD12; + float4 screenPos : TEXCOORD13; + UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; @@ -87,8 +89,10 @@ struct v2f float3 objPos : TEXCOORD12; float3 centerCamPos : TEXCOORD13; + float4 screenPos : TEXCOORD14; + #if defined(VERTEXLIGHT_ON) - float3 vertexLightColor : TEXCOORD14; + float3 vertexLightColor : TEXCOORD15; #endif UNITY_VERTEX_INPUT_INSTANCE_ID @@ -285,7 +285,7 @@ float4 getLitColor( // Do this to avoid division by 0. If both light sources are black, // sum_brightness could be 0; #if defined(_BRIGHTNESS_CLAMP) - brightnesses = max(brightnesses, min(_Min_Brightness, .001)); + brightnesses = max(brightnesses, _Min_Brightness); #endif float sum_brightness = brightnesses[0] + brightnesses[1]; float2 brightness_proportions = brightnesses / sum_brightness; @@ -336,11 +336,24 @@ float4 getLitColor( float2 screenUVs = 0; float4 screenPos = 0; + #if SSR_ENABLED + screenUVs = i.screenPos.xy / (i.screenPos.w+0.0000000001); + #if UNITY_SINGLE_PASS_STEREO || defined(UNITY_STEREO_INSTANCING_ENABLED) || defined(UNITY_STEREO_MULTIVIEW_ENABLED ) + screenUVs.x *= 2; + #endif + screenPos = i.screenPos; + #endif + #if 1 float reflection_strength = _ReflectionStrength; #if defined(_REFLECTION_STRENGTH_TEX) reflection_strength *= _ReflectionStrengthTex.SampleLevel(linear_repeat_s, i.uv0, 0); #endif +#if defined(SSR_MASK) + float ssr_mask = _SSR_Mask.SampleLevel(linear_repeat_s, i.uv0, 0); +#else + float ssr_mask = 1; +#endif float4 pbr = BRDF1_Mochie_PBS( albedo, specular_tint, @@ -359,7 +372,8 @@ float4 getLitColor( vertexLightColor, direct_light, indirect_light, - reflection_strength); + reflection_strength, + ssr_mask); #else float3 pbr = UNITY_BRDF_PBS( albedo, diff --git a/tooner.shader b/tooner.shader index e6bb8ad..5a3abba 100644 --- a/tooner.shader +++ b/tooner.shader @@ -556,6 +556,7 @@ Shader "yum_food/tooner" _Mirror_UV_Flip_Enable_Dynamic("Enable rorschach gimmick", Float) = 0.0 _Enable_SSR("Enable SSR", Float) = 0 + _SSR_Mask("SSR mask", 2D) = "white" {} _SSRStrength("SSR Strength", Float) = 1 _SSRHeight("SSR Height", Float) = 0.1 [HideInInspector]_NoiseTexSSR("SSR Noise Texture", 2D) = "black" {} diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index d503d8f..ad42fa9 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -212,8 +212,11 @@ v2f vert(appdata v) TRANSFER_SHADOW(o); #endif + o.screenPos = ComputeGrabScreenPos(o.pos); + getVertexLightColor(o); + return o; } diff --git a/tooner_outline_pass.cginc b/tooner_outline_pass.cginc index 15a266e..e7591e6 100644 --- a/tooner_outline_pass.cginc +++ b/tooner_outline_pass.cginc @@ -278,6 +278,7 @@ fixed4 frag (v2f i) : SV_Target albedo = _Outline_Color; #if defined(_GIMMICK_AL_CHROMA_00) + float al_chroma_00_emission = 0; if (_Gimmick_AL_Chroma_00_Outline_Pass && AudioLinkIsAvailable()) { float3 c = AudioLinkData(ALPASS_CCSTRIP + uint2(0, 0)).rgb; #if defined(_GIMMICK_AL_CHROMA_00_HUE_SHIFT) @@ -286,6 +287,7 @@ fixed4 frag (v2f i) : SV_Target c = OKLCHtoLRGB(c); #endif albedo.rgb = lerp(albedo.rgb, c, _Gimmick_AL_Chroma_00_Outline_Blend); + al_chroma_00_emission = _Gimmick_AL_Chroma_00_Outline_Emission; } #endif @@ -317,7 +319,7 @@ fixed4 frag (v2f i) : SV_Target result += albedo * _Outline_Emission_Strength; #if defined(_GIMMICK_AL_CHROMA_00) - result += albedo * _Gimmick_AL_Chroma_00_Outline_Emission; + result += albedo * al_chroma_00_emission; #endif #if defined(_EXPLODE) && defined(_AUDIOLINK) |
