You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Ensure Sky with custom fov has correction matrix applied to it in RD renderers
This commit is contained in:
@@ -1187,6 +1187,17 @@ void SkyRD::setup_sky(const RenderDataRD *p_render_data, const Size2i p_screen_s
|
|||||||
projection[2].y = -projection[2].y;
|
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;
|
sky_scene_state.cam_projection = correction * projection;
|
||||||
|
|
||||||
// Our info in our UBO is only used if we're rendering stereo.
|
// Our info in our UBO is only used if we're rendering stereo.
|
||||||
@@ -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);
|
Basis sky_transform = RendererSceneRenderRD::get_singleton()->environment_get_sky_orientation(p_env);
|
||||||
sky_transform.invert();
|
sky_transform.invert();
|
||||||
|
|
||||||
float custom_fov = RendererSceneRenderRD::get_singleton()->environment_get_sky_custom_fov(p_env);
|
|
||||||
|
|
||||||
// Camera
|
// Camera
|
||||||
Projection projection = sky_scene_state.cam_projection;
|
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;
|
sky_transform = sky_transform * sky_scene_state.cam_transform.basis;
|
||||||
|
|
||||||
if (shader_data->uses_quarter_res) {
|
if (shader_data->uses_quarter_res) {
|
||||||
@@ -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);
|
Basis sky_transform = RendererSceneRenderRD::get_singleton()->environment_get_sky_orientation(p_env);
|
||||||
sky_transform.invert();
|
sky_transform.invert();
|
||||||
|
|
||||||
float custom_fov = RendererSceneRenderRD::get_singleton()->environment_get_sky_custom_fov(p_env);
|
|
||||||
|
|
||||||
// Camera
|
// Camera
|
||||||
Projection projection = sky_scene_state.cam_projection;
|
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;
|
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];
|
PipelineCacheRD *pipeline = &shader_data->pipelines[sky_scene_state.view_count > 1 ? SKY_VERSION_BACKGROUND_MULTIVIEW : SKY_VERSION_BACKGROUND];
|
||||||
|
|||||||
Reference in New Issue
Block a user