[Bf-blender-cvs] [b8e9e36f527] temp-alembic-exporter-T73363-ms2: Alembic: fixed time sampling index handling

Sybren A. Stüvel noreply at git.blender.org
Tue Apr 28 18:57:33 CEST 2020


Commit: b8e9e36f5273859ab17837e6137585c4778ca53c
Author: Sybren A. Stüvel
Date:   Tue Apr 28 16:19:21 2020 +0200
Branches: temp-alembic-exporter-T73363-ms2
https://developer.blender.org/rBb8e9e36f5273859ab17837e6137585c4778ca53c

Alembic: fixed time sampling index handling

===================================================================

M	source/blender/io/alembic/intern/export/abc_hierarchy_iterator.cc
M	source/blender/io/alembic/intern/export/abc_hierarchy_iterator.h
M	source/blender/io/alembic/intern/export/abc_writer_abstract.cc
M	source/blender/io/alembic/intern/export/abc_writer_abstract.h
M	source/blender/io/alembic/intern/export/abc_writer_camera.cc
M	source/blender/io/alembic/intern/export/abc_writer_camera.h
M	source/blender/io/alembic/intern/export/abc_writer_curve.cc
M	source/blender/io/alembic/intern/export/abc_writer_curve.h
M	source/blender/io/alembic/intern/export/abc_writer_mesh.cc
M	source/blender/io/alembic/intern/export/abc_writer_mesh.h
M	source/blender/io/alembic/intern/export/abc_writer_nurbs.cc
M	source/blender/io/alembic/intern/export/abc_writer_nurbs.h
M	source/blender/io/alembic/intern/export/abc_writer_points.cc
M	source/blender/io/alembic/intern/export/abc_writer_points.h
M	source/blender/io/alembic/intern/export/abc_writer_transform.cc
M	source/blender/io/alembic/intern/export/abc_writer_transform.h

===================================================================

