From b126aa89f297880d1546c08ccd225f282ae368d2 Mon Sep 17 00:00:00 2001 From: Charles Wardlaw Date: Wed, 24 Apr 2024 17:01:54 -0400 Subject: [PATCH 1/3] USD: Added mesh validation on import as an option. --- source/blender/editors/io/io_usd.cc | 10 +++++++++- source/blender/io/usd/intern/usd_reader_mesh.cc | 11 +++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/io/io_usd.cc b/source/blender/editors/io/io_usd.cc index 768cbad3f13..9409ab1644b 100644 --- a/source/blender/editors/io/io_usd.cc +++ b/source/blender/editors/io/io_usd.cc @@ -578,6 +578,8 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op) const eUSDAttrImportMode attr_import_mode = eUSDAttrImportMode( RNA_enum_get(op->ptr, "attr_import_mode")); + const bool validate_meshes = RNA_boolean_get(op->ptr, "validate_meshes"); + /* TODO(makowalski): Add support for sequences. */ const bool is_sequence = false; int offset = 0; @@ -589,7 +591,6 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op) blender::ed::object::mode_set(C, OB_MODE_EDIT); } - const bool validate_meshes = false; const bool use_instancing = false; const eUSDTexImportMode import_textures_mode = eUSDTexImportMode( @@ -674,6 +675,7 @@ static void wm_usd_import_draw(bContext * /*C*/, wmOperator *op) uiItemR(col, ptr, "read_mesh_uvs", UI_ITEM_NONE, nullptr, ICON_NONE); uiItemR(col, ptr, "read_mesh_colors", UI_ITEM_NONE, nullptr, ICON_NONE); uiItemR(col, ptr, "read_mesh_attributes", UI_ITEM_NONE, nullptr, ICON_NONE); + uiItemR(col, ptr, "validate_meshes", UI_ITEM_NONE, nullptr, ICON_NONE); col = uiLayoutColumnWithHeading(box, true, IFACE_("Include")); uiItemR(col, ptr, "import_subdiv", UI_ITEM_NONE, IFACE_("Subdivision"), ICON_NONE); uiItemR(col, ptr, "support_scene_instancing", UI_ITEM_NONE, nullptr, ICON_NONE); @@ -884,6 +886,12 @@ void WM_OT_usd_import(wmOperatorType *ot) USD_ATTR_IMPORT_ALL, "Import Custom Properties", "Behavior when importing USD attributes as Blender custom properties"); + + RNA_def_boolean(ot->srna, + "validate_meshes", + false, + "Validate Meshes", + "Validate meshes for degenerate geometry on import"); } namespace blender::ed::io { diff --git a/source/blender/io/usd/intern/usd_reader_mesh.cc b/source/blender/io/usd/intern/usd_reader_mesh.cc index da2f04ff717..98205fbf9f7 100644 --- a/source/blender/io/usd/intern/usd_reader_mesh.cc +++ b/source/blender/io/usd/intern/usd_reader_mesh.cc @@ -31,6 +31,8 @@ #include "DNA_object_types.h" #include "DNA_windowmanager_types.h" +#include "WM_api.hh" + #include "MEM_guardedalloc.h" #include @@ -922,6 +924,9 @@ Mesh *USDMeshReader::read_mesh(Mesh *existing_mesh, * the topology is consistent, as in the Alembic importer. */ ImportSettings settings; + if (settings_) { + settings.validate_meshes = settings_->validate_meshes; + } settings.read_flag |= params.read_flags; if (topology_changed(existing_mesh, params.motion_sample_time)) { @@ -948,6 +953,12 @@ Mesh *USDMeshReader::read_mesh(Mesh *existing_mesh, } } + if (settings.validate_meshes) { + if (BKE_mesh_validate(active_mesh, false, false)) { + WM_reportf(RPT_INFO, "Fixed mesh for prim: %s", mesh_prim_.GetPath().GetText()); + } + } + return active_mesh; } -- 2.30.2 From 536144a8a0cd25801deb3efa06c3a09b67ea5adc Mon Sep 17 00:00:00 2001 From: Charles Wardlaw Date: Wed, 24 Apr 2024 17:45:52 -0400 Subject: [PATCH 2/3] Ran make format --- source/blender/editors/io/io_usd.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/io/io_usd.cc b/source/blender/editors/io/io_usd.cc index 9409ab1644b..9b35a47a471 100644 --- a/source/blender/editors/io/io_usd.cc +++ b/source/blender/editors/io/io_usd.cc @@ -888,10 +888,10 @@ void WM_OT_usd_import(wmOperatorType *ot) "Behavior when importing USD attributes as Blender custom properties"); RNA_def_boolean(ot->srna, - "validate_meshes", - false, - "Validate Meshes", - "Validate meshes for degenerate geometry on import"); + "validate_meshes", + false, + "Validate Meshes", + "Validate meshes for degenerate geometry on import"); } namespace blender::ed::io { -- 2.30.2 From ce631fb438b935525262b6a4914b7c8ef6d7785b Mon Sep 17 00:00:00 2001 From: Charles Wardlaw Date: Wed, 24 Apr 2024 18:56:30 -0400 Subject: [PATCH 3/3] Addressing comments from @deadpin. --- source/blender/editors/io/io_usd.cc | 2 +- source/blender/io/usd/intern/usd_reader_mesh.cc | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/io/io_usd.cc b/source/blender/editors/io/io_usd.cc index 9b35a47a471..58638bfac31 100644 --- a/source/blender/editors/io/io_usd.cc +++ b/source/blender/editors/io/io_usd.cc @@ -891,7 +891,7 @@ void WM_OT_usd_import(wmOperatorType *ot) "validate_meshes", false, "Validate Meshes", - "Validate meshes for degenerate geometry on import"); + "Check imported mesh objects for invalid data (slow)"); } namespace blender::ed::io { diff --git a/source/blender/io/usd/intern/usd_reader_mesh.cc b/source/blender/io/usd/intern/usd_reader_mesh.cc index 98205fbf9f7..7575e0747a9 100644 --- a/source/blender/io/usd/intern/usd_reader_mesh.cc +++ b/source/blender/io/usd/intern/usd_reader_mesh.cc @@ -31,8 +31,6 @@ #include "DNA_object_types.h" #include "DNA_windowmanager_types.h" -#include "WM_api.hh" - #include "MEM_guardedalloc.h" #include @@ -955,7 +953,7 @@ Mesh *USDMeshReader::read_mesh(Mesh *existing_mesh, if (settings.validate_meshes) { if (BKE_mesh_validate(active_mesh, false, false)) { - WM_reportf(RPT_INFO, "Fixed mesh for prim: %s", mesh_prim_.GetPath().GetText()); + BKE_reportf(reports(), RPT_INFO, "Fixed mesh for prim: %s", mesh_prim_.GetPath().GetText()); } } -- 2.30.2