From 1158452ec7b4839c6b00c19eb446e5f2091c3b6a Mon Sep 17 00:00:00 2001 From: Slaynash Date: Thu, 5 Dec 2024 16:53:32 +0100 Subject: [PATCH] [DH] Beacon beams depth-test --- shaders/lib/util/spaceConversion.glsl | 16 +++++++++++++++- shaders/program/gbuffers_beaconbeam.glsl | 13 +++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/shaders/lib/util/spaceConversion.glsl b/shaders/lib/util/spaceConversion.glsl index 31639a9a..0c9ac094 100644 --- a/shaders/lib/util/spaceConversion.glsl +++ b/shaders/lib/util/spaceConversion.glsl @@ -25,4 +25,18 @@ vec3 ShadowClipToShadowView(vec3 pos) { vec3 ShadowViewToPlayer(vec3 pos) { return mat3(shadowModelViewInverse) * pos; -} \ No newline at end of file +} + +// Distant Horizon +#ifdef DISTANT_HORIZONS + +vec3 ScreenToViewDH(vec3 pos) { + vec4 iProjDiag = vec4(dhProjectionInverse[0].x, + dhProjectionInverse[1].y, + dhProjectionInverse[2].zw); + vec3 p3 = pos * 2.0 - 1.0; + vec4 viewPos = iProjDiag * p3.xyzz + dhProjectionInverse[3]; + return viewPos.xyz / viewPos.w; +} + +#endif \ No newline at end of file diff --git a/shaders/program/gbuffers_beaconbeam.glsl b/shaders/program/gbuffers_beaconbeam.glsl index 384762c8..d6935cb7 100644 --- a/shaders/program/gbuffers_beaconbeam.glsl +++ b/shaders/program/gbuffers_beaconbeam.glsl @@ -41,6 +41,19 @@ void main() { #else vec3 viewPos = ScreenToView(screenPos); #endif + + #ifdef DISTANT_HORIZONS + vec3 screenPosDH = vec3(screenPos.xy, texture2D(dhDepthTex, screenPos.xy).r); + #ifdef TAA + vec3 viewPosDH = ScreenToViewDH(vec3(TAAJitter(screenPosDH.xy, -0.5), screenPosDH.z)); + #else + vec3 viewPosDH = ScreenToViewDH(screenPosDH); + #endif + + if (viewPos.z < viewPosDH.z) + discard; + #endif + float lViewPos = length(viewPos); #ifdef IPBR