Skip to content

Commit

Permalink
Calculate instance depth after shadow calculation in VisualServer
Browse files Browse the repository at this point in the history
  • Loading branch information
TokisanGames committed Jul 22, 2021
1 parent 40b5731 commit 0964179
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions servers/visual/visual_server_scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2547,9 +2547,6 @@ void VisualServerScene::_prepare_scene(const Transform p_cam_transform, const Ca

geom->gi_probes_dirty = false;
}
Vector3 aabb_center = ins->transformed_aabb.position + (ins->transformed_aabb.size * 0.5);
ins->depth = near_plane.distance_to(aabb_center);
ins->depth_layer = CLAMP(int(ins->depth * 16 / z_far), 0, 15);
}

if (!keep) {
Expand Down Expand Up @@ -2698,6 +2695,17 @@ void VisualServerScene::_prepare_scene(const Transform p_cam_transform, const Ca
}
}
}

// Calculate instance->depth from the camera, after shadow calculation has stopped overwriting instance->depth
for (int i = 0; i < instance_cull_count; i++) {
Instance *ins = instance_cull_result[i];

if (((1 << ins->base_type) & VS::INSTANCE_GEOMETRY_MASK) && ins->visible && ins->cast_shadows != VS::SHADOW_CASTING_SETTING_SHADOWS_ONLY) {
Vector3 aabb_center = ins->transformed_aabb.position + (ins->transformed_aabb.size * 0.5);
ins->depth = near_plane.distance_to(aabb_center);
ins->depth_layer = CLAMP(int(ins->depth * 16 / z_far), 0, 15);
}
}
}

void VisualServerScene::_render_scene(const Transform p_cam_transform, const CameraMatrix &p_cam_projection, const int p_eye, bool p_cam_orthogonal, RID p_force_environment, RID p_scenario, RID p_shadow_atlas, RID p_reflection_probe, int p_reflection_probe_pass) {
Expand Down

0 comments on commit 0964179

Please sign in to comment.