summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Editor/tooner.cs27
-rw-r--r--MochieStandardBRDF.cginc6
-rw-r--r--feature_macros.cginc2
-rw-r--r--globals.cginc4
-rw-r--r--interpolators.cginc6
-rw-r--r--pbr.cginc18
-rw-r--r--tooner.shader1
-rw-r--r--tooner_lighting.cginc3
-rw-r--r--tooner_outline_pass.cginc4
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
diff --git a/pbr.cginc b/pbr.cginc
index 9955d0d..0da16dc 100644
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -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)