@@ -525,14 +525,14 @@ void RaycastOcclusionCull::buffer_set_size(RID p_buffer, const Vector2i &p_size)
525
525
buffers[p_buffer].resize (p_size);
526
526
}
527
527
528
- Vector2 RaycastOcclusionCull::_jitter_half_extents (const Vector2 &p_half_extents, const Size2i &p_viewport_size) {
528
+ Vector2 RaycastOcclusionCull::_get_jitter (const Vector2 &p_half_extents, const Size2i &p_viewport_size) {
529
529
if (!_jitter_enabled) {
530
- return p_half_extents ;
530
+ return Vector2 () ;
531
531
}
532
532
533
533
// Prevent divide by zero when using NULL viewport.
534
534
if ((p_viewport_size.x <= 0 ) || (p_viewport_size.y <= 0 )) {
535
- return p_half_extents ;
535
+ return Vector2 () ;
536
536
}
537
537
538
538
int32_t frame = Engine::get_singleton ()->get_frames_drawn ();
@@ -578,7 +578,7 @@ Vector2 RaycastOcclusionCull::_jitter_half_extents(const Vector2 &p_half_extents
578
578
// False shown can lower percentage that are occluded, and therefore performance.
579
579
jitter *= 0 .66f ;
580
580
581
- return p_half_extents + jitter;
581
+ return jitter;
582
582
}
583
583
584
584
void RaycastOcclusionCull::buffer_update (RID p_buffer, const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal) {
@@ -596,8 +596,10 @@ void RaycastOcclusionCull::buffer_update(RID p_buffer, const Transform3D &p_cam_
596
596
scenario.update ();
597
597
598
598
Vector2 viewport_half = p_cam_projection.get_viewport_half_extents ();
599
- Vector2 jitter_viewport_half = _jitter_half_extents (viewport_half, buffer.get_occlusion_buffer_size ());
600
- Vector3 near_bottom_left = Vector3 (-jitter_viewport_half.x , -jitter_viewport_half.y , -p_cam_projection.get_z_near ());
599
+ Vector2 jitter = _get_jitter (viewport_half, buffer.get_occlusion_buffer_size ());
600
+ Vector3 endpoints[8 ];
601
+ p_cam_projection.get_endpoints (Transform3D (), endpoints);
602
+ Vector3 near_bottom_left = Vector3 (jitter.x , jitter.y , 0 ) + endpoints[5 ];
601
603
602
604
buffer.update_camera_rays (p_cam_transform, near_bottom_left, 2 * viewport_half, p_cam_projection.get_z_far (), p_cam_orthogonal);
603
605
0 commit comments