Merge pull request #110884 from Kaleb-Reid/fix-spotlight-aabb

Use correct AABB for SpotLight3Ds when `spot_angle > 90`
This commit is contained in:
Thaddeus Crews 2025-10-06 14:34:05 -05:00
commit fdc235f496
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
2 changed files with 16 additions and 2 deletions

View file

@ -350,7 +350,14 @@ AABB LightStorage::light_get_aabb(RID p_light) const {
switch (light->type) {
case RS::LIGHT_SPOT: {
float len = light->param[RS::LIGHT_PARAM_RANGE];
float size = Math::tan(Math::deg_to_rad(light->param[RS::LIGHT_PARAM_SPOT_ANGLE])) * len;
float angle = Math::deg_to_rad(light->param[RS::LIGHT_PARAM_SPOT_ANGLE]);
if (angle > Math::PI * 0.5) {
// Light casts backwards as well.
return AABB(Vector3(-1, -1, -1) * len, Vector3(2, 2, 2) * len);
}
float size = Math::sin(angle) * len;
return AABB(Vector3(-size, -size, -len), Vector3(size * 2, size * 2, len));
};
case RS::LIGHT_OMNI: {

View file

@ -432,7 +432,14 @@ AABB LightStorage::light_get_aabb(RID p_light) const {
switch (light->type) {
case RS::LIGHT_SPOT: {
float len = light->param[RS::LIGHT_PARAM_RANGE];
float size = Math::tan(Math::deg_to_rad(light->param[RS::LIGHT_PARAM_SPOT_ANGLE])) * len;
float angle = Math::deg_to_rad(light->param[RS::LIGHT_PARAM_SPOT_ANGLE]);
if (angle > Math::PI * 0.5) {
// Light casts backwards as well.
return AABB(Vector3(-1, -1, -1) * len, Vector3(2, 2, 2) * len);
}
float size = Math::sin(angle) * len;
return AABB(Vector3(-size, -size, -len), Vector3(size * 2, size * 2, len));
};
case RS::LIGHT_OMNI: {