Browse Source

Fix occlusion culling jitter

Florent Guiocheau 8 months ago
parent
commit
6960b33cbb
1 changed files with 4 additions and 6 deletions
  1. 4 6
      modules/raycast/raycast_occlusion_cull.cpp

+ 4 - 6
modules/raycast/raycast_occlusion_cull.cpp

@@ -536,8 +536,6 @@ Projection RaycastOcclusionCull::_jitter_projection(const Projection &p_cam_proj
 		return p_cam_projection;
 	}
 
-	Projection p = p_cam_projection;
-
 	int32_t frame = Engine::get_singleton()->get_frames_drawn();
 	frame %= 9;
 
@@ -577,11 +575,11 @@ Projection RaycastOcclusionCull::_jitter_projection(const Projection &p_cam_proj
 	// Higher divergence gives fewer false hidden, but more false shown.
 	// False hidden is obvious to viewer, false shown is not.
 	// False shown can lower percentage that are occluded, and therefore performance.
-	jitter *= Vector2(1 / (float)p_viewport_size.x, 1 / (float)p_viewport_size.y) * 0.05f;
-
-	p.add_jitter_offset(jitter);
+	jitter *= Vector2(1 / (float)p_viewport_size.x, 1 / (float)p_viewport_size.y) * 0.9f;
 
-	return p;
+	Projection correction;
+	correction.add_jitter_offset(jitter);
+	return correction * p_cam_projection;
 }
 
 void RaycastOcclusionCull::buffer_update(RID p_buffer, const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal) {