Commit: 4271ae24716f23a4a98a880b3d6700f8184c320c Author: Sybren A. Stüvel Date: Wed Jun 26 11:55:33 2019 +0200 Branches: sybren-usd https://developer.blender.org/rB4271ae24716f23a4a98a880b3d6700f8184c320c
USD: only write timeSamples when we write animated data By using the default timecode USD won't even write a single `timeSample` for non-animated data. Instead, it writes it as non-timesampled. This makes the USD file more explicit of our intent, and allows for read-time optimisations. =================================================================== M source/blender/usd/intern/usd_exporter_context.h M source/blender/usd/intern/usd_hierarchy_iterator.cc M source/blender/usd/intern/usd_writer_abstract.cc M source/blender/usd/intern/usd_writer_abstract.h M source/blender/usd/intern/usd_writer_mesh.cc M source/blender/usd/intern/usd_writer_transform.cc =================================================================== diff --git a/source/blender/usd/intern/usd_exporter_context.h b/source/blender/usd/intern/usd_exporter_context.h index 5483d6f49ed..598103765af 100644 --- a/source/blender/usd/intern/usd_exporter_context.h +++ b/source/blender/usd/intern/usd_exporter_context.h @@ -1,6 +1,8 @@ #ifndef __USD__USD_EXPORTER_CONTEXT_H__ #define __USD__USD_EXPORTER_CONTEXT_H__ +#include "../usd.h" + #include <pxr/usd/sdf/path.h> #include <pxr/usd/usd/common.h> @@ -13,6 +15,7 @@ struct USDExporterContext { pxr::UsdStageRefPtr stage; pxr::SdfPath usd_path; USDHierarchyIterator *hierarchy_iterator; + const USDExportParams &export_params; }; #endif /* __USD__USD_EXPORTER_CONTEXT_H__ */ diff --git a/source/blender/usd/intern/usd_hierarchy_iterator.cc b/source/blender/usd/intern/usd_hierarchy_iterator.cc index b04e7756379..b0587e5ed54 100644 --- a/source/blender/usd/intern/usd_hierarchy_iterator.cc +++ b/source/blender/usd/intern/usd_hierarchy_iterator.cc @@ -68,14 +68,14 @@ AbstractHierarchyWriter *USDHierarchyIterator::create_xform_writer(const Hierarc // context.export_path.c_str()); USDExporterContext usd_export_context = { - depsgraph, stage, pxr::SdfPath(context.export_path), this}; + depsgraph, stage, pxr::SdfPath(context.export_path), this, params}; return new USDTransformWriter(usd_export_context); } AbstractHierarchyWriter *USDHierarchyIterator::create_data_writer(const HierarchyContext &context) { USDExporterContext usd_export_context = { - depsgraph, stage, pxr::SdfPath(context.export_path), this}; + depsgraph, stage, pxr::SdfPath(context.export_path), this, params}; USDAbstractWriter *data_writer = nullptr; switch (context.object->type) { diff --git a/source/blender/usd/intern/usd_writer_abstract.cc b/source/blender/usd/intern/usd_writer_abstract.cc index aed49df9665..c430207ae38 100644 --- a/source/blender/usd/intern/usd_writer_abstract.cc +++ b/source/blender/usd/intern/usd_writer_abstract.cc @@ -1,4 +1,5 @@ #include "usd_writer_abstract.h" +#include "usd_hierarchy_iterator.h" #include <pxr/base/tf/stringUtils.h> @@ -14,6 +15,7 @@ USDAbstractWriter::USDAbstractWriter(const USDExporterContext &usd_export_contex stage(usd_export_context.stage), usd_path_(usd_export_context.usd_path), hierarchy_iterator(usd_export_context.hierarchy_iterator), + export_params(usd_export_context.export_params), frame_has_been_written_(false), is_animated_(false) { @@ -28,6 +30,17 @@ bool USDAbstractWriter::is_supported() const return true; } +pxr::UsdTimeCode USDAbstractWriter::get_export_time_code() const +{ + if (is_animated_) { + return hierarchy_iterator->get_export_time_code(); + } + // By using the default timecode USD won't even write a single `timeSample` for non-animated + // data. Instead, it writes it as non-timesampled. + static pxr::UsdTimeCode default_timecode = pxr::UsdTimeCode::Default(); + return default_timecode; +} + void USDAbstractWriter::write(HierarchyContext &context) { if (frame_has_been_written_) { @@ -36,7 +49,7 @@ void USDAbstractWriter::write(HierarchyContext &context) } } else { - is_animated_ = check_is_animated(context.object); + is_animated_ = export_params.do_animation && check_is_animated(context.object); printf("%sANIMATION\033[0m: %20s: %s\n", is_animated_ ? "\033[32;1m" : "\033[31;1m", context.export_path.c_str(), diff --git a/source/blender/usd/intern/usd_writer_abstract.h b/source/blender/usd/intern/usd_writer_abstract.h index c6f0a603aa0..3f463bc0047 100644 --- a/source/blender/usd/intern/usd_writer_abstract.h +++ b/source/blender/usd/intern/usd_writer_abstract.h @@ -20,6 +20,7 @@ class USDAbstractWriter : public AbstractHierarchyWriter { pxr::UsdStageRefPtr stage; pxr::SdfPath usd_path_; USDHierarchyIterator *const hierarchy_iterator; + const USDExportParams &export_params; bool frame_has_been_written_; bool is_animated_; @@ -38,6 +39,7 @@ class USDAbstractWriter : public AbstractHierarchyWriter { protected: virtual void do_write(HierarchyContext &context) = 0; virtual bool check_is_animated(Object *object) const; + pxr::UsdTimeCode get_export_time_code() const; }; #endif /* __USD__USD_WRITER_ABSTRACT_H__ */ diff --git a/source/blender/usd/intern/usd_writer_mesh.cc b/source/blender/usd/intern/usd_writer_mesh.cc index 7879e32acaa..3ab72fbf723 100644 --- a/source/blender/usd/intern/usd_writer_mesh.cc +++ b/source/blender/usd/intern/usd_writer_mesh.cc @@ -50,7 +50,7 @@ void USDGenericMeshWriter::free_export_mesh(struct Mesh *mesh) void USDGenericMeshWriter::write_mesh(struct Mesh *mesh) { - pxr::UsdTimeCode timecode = hierarchy_iterator->get_export_time_code(); + pxr::UsdTimeCode timecode = get_export_time_code(); // printf("USD-\033[32mexporting\033[0m mesh %s → %s mesh = %p\n", // mesh->id.name, // usd_path_.GetString().c_str(), diff --git a/source/blender/usd/intern/usd_writer_transform.cc b/source/blender/usd/intern/usd_writer_transform.cc index 4969ac1c0f3..97c3ef2b31f 100644 --- a/source/blender/usd/intern/usd_writer_transform.cc +++ b/source/blender/usd/intern/usd_writer_transform.cc @@ -32,9 +32,7 @@ void USDTransformWriter::do_write(HierarchyContext &context) if (!xformOp_) { xformOp_ = xform.AddTransformOp(); } - // TODO(Sybren): when not animated, write to the default timecode instead. - xformOp_.Set(pxr::GfMatrix4d(parent_relative_matrix), - hierarchy_iterator->get_export_time_code()); + xformOp_.Set(pxr::GfMatrix4d(parent_relative_matrix), get_export_time_code()); } bool USDTransformWriter::check_is_animated(Object *object) const _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs