summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--globals.cginc5
-rw-r--r--matcaps.cginc10
-rw-r--r--yum_brdf.cginc18
3 files changed, 20 insertions, 13 deletions
diff --git a/globals.cginc b/globals.cginc
index cfde8a1..c5fa966 100644
--- a/globals.cginc
+++ b/globals.cginc
@@ -114,6 +114,7 @@ float _Matcap0_Invert;
float _Matcap0_Strength;
#if defined(_MATCAP0_MASK)
texture2D _Matcap0_Mask;
+float4 _Matcap0_Mask_ST;
#endif
#if defined(_MATCAP0_QUANTIZATION)
float _Matcap0_Quantization_Steps;
@@ -129,6 +130,7 @@ float _Rim_Lighting0_Brightness;
uint _Rim_Lighting0_Target_Mask;
#if defined(_RIM_LIGHTING0_MASK)
texture2D _Rim_Lighting0_Mask;
+float4 _Rim_Lighting0_Mask_ST;
#endif
#if defined(_RIM_LIGHTING0_ANGLE_LIMIT)
float2 _Rim_Lighting0_Angle_Limit_Target_Vector;
@@ -148,6 +150,7 @@ float _Rim_Lighting1_Brightness;
uint _Rim_Lighting1_Target_Mask;
#if defined(_RIM_LIGHTING1_MASK)
texture2D _Rim_Lighting1_Mask;
+float4 _Rim_Lighting1_Mask_ST;
#endif
#if defined(_RIM_LIGHTING1_ANGLE_LIMIT)
float2 _Rim_Lighting1_Angle_Limit_Target_Vector;
@@ -167,6 +170,7 @@ float _Rim_Lighting2_Brightness;
uint _Rim_Lighting2_Target_Mask;
#if defined(_RIM_LIGHTING2_MASK)
texture2D _Rim_Lighting2_Mask;
+float4 _Rim_Lighting2_Mask_ST;
#endif
#if defined(_RIM_LIGHTING2_ANGLE_LIMIT)
float2 _Rim_Lighting2_Angle_Limit_Target_Vector;
@@ -186,6 +190,7 @@ float _Rim_Lighting3_Brightness;
uint _Rim_Lighting3_Target_Mask;
#if defined(_RIM_LIGHTING3_MASK)
texture2D _Rim_Lighting3_Mask;
+float4 _Rim_Lighting3_Mask_ST;
#endif
#if defined(_RIM_LIGHTING3_ANGLE_LIMIT)
float2 _Rim_Lighting3_Angle_Limit_Target_Vector;
diff --git a/matcaps.cginc b/matcaps.cginc
index ceb9918..8cc983b 100644
--- a/matcaps.cginc
+++ b/matcaps.cginc
@@ -86,7 +86,7 @@ void applyMatcapsAndRimLighting(v2f i, inout YumPbr pbr, inout YumLighting l) {
m0 = lerp(m0, 1 - m0, _Matcap0_Invert);
m0 *= _Matcap0_Strength;
#if defined(_MATCAP0_MASK)
- float m0_mask = _Matcap0_Mask.Sample(linear_repeat_s, i.uv01.xy);
+ float m0_mask = _Matcap0_Mask.Sample(linear_repeat_s, UV_SCOFF(i, _Matcap0_Mask_ST, /*which_channel=*/0));
#else
float m0_mask = 1;
#endif
@@ -108,7 +108,7 @@ void applyMatcapsAndRimLighting(v2f i, inout YumPbr pbr, inout YumLighting l) {
#endif
float3 rl0 = _Rim_Lighting0_Color * _Rim_Lighting0_Brightness * rl0_dist;
#if defined(_RIM_LIGHTING0_MASK)
- float rl0_mask = _Rim_Lighting0_Mask.Sample(linear_repeat_s, i.uv01.xy);
+ float rl0_mask = _Rim_Lighting0_Mask.Sample(linear_repeat_s, UV_SCOFF(i, _Rim_Lighting0_Mask_ST, /*which_channel=*/0));
#else
float rl0_mask = 1;
#endif
@@ -126,7 +126,7 @@ void applyMatcapsAndRimLighting(v2f i, inout YumPbr pbr, inout YumLighting l) {
#endif
float3 rl1 = _Rim_Lighting1_Color * _Rim_Lighting1_Brightness * rl1_dist;
#if defined(_RIM_LIGHTING1_MASK)
- float rl1_mask = _Rim_Lighting1_Mask.Sample(linear_repeat_s, i.uv01.xy);
+ float rl1_mask = _Rim_Lighting1_Mask.Sample(linear_repeat_s, UV_SCOFF(i, _Rim_Lighting1_Mask_ST, /*which_channel=*/0));
#else
float rl1_mask = 1;
#endif
@@ -144,7 +144,7 @@ void applyMatcapsAndRimLighting(v2f i, inout YumPbr pbr, inout YumLighting l) {
#endif
float3 rl2 = _Rim_Lighting2_Color * _Rim_Lighting2_Brightness * rl2_dist;
#if defined(_RIM_LIGHTING2_MASK)
- float rl2_mask = _Rim_Lighting2_Mask.Sample(linear_repeat_s, i.uv01.xy);
+ float rl2_mask = _Rim_Lighting2_Mask.Sample(linear_repeat_s, UV_SCOFF(i, _Rim_Lighting2_Mask_ST, /*which_channel=*/0));
#else
float rl2_mask = 1;
#endif
@@ -162,7 +162,7 @@ void applyMatcapsAndRimLighting(v2f i, inout YumPbr pbr, inout YumLighting l) {
#endif
float3 rl3 = _Rim_Lighting3_Color * _Rim_Lighting3_Brightness * rl3_dist;
#if defined(_RIM_LIGHTING3_MASK)
- float rl3_mask = _Rim_Lighting3_Mask.Sample(linear_repeat_s, i.uv01.xy);
+ float rl3_mask = _Rim_Lighting3_Mask.Sample(linear_repeat_s, UV_SCOFF(i, _Rim_Lighting3_Mask_ST, /*which_channel=*/0));
#else
float rl3_mask = 1;
#endif
diff --git a/yum_brdf.cginc b/yum_brdf.cginc
index ab1730b..8b7af77 100644
--- a/yum_brdf.cginc
+++ b/yum_brdf.cginc
@@ -58,7 +58,7 @@ float3 clearcoatLobe(float roughness, float f0,
return (D * V) * F * PI;
}
-#endif // _CLEARCOAT
+#endif
float4 YumBRDF(v2f i, const YumLighting light, YumPbr pbr) {
const float3 h = normalize(light.view_dir + light.dir);
@@ -104,16 +104,18 @@ float4 YumBRDF(v2f i, const YumLighting light, YumPbr pbr) {
const float NoH_cc = saturate(dot(cc_normal, h));
const float NoL_cc = saturate(dot(cc_normal, light.dir));
#if defined(_WRAPPED_LIGHTING)
- const float NoL_cc_wrapped = saturate((NoL_cc + light.wrapped) / (1.0 + light.wrapped));
+ const float NoL_cc_wrapped_s = saturate(wrapNoL(NoL_cc, _Wrap_NoL_Specular_Strength));
+ const float NoL_cc_wrapped_d = saturate(wrapNoL(NoL_cc, _Wrap_NoL_Diffuse_Strength));
#else
- const float NoL_cc_wrapped = NoL_cc;
+ const float NoL_cc_wrapped_s = NoL_cc;
+ const float NoL_cc_wrapped_d = NoL_cc;
#endif
// Calculate clearcoat DFG terms with cc normal
const float3 clearcoat_dfg = PrefilteredDFG_LUT(clearcoat_perceptual_roughness, NoV_cc);
const float clearcoat_E = specularDFG(clearcoat_dfg, clearcoat_f0);
const float clearcoat_energy_compensation = energyCompensation(clearcoat_dfg, clearcoat_f0);
-#endif // _CLEARCOAT
+#endif
float3 direct;
{
@@ -124,14 +126,14 @@ float4 YumBRDF(v2f i, const YumLighting light, YumPbr pbr) {
float3 Fr = specularLobe(pbr, f0, h, LoH, NoH, NoV, NoL_wrapped_s);
#if defined(_CLEARCOAT)
- float Fcr = clearcoatLobe(clearcoat_roughness, clearcoat_f0, h, LoH, NoH_cc, NoV_cc, NoL_cc_wrapped);
+ float Fcr = clearcoatLobe(clearcoat_roughness, clearcoat_f0, h, LoH, NoH_cc, NoV_cc, NoL_cc_wrapped_s);
Fcr *= clearcoat_strength * clearcoat_energy_compensation;
float clearcoat_factor = 1.0 - clearcoat_strength * F_Schlick(clearcoat_f0, NoV_cc);
float3 color = (Fd * NoL_wrapped_d + Fr * energy_compensation * NoL_wrapped_s) * clearcoat_factor +
- Fcr * NoL_cc_wrapped;
+ Fcr * NoL_cc_wrapped_s;
#else
float3 color = Fd * NoL_wrapped_d + Fr * energy_compensation * NoL_wrapped_s;
-#endif // _CLEARCOAT
+#endif
direct = color * light.direct;
}
@@ -147,7 +149,7 @@ float4 YumBRDF(v2f i, const YumLighting light, YumPbr pbr) {
indirect = (Fr + Fd) * clearcoat_factor + Fcr;
#else
indirect = Fr + Fd;
-#endif // _CLEARCOAT
+#endif
}
return float4(direct + indirect, pbr.albedo.a);