From 0c57232f78c7c23491eea93e9d73ddf866bfa3e1 Mon Sep 17 00:00:00 2001 From: Orange Anvil Games Date: Sat, 15 Feb 2025 15:41:37 +0100 Subject: [PATCH] fix voxelizer normals --- scene/3d/voxelizer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scene/3d/voxelizer.cpp b/scene/3d/voxelizer.cpp index 711b265bb64..a4c36deabde 100644 --- a/scene/3d/voxelizer.cpp +++ b/scene/3d/voxelizer.cpp @@ -399,6 +399,9 @@ int Voxelizer::get_bake_steps(Ref &p_mesh) const { Voxelizer::BakeResult Voxelizer::plot_mesh(const Transform3D &p_xform, Ref &p_mesh, const Vector> &p_materials, const Ref &p_override_material, BakeStepFunc p_bake_step_func) { ERR_FAIL_COND_V_MSG(!p_xform.is_finite(), BAKE_RESULT_INVALID_PARAMETER, "Invalid mesh bake transform."); + // Precalculate for transforming vertex normals + Basis normal_xform = p_xform.basis.inverse().transposed(); + int bake_total = get_bake_steps(p_mesh), bake_current = 0; for (int i = 0; i < p_mesh->get_surface_count(); i++) { @@ -463,7 +466,7 @@ Voxelizer::BakeResult Voxelizer::plot_mesh(const Transform3D &p_xform, Ref if (nr) { for (int k = 0; k < 3; k++) { - normal[k] = nr[ir[j * 3 + k]]; + normal[k] = normal_xform.xform(nr[ir[j * 3 + k]]).normalized(); } }