diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/io/io_usd.c | 10 | ||||
-rw-r--r-- | source/blender/io/usd/intern/usd_capi.cc | 7 | ||||
-rw-r--r-- | source/blender/io/usd/intern/usd_writer_abstract.cc | 14 | ||||
-rw-r--r-- | source/blender/io/usd/intern/usd_writer_abstract.h | 4 | ||||
-rw-r--r-- | source/blender/io/usd/intern/usd_writer_mesh.cc | 9 | ||||
-rw-r--r-- | source/blender/io/usd/usd.h | 1 |
6 files changed, 43 insertions, 2 deletions
diff --git a/source/blender/editors/io/io_usd.c b/source/blender/editors/io/io_usd.c index 096dc44c758..45ea52bdebc 100644 --- a/source/blender/editors/io/io_usd.c +++ b/source/blender/editors/io/io_usd.c @@ -113,6 +113,7 @@ static int wm_usd_export_exec(bContext *C, wmOperator *op) MEM_SAFE_FREE(op->customdata); const bool selected_objects_only = RNA_boolean_get(op->ptr, "selected_objects_only"); + const bool visible_objects_only = RNA_boolean_get(op->ptr, "visible_objects_only"); const bool export_animation = RNA_boolean_get(op->ptr, "export_animation"); const bool export_hair = RNA_boolean_get(op->ptr, "export_hair"); const bool export_uvmaps = RNA_boolean_get(op->ptr, "export_uvmaps"); @@ -128,6 +129,7 @@ static int wm_usd_export_exec(bContext *C, wmOperator *op) export_normals, export_materials, selected_objects_only, + visible_objects_only, use_instancing, evaluation_mode, }; @@ -149,6 +151,7 @@ static void wm_usd_export_draw(bContext *UNUSED(C), wmOperator *op) col = uiLayoutColumn(box, true); uiItemR(col, ptr, "selected_objects_only", 0, NULL, ICON_NONE); + uiItemR(col, ptr, "visible_objects_only", 0, NULL, ICON_NONE); col = uiLayoutColumn(box, true); uiItemR(col, ptr, "export_animation", 0, NULL, ICON_NONE); @@ -192,6 +195,13 @@ void WM_OT_usd_export(struct wmOperatorType *ot) "exported as empty transform"); RNA_def_boolean(ot->srna, + "visible_objects_only", + true, + "Visible Only", + "Only visible objects are exported. Invisible parents of exported objects are " + "exported as empty transform"); + + RNA_def_boolean(ot->srna, "export_animation", false, "Animation", diff --git a/source/blender/io/usd/intern/usd_capi.cc b/source/blender/io/usd/intern/usd_capi.cc index 98aef62f38e..a7c5ff1a305 100644 --- a/source/blender/io/usd/intern/usd_capi.cc +++ b/source/blender/io/usd/intern/usd_capi.cc @@ -76,7 +76,12 @@ static void export_startjob(void *customdata, // Construct the depsgraph for exporting. Scene *scene = DEG_get_input_scene(data->depsgraph); ViewLayer *view_layer = DEG_get_input_view_layer(data->depsgraph); - DEG_graph_build_from_view_layer(data->depsgraph, data->bmain, scene, view_layer); + if (data->params.visible_objects_only) { + DEG_graph_build_from_view_layer(data->depsgraph, data->bmain, scene, view_layer); + } + else { + DEG_graph_build_for_all_objects(data->depsgraph, data->bmain, scene, view_layer); + } BKE_scene_graph_update_tagged(data->depsgraph, data->bmain); *progress = 0.0f; diff --git a/source/blender/io/usd/intern/usd_writer_abstract.cc b/source/blender/io/usd/intern/usd_writer_abstract.cc index a416941fb4d..4910b7f11dd 100644 --- a/source/blender/io/usd/intern/usd_writer_abstract.cc +++ b/source/blender/io/usd/intern/usd_writer_abstract.cc @@ -114,6 +114,20 @@ pxr::UsdShadeMaterial USDAbstractWriter::ensure_usd_material(Material *material) return usd_material; } +void USDAbstractWriter::write_visibility(const HierarchyContext &context, + const pxr::UsdTimeCode timecode, + pxr::UsdGeomImageable &usd_geometry) +{ + pxr::UsdAttribute attr_visibility = usd_geometry.CreateVisibilityAttr(pxr::VtValue(), true); + + const bool is_visible = context.is_object_visible( + usd_export_context_.export_params.evaluation_mode); + const pxr::TfToken visibility = is_visible ? pxr::UsdGeomTokens->inherited : + pxr::UsdGeomTokens->invisible; + + usd_value_writer_.SetAttribute(attr_visibility, pxr::VtValue(visibility), timecode); +} + } // namespace usd } // namespace io } // namespace blender diff --git a/source/blender/io/usd/intern/usd_writer_abstract.h b/source/blender/io/usd/intern/usd_writer_abstract.h index a689deaf0d8..248bdd22a3b 100644 --- a/source/blender/io/usd/intern/usd_writer_abstract.h +++ b/source/blender/io/usd/intern/usd_writer_abstract.h @@ -72,6 +72,10 @@ class USDAbstractWriter : public AbstractHierarchyWriter { pxr::UsdTimeCode get_export_time_code() const; pxr::UsdShadeMaterial ensure_usd_material(Material *material); + + void write_visibility(const HierarchyContext &context, + const pxr::UsdTimeCode timecode, + pxr::UsdGeomImageable &usd_geometry); }; } // namespace usd diff --git a/source/blender/io/usd/intern/usd_writer_mesh.cc b/source/blender/io/usd/intern/usd_writer_mesh.cc index b27c68a41f6..75d1ca605d4 100644 --- a/source/blender/io/usd/intern/usd_writer_mesh.cc +++ b/source/blender/io/usd/intern/usd_writer_mesh.cc @@ -42,6 +42,8 @@ #include "DNA_object_fluidsim_types.h" #include "DNA_particle_types.h" +#include <iostream> + namespace blender { namespace io { namespace usd { @@ -52,7 +54,10 @@ USDGenericMeshWriter::USDGenericMeshWriter(const USDExporterContext &ctx) : USDA bool USDGenericMeshWriter::is_supported(const HierarchyContext *context) const { - return context->is_object_visible(usd_export_context_.export_params.evaluation_mode); + if (usd_export_context_.export_params.visible_objects_only) { + return context->is_object_visible(usd_export_context_.export_params.evaluation_mode); + } + return true; } void USDGenericMeshWriter::do_write(HierarchyContext &context) @@ -149,6 +154,8 @@ void USDGenericMeshWriter::write_mesh(HierarchyContext &context, Mesh *mesh) const pxr::SdfPath &usd_path = usd_export_context_.usd_path; pxr::UsdGeomMesh usd_mesh = pxr::UsdGeomMesh::Define(stage, usd_path); + write_visibility(context, timecode, usd_mesh); + USDMeshData usd_mesh_data; get_geometry_data(mesh, usd_mesh_data); diff --git a/source/blender/io/usd/usd.h b/source/blender/io/usd/usd.h index f2826cd1d7c..b9ea90736ff 100644 --- a/source/blender/io/usd/usd.h +++ b/source/blender/io/usd/usd.h @@ -35,6 +35,7 @@ struct USDExportParams { bool export_normals; bool export_materials; bool selected_objects_only; + bool visible_objects_only; bool use_instancing; enum eEvaluationMode evaluation_mode; }; |