Skip to content

Commit

Permalink
Ensure Sky with custom fov has correction matrix applied to it in RD …
Browse files Browse the repository at this point in the history
…renderers
  • Loading branch information
clayjohn committed Jan 4, 2025
1 parent bdf625b commit 96ce5c0
Showing 1 changed file with 11 additions and 22 deletions.
33 changes: 11 additions & 22 deletions servers/rendering/renderer_rd/environment/sky.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1187,6 +1187,17 @@ void SkyRD::setup_sky(const RenderDataRD *p_render_data, const Size2i p_screen_s
projection[2].y = -projection[2].y;
}

float custom_fov = RendererSceneRenderRD::get_singleton()->environment_get_sky_custom_fov(p_render_data->environment);

if (custom_fov && sky_scene_state.view_count == 1) {
// With custom fov we don't support stereo...
float near_plane = projection.get_z_near();
float far_plane = projection.get_z_far();
float aspect = projection.get_aspect();

projection.set_perspective(custom_fov, aspect, near_plane, far_plane);
}

sky_scene_state.cam_projection = correction * projection;

// Our info in our UBO is only used if we're rendering stereo.
Expand Down Expand Up @@ -1450,20 +1461,9 @@ void SkyRD::update_res_buffers(Ref<RenderSceneBuffersRD> p_render_buffers, RID p
Basis sky_transform = RendererSceneRenderRD::get_singleton()->environment_get_sky_orientation(p_env);
sky_transform.invert();

float custom_fov = RendererSceneRenderRD::get_singleton()->environment_get_sky_custom_fov(p_env);

// Camera
Projection projection = sky_scene_state.cam_projection;

if (custom_fov && sky_scene_state.view_count == 1) {
// With custom fov we don't support stereo...
float near_plane = projection.get_z_near();
float far_plane = projection.get_z_far();
float aspect = projection.get_aspect();

projection.set_perspective(custom_fov, aspect, near_plane, far_plane);
}

sky_transform = sky_transform * sky_scene_state.cam_transform.basis;

if (shader_data->uses_quarter_res) {
Expand Down Expand Up @@ -1551,20 +1551,9 @@ void SkyRD::draw_sky(RD::DrawListID p_draw_list, Ref<RenderSceneBuffersRD> p_ren
Basis sky_transform = RendererSceneRenderRD::get_singleton()->environment_get_sky_orientation(p_env);
sky_transform.invert();

float custom_fov = RendererSceneRenderRD::get_singleton()->environment_get_sky_custom_fov(p_env);

// Camera
Projection projection = sky_scene_state.cam_projection;

if (custom_fov && sky_scene_state.view_count == 1) {
// With custom fov we don't support stereo...
float near_plane = projection.get_z_near();
float far_plane = projection.get_z_far();
float aspect = projection.get_aspect();

projection.set_perspective(custom_fov, aspect, near_plane, far_plane);
}

sky_transform = sky_transform * sky_scene_state.cam_transform.basis;

PipelineCacheRD *pipeline = &shader_data->pipelines[sky_scene_state.view_count > 1 ? SKY_VERSION_BACKGROUND_MULTIVIEW : SKY_VERSION_BACKGROUND];
Expand Down

0 comments on commit 96ce5c0

Please sign in to comment.