2023-10-07 22:18:20 -04:00
|
|
|
// Emin's and Gri's combined ideas to stop peter panning and light leaking, also has little shadowacne so thats nice
|
|
|
|
// https://www.complementary.dev/reimagined
|
|
|
|
// https://github.com/gri573
|
|
|
|
void GriAndEminShadowFix(
|
|
|
|
inout vec3 WorldPos,
|
|
|
|
vec3 FlatNormal,
|
|
|
|
float VanillaAO,
|
2024-03-22 22:11:43 -04:00
|
|
|
float SkyLightmap
|
2023-10-07 22:18:20 -04:00
|
|
|
){
|
2024-06-19 21:44:21 -04:00
|
|
|
// #ifdef DISTANT_HORIZONS_SHADOWMAP
|
|
|
|
// float minimumValue = 0.3;
|
|
|
|
// #else
|
|
|
|
float minimumValue = 0.05;
|
|
|
|
// #endif
|
2023-10-07 22:18:20 -04:00
|
|
|
|
2024-06-19 21:44:21 -04:00
|
|
|
float DistanceOffset = max(length(WorldPos) * 0.005, minimumValue);
|
2024-05-04 21:08:24 -04:00
|
|
|
|
2024-06-19 21:44:21 -04:00
|
|
|
vec3 Bias = FlatNormal * DistanceOffset;
|
2023-10-07 22:18:20 -04:00
|
|
|
|
2024-03-22 22:11:43 -04:00
|
|
|
// stop lightleaking by zooming up, centered on blocks
|
2023-10-07 22:18:20 -04:00
|
|
|
vec2 scale = vec2(0.5); scale.y *= 0.5;
|
|
|
|
vec3 zoomShadow = scale.y - scale.x * fract(WorldPos + cameraPosition + Bias*scale.y);
|
2024-06-19 21:44:21 -04:00
|
|
|
if(SkyLightmap < 0.1) Bias = zoomShadow;
|
2023-10-07 22:18:20 -04:00
|
|
|
|
2024-06-19 21:44:21 -04:00
|
|
|
WorldPos += Bias;
|
2023-10-07 22:18:20 -04:00
|
|
|
}
|