diff --git a/source/blender/io/alembic/intern/export/abc_hierarchy_iterator.cc b/source/blender/io/alembic/intern/export/abc_hierarchy_iterator.cc
index 2413221bea5..fcfed3ebd56 100644
--- a/source/blender/io/alembic/intern/export/abc_hierarchy_iterator.cc
+++ b/source/blender/io/alembic/intern/export/abc_hierarchy_iterator.cc
@@ -95,8 +95,7 @@ Alembic::Abc::OObject ABCHierarchyIterator::get_alembic_parent(
 ABCWriterConstructorArgs ABCHierarchyIterator::writer_constructor_args(
     const HierarchyContext *context) const
 {
-  return ABCWriterConstructorArgs{.object = context->object,
-                                  .depsgraph = depsgraph_,
+  return ABCWriterConstructorArgs{.depsgraph = depsgraph_,
                                   .abc_archive = abc_archive_,
                                   .abc_parent = get_alembic_parent(context),
                                   .abc_name = context->export_name,
@@ -109,7 +108,7 @@ AbstractHierarchyWriter *ABCHierarchyIterator::create_transform_writer(
     const HierarchyContext *context)
 {
   ABCAbstractWriter *transform_writer = new ABCTransformWriter(writer_constructor_args(context));
-  transform_writer->create_alembic_objects();
+  transform_writer->create_alembic_objects(context);
   return transform_writer;
 }
 
@@ -164,7 +163,7 @@ AbstractHierarchyWriter *ABCHierarchyIterator::create_data_writer(const Hierarch
     return nullptr;
   }
 
-  data_writer->create_alembic_objects();
+  data_writer->create_alembic_objects(context);
   return data_writer;
 }
 
@@ -191,7 +190,7 @@ AbstractHierarchyWriter *ABCHierarchyIterator::create_particle_writer(
     return nullptr;
   }
 
-  particle_writer->create_alembic_objects();
+  particle_writer->create_alembic_objects(context);
   return particle_writer;
 }
 
diff --git a/source/blender/io/alembic/intern/export/abc_hierarchy_iterator.h b/source/blender/io/alembic/intern/export/abc_hierarchy_iterator.h
index 59e44719d49..c86c0f388ed 100644
--- a/source/blender/io/alembic/intern/export/abc_hierarchy_iterator.h
+++ b/source/blender/io/alembic/intern/export/abc_hierarchy_iterator.h
@@ -42,7 +42,6 @@ using USD::HierarchyContext;
 class ABCHierarchyIterator;
 
 struct ABCWriterConstructorArgs {
-  Object *object; /* Evaluated object */
   Depsgraph *depsgraph;
   ABCArchive *abc_archive;
   Alembic::Abc::OObject abc_parent;
diff --git a/source/blender/io/alembic/intern/export/abc_writer_abstract.cc b/source/blender/io/alembic/intern/export/abc_writer_abstract.cc
index 42061fff34d..fc06896d08b 100644
--- a/source/blender/io/alembic/intern/export/abc_writer_abstract.cc
+++ b/source/blender/io/alembic/intern/export/abc_writer_abstract.cc
@@ -36,7 +36,10 @@ using Alembic::Abc::OObject;
 using Alembic::Abc::TimeSamplingPtr;
 
 ABCAbstractWriter::ABCAbstractWriter(const ABCWriterConstructorArgs &args)
-    : args_(args), frame_has_been_written_(false), is_animated_(false)
+    : args_(args),
+      frame_has_been_written_(false),
+      is_animated_(false),
+      timesample_index_(args_.abc_archive->time_sampling_index_shapes())
 {
 }
 
@@ -52,7 +55,6 @@ bool ABCAbstractWriter::is_supported(const HierarchyContext * /*context*/) const
 void ABCAbstractWriter::write(HierarchyContext &context)
 {
   if (!frame_has_been_written_) {
-    /* The start and end frames being the same means "no animation". */
     is_animated_ = (args_.export_params.frame_start != args_.export_params.frame_end) &&
                    check_is_animated(context);
   }
diff --git a/source/blender/io/alembic/intern/export/abc_writer_abstract.h b/source/blender/io/alembic/intern/export/abc_writer_abstract.h
index 4e0705ae7e5..534ee07a476 100644
--- a/source/blender/io/alembic/intern/export/abc_writer_abstract.h
+++ b/source/blender/io/alembic/intern/export/abc_writer_abstract.h
@@ -45,10 +45,7 @@ class ABCAbstractWriter : public AbstractHierarchyWriter {
 
   bool frame_has_been_written_;
   bool is_animated_;
-
-  uint32_t timesample_index_transform_;
-  uint32_t timesample_index_geometry_;
-
+  uint32_t timesample_index_;
   Imath::Box3d bounding_box_;
 
  public:
@@ -68,7 +65,7 @@ class ABCAbstractWriter : public AbstractHierarchyWriter {
 
   /* Called by AlembicHierarchyCreator after checking that the data is supported via
    * is_supported(). */
-  virtual void create_alembic_objects() = 0;
+  virtual void create_alembic_objects(const HierarchyContext *context) = 0;
 
   /* TODO(Sybren): bring back support for writing the bounding box. */
 
diff --git a/source/blender/io/alembic/intern/export/abc_writer_camera.cc b/source/blender/io/alembic/intern/export/abc_writer_camera.cc
index f69dc0e54d2..3aae382c6bf 100644
--- a/source/blender/io/alembic/intern/export/abc_writer_camera.cc
+++ b/source/blender/io/alembic/intern/export/abc_writer_camera.cc
@@ -47,20 +47,17 @@ bool ABCCameraWriter::is_supported(const HierarchyContext *context) const
   return camera->type == CAM_PERSP;
 }
 
-void ABCCameraWriter::create_alembic_objects()
+void ABCCameraWriter::create_alembic_objects(const HierarchyContext * /*context*/)
 {
-  /* If the object is static, use the default static time sampling. */
-  uint32_t timesample_index = is_animated_ ? timesample_index_geometry_ : 0;
-
   CLOG_INFO(&LOG, 2, "exporting %s", args_.abc_path.c_str());
-  abc_camera_ = OCamera(args_.abc_parent, args_.abc_name, timesample_index);
+  abc_camera_ = OCamera(args_.abc_parent, args_.abc_name, timesample_index_);
   abc_camera_schema_ = abc_camera_.getSchema();
 
   abc_custom_data_container_ = abc_camera_schema_.getUserProperties();
   abc_stereo_distance_ = OFloatProperty(
-      abc_custom_data_container_, "stereoDistance", timesample_index);
+      abc_custom_data_container_, "stereoDistance", timesample_index_);
   abc_eye_separation_ = OFloatProperty(
-      abc_custom_data_container_, "eyeSeparation", timesample_index);
+      abc_custom_data_container_, "eyeSeparation", timesample_index_);
 }
 
 const Alembic::Abc::OObject ABCCameraWriter::get_alembic_object() const
diff --git a/source/blender/io/alembic/intern/export/abc_writer_camera.h b/source/blender/io/alembic/intern/export/abc_writer_camera.h
index bc7fe4b0a31..8d1361efc31 100644
--- a/source/blender/io/alembic/intern/export/abc_writer_camera.h
+++ b/source/blender/io/alembic/intern/export/abc_writer_camera.h
@@ -36,7 +36,7 @@ class ABCCameraWriter : public ABCAbstractWriter {
  public:
   ABCCameraWriter(const ABCWriterConstructorArgs &args);
 
-  virtual void create_alembic_objects() override;
+  void create_alembic_objects(const HierarchyContext *context) override;
   virtual const Alembic::Abc::OObject get_alembic_object() const override;
 
  protected:
diff --git a/source/blender/io/alembic/intern/export/abc_writer_curve.cc b/source/blender/io/alembic/intern/export/abc_writer_curve.cc
index 9abc10efd31..f8e5adb7f16 100644
--- a/source/blender/io/alembic/intern/export/abc_writer_curve.cc
+++ b/source/blender/io/alembic/intern/export/abc_writer_curve.cc
@@ -47,16 +47,13 @@ ABCCurveWriter::ABCCurveWriter(const ABCWriterConstructorArgs &args) : ABCAbstra
 {
 }
 
-void ABCCurveWriter::create_alembic_objects()
+void ABCCurveWriter::create_alembic_objects(const HierarchyContext *context)
 {
-  /* If the object is static, use the default static time sampling. */
-  uint32_t timesample_index = is_animated_ ? timesample_index_geometry_ : 0;
-
   CLOG_INFO(&LOG, 2, "exporting %s", args_.abc_path.c_str());
-  abc_curve_ = OCurves(args_.abc_parent, args_.abc_name, timesample_index);
+  abc_curve_ = OCurves(args_.abc_parent, args_.abc_name, timesample_index_);
   abc_curve_schema_ = abc_curve_.getSchema();
 
-  Curve *cu = static_cast<Curve *>(args_.object->data);
+  Curve *cu = static_cast<Curve *>(context->object->data);
   OCompoundProperty user_props = abc_curve_schema_.getUserProperties();
   OInt16Property user_prop_resolu(user_props, ABC_CURVE_RESOLUTION_U_PROPNAME);
   user_prop_resolu.set(cu->resolu);
diff --git a/source/blender/io/alembic/intern/export/abc_writer_curve.h b/source/blender/io/alembic/intern/export/abc_writer_curve.h
index 829091d13fc..838b51433a0 100644
--- a/source/blender/io/alembic/intern/export/abc_writer_curve.h
+++ b/source/blender/io/alembic/intern/export/abc_writer_curve.h
@@ -35,7 +35,7 @@ class ABCCurveWriter : public ABCAbstractWriter {
  public:
   ABCCurveWriter(const ABCWriterConstructorArgs &args);
 
-  void create_alembic_objects() override;
+  void create_alembic_objects(const HierarchyContext *context) override;
   const Alembic::Abc::OObject get_alembic_object() const override;
 
  protected:
diff --git a/source/blender/io/alembic/intern/export/abc_writer_mesh.cc b/source/blender/io/alembic/intern/export/abc_writer_mesh.cc
index 8318a56f5db..75a837126ff 100644
--- a/source/blender/io/alembic/intern/export/abc_writer_mesh.cc
+++ b/source/blender/io/alembic/intern/export/abc_writer_mesh.cc
@@ -88,12 +88,9 @@ ABCGenericMeshWriter::ABCGenericMeshWriter(const ABCWriterConstructorArgs &args)
 {
 }
 
-void ABCGenericMeshWriter::create_alembic_objects()
+void ABCGenericMeshWriter::create_alembic_objects(const HierarchyContext *context)
 {
-  /* If the object is static, use the default static time sampling. */
-  timesample_index_ = is_animated_ ? timesample_index_geometry_ : 0;
-
-  if (!args_.export_params.apply_subdiv && export_as_subdivision_surface(args_.object)) {
+  if (!args_.export_params.apply_subdiv && export_as_subdivision_surface(context->object)) {
     is_subd_ = args_.export_params.use_subdiv_schema;
   }
 
@@ -113,7 +110,7 @@ void ABCGenericMeshWriter::create_alembic_objects()
   }
 
   Scene *scene_eval = DEG_get_evaluated_scene(args_.depsgraph);
-  liquid_sim_modifier_ = get_liquid_sim_modifier(scene_eval, args_.object);
+  liquid_sim_modifier_ = get_liquid_sim_modifier(scene_eval, context->object);
 }
 
 ABCGenericMeshWriter::~ABCGenericMeshWriter()
diff --git a/source/blender/io/alembic/intern/export/abc_writer_mesh.h b/source/blender/io/alembic/intern/export/abc_writer_mesh.h
index e7e109f7673..4d1aca5b577 100644
--- a/source/blender/io/alembic/intern/export/abc_writer_mesh.h
+++ b/source/blender/io/alembic/intern/export/abc_writer_mesh.h
@@ -46,19 +46,13 @@ class ABCGenericMeshWriter : public ABCAbstractWrite

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list