diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp index ebb7d24bf63..e655904f2e8 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -36,6 +36,7 @@ #include "core/math/geometry_2d.h" #include "scene/resources/3d/navigation_mesh_source_geometry_data_3d.h" #include "scene/resources/navigation_mesh.h" +#include "scene/resources/surface_tool.h" #ifndef NAVIGATION_3D_DISABLED #include "servers/navigation_server_3d.h" #endif // NAVIGATION_3D_DISABLED @@ -736,7 +737,19 @@ void CSGShape3D::update_shape() { Ref CSGShape3D::bake_static_mesh() { Ref baked_mesh; if (is_root_shape() && root_mesh.is_valid()) { - baked_mesh = root_mesh; + Ref st; + st.instantiate(); + + int surface_count = root_mesh->get_surface_count(); + for (int i = 0; i < surface_count; i++) { + st->append_from(root_mesh, i, Transform3D()); + } + st->generate_normals(); + st->generate_tangents(); + st->index(); + st->optimize_indices_for_cache(); + + baked_mesh = st->commit(); } return baked_mesh; }