summaryrefslogtreecommitdiffstats
path: root/pbr.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-08-30 14:24:59 -0700
committeryum <yum.food.vr@gmail.com>2024-08-30 14:24:59 -0700
commit2ea62b8fc899cab47e6e23da9168a42ecd6ddf45 (patch)
treec42724bf73ab60dfc00f308815bb291f70b41d63 /pbr.cginc
parentc72069f69f451a4e369f01ac3dac3961740127b5 (diff)
Add lit glitter logic
Also fix prox dimming. It should occur *after* the non-specular brightness budget correction.
Diffstat (limited to 'pbr.cginc')
-rw-r--r--pbr.cginc30
1 files changed, 16 insertions, 14 deletions
diff --git a/pbr.cginc b/pbr.cginc
index 4750838..9f5600d 100644
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -256,14 +256,28 @@ float4 getLitColor(
indirect_light.diffuse[1] *= _Reflection_Probe_Saturation;
}
+ float2 brightnesses = float2(
+ direct_light.color[2],
+ indirect_light.diffuse[2]);
+ // Do this to avoid division by 0. If both light sources are black,
+ // sum_brightness could be 0;
+ brightnesses = max(brightnesses, min(_Min_Brightness, .001));
+ float sum_brightness = brightnesses[0] + brightnesses[1];
+ float2 brightness_proportions = brightnesses / sum_brightness;
+ sum_brightness = clamp(sum_brightness, _Min_Brightness, _Max_Brightness);
+ direct_light.color[2] = sum_brightness * brightness_proportions[0];
+ indirect_light.diffuse[2] = sum_brightness * brightness_proportions[1];
+
#if defined(_PROXIMITY_DIMMING)
{
float cam_dist = length(_WorldSpaceCameraPos - worldPos);
+ // Map onto [min, max]
cam_dist = clamp(cam_dist, _Proximity_Dimming_Min_Dist,
_Proximity_Dimming_Max_Dist);
+ // Map onto [0, max - min]
+ cam_dist -= _Proximity_Dimming_Min_Dist;
// Map onto [0, 1]
- cam_dist = (cam_dist - _Proximity_Dimming_Min_Dist) /
- (_Proximity_Dimming_Max_Dist - _Proximity_Dimming_Min_Dist);
+ cam_dist /= _Proximity_Dimming_Max_Dist - _Proximity_Dimming_Min_Dist;
float dim_factor = lerp(_Proximity_Dimming_Factor, 1, cam_dist);
direct_light.color[2] *= dim_factor;
indirect_light.diffuse[2] *= dim_factor;
@@ -271,18 +285,6 @@ float4 getLitColor(
}
#endif
- float2 brightnesses = float2(
- direct_light.color[2],
- indirect_light.diffuse[2]);
- // Do this to avoid division by 0. If both light sources are black,
- // sum_brightness could be 0;
- brightnesses = max(brightnesses, min(_Min_Brightness, .001));
- float sum_brightness = brightnesses[0] + brightnesses[1];
- float2 brightness_proportions = brightnesses / sum_brightness;
- sum_brightness = clamp(sum_brightness, _Min_Brightness, _Max_Brightness);
- direct_light.color[2] = sum_brightness * brightness_proportions[0];
- indirect_light.diffuse[2] = sum_brightness * brightness_proportions[1];
-
direct_light.color[2] *= _Lighting_Factor * _Direct_Lighting_Factor * enable_direct;
indirect_light.specular[2] *= _Lighting_Factor *
_Indirect_Specular_Lighting_Factor *