summaryrefslogtreecommitdiffstats
path: root/servers
diff options
context:
space:
mode:
authorClay John <claynjohn@gmail.com>2024-10-24 21:06:56 -0700
committerGitHub <noreply@github.com>2024-10-24 21:06:56 -0700
commit78a4e634f08b8d2e6825695dad45abc11792fa6f (patch)
treef6841d8b41ea2da0eb229650020ef601bf312fce /servers
parente952651f891ec8447aed59ad4e9f33291099cb8e (diff)
parented3f990952c11c742fc4cc412caa7368efef3fa1 (diff)
downloadredot-engine-78a4e634f08b8d2e6825695dad45abc11792fa6f.tar.gz
Merge pull request #98257 from Rudolph-B/94210-B
Fix to occlusion culling where all math is based on Euclidean distance.
Diffstat (limited to 'servers')
-rw-r--r--servers/rendering/renderer_scene_occlusion_cull.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/servers/rendering/renderer_scene_occlusion_cull.h b/servers/rendering/renderer_scene_occlusion_cull.h
index df403c5484..0ef92dd9ff 100644
--- a/servers/rendering/renderer_scene_occlusion_cull.h
+++ b/servers/rendering/renderer_scene_occlusion_cull.h
@@ -72,7 +72,7 @@ public:
return false;
}
- float min_depth = -closest_point_view.z * 0.95f;
+ float min_depth = (closest_point - p_cam_position).length();
Vector2 rect_min = Vector2(FLT_MAX, FLT_MAX);
Vector2 rect_max = Vector2(FLT_MIN, FLT_MIN);
@@ -83,6 +83,10 @@ public:
Vector3 corner = Vector3(p_bounds[0] * c.x + p_bounds[3] * nc.x, p_bounds[1] * c.y + p_bounds[4] * nc.y, p_bounds[2] * c.z + p_bounds[5] * nc.z);
Vector3 view = p_cam_inv_transform.xform(corner);
+ if (p_cam_projection.is_orthogonal()) {
+ min_depth = MIN(min_depth, view.z);
+ }
+
Plane vp = Plane(view, 1.0);
Plane projected = p_cam_projection.xform4(vp);