Skip to content

Commit

Permalink
Pass angular diameter into light size constants for sky shaders.
Browse files Browse the repository at this point in the history
This flew under the radar for so long since tan is nearly linear at small values
  • Loading branch information
clayjohn committed Jan 24, 2025
1 parent 7b1ed52 commit 74989c6
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 15 deletions.
7 changes: 1 addition & 6 deletions drivers/gles3/rasterizer_scene_gles3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -708,12 +708,7 @@ void RasterizerSceneGLES3::_setup_sky(const RenderDataGLES3 *p_render_data, cons
sky_light_data.enabled = true;

float angular_diameter = light_storage->light_get_param(base, RS::LIGHT_PARAM_SIZE);
if (angular_diameter > 0.0) {
angular_diameter = Math::tan(Math::deg_to_rad(angular_diameter));
} else {
angular_diameter = 0.0;
}
sky_light_data.size = angular_diameter;
sky_light_data.size = Math::deg_to_rad(angular_diameter);
sky_globals.directional_light_count++;
if (sky_globals.directional_light_count >= sky_globals.max_directional_lights) {
break;
Expand Down
10 changes: 1 addition & 9 deletions servers/rendering/renderer_rd/environment/sky.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1093,15 +1093,7 @@ void SkyRD::setup_sky(const RenderDataRD *p_render_data, const Size2i p_screen_s
sky_light_data.enabled = true;

float angular_diameter = light_storage->light_get_param(base, RS::LIGHT_PARAM_SIZE);
if (angular_diameter > 0.0) {
// I know tan(0) is 0, but let's not risk it with numerical precision.
// Technically this will keep expanding until reaching the sun, but all we care about
// is expanding until we reach the radius of the near plane. There can't be more occluders than that.
angular_diameter = Math::tan(Math::deg_to_rad(angular_diameter));
} else {
angular_diameter = 0.0;
}
sky_light_data.size = angular_diameter;
sky_light_data.size = Math::deg_to_rad(angular_diameter);
sky_scene_state.ubo.directional_light_count++;
if (sky_scene_state.ubo.directional_light_count >= sky_scene_state.max_directional_lights) {
break;
Expand Down

0 comments on commit 74989c6

Please sign in to comment.