Tiny fix for lightmapper DDA
- Ensures only one axis advances at a time - This fixes extremely corner cases where the DDA may skip over geometry
This commit is contained in:
parent
13a0d6e9b2
commit
caef2be758
|
@ -105,7 +105,7 @@ void LightmapGIEditorPlugin::_bake_select_file(const String &p_file) {
|
|||
EditorNode::get_singleton()->show_warning(TTR("Lightmap data is not local to the scene."));
|
||||
} break;
|
||||
case LightmapGI::BAKE_ERROR_TEXTURE_SIZE_TOO_SMALL: {
|
||||
EditorNode::get_singleton()->show_warning(TTR("Maximum texture size is too small for the lightmap images."));
|
||||
EditorNode::get_singleton()->show_warning(TTR("Maximum texture size is too small for the lightmap images.\nWhile this can be fixed by increasing the maximum texture size, it is recommended you split the scene into more objects instead."));
|
||||
} break;
|
||||
default: {
|
||||
} break;
|
||||
|
|
|
@ -264,7 +264,16 @@ uint trace_ray(vec3 p_from, vec3 p_to, bool p_any_hit, out float r_distance, out
|
|||
break;
|
||||
}
|
||||
|
||||
bvec3 mask = lessThanEqual(side.xyz, min(side.yzx, side.zxy));
|
||||
// There should be only one axis updated at a time for DDA to work properly.
|
||||
bvec3 mask = bvec3(true, false, false);
|
||||
float m = side.x;
|
||||
if (side.y < m) {
|
||||
m = side.y;
|
||||
mask = bvec3(false, true, false);
|
||||
}
|
||||
if (side.z < m) {
|
||||
mask = bvec3(false, false, true);
|
||||
}
|
||||
side += vec3(mask) * delta;
|
||||
icell += ivec3(vec3(mask)) * step;
|
||||
iters++;
|
||||
|
|
Loading…
Reference in New Issue