Create more optimized CSGShape3D baked static mesh

Creates more optimized CSGShape3D baked static mesh by adding indices and cache optimization.
This commit is contained in:
smix8
2025-06-13 21:43:28 +02:00
parent 6f2ab528ca
commit 28875459d9

View File

@@ -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<ArrayMesh> CSGShape3D::bake_static_mesh() {
Ref<ArrayMesh> baked_mesh;
if (is_root_shape() && root_mesh.is_valid()) {
baked_mesh = root_mesh;
Ref<SurfaceTool> 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;
}