[Bf-blender-cvs] [2dff08c8ce9] master: Alembic: always export transforms as inheriting

Sybren A. Stüvel noreply at git.blender.org
Fri Jun 19 10:32:37 CEST 2020


Commit: 2dff08c8ce9b9ce7511328cbe107d26a9539c38a
Author: Sybren A. Stüvel
Date:   Fri Jun 19 10:24:57 2020 +0200
Branches: master
https://developer.blender.org/rB2dff08c8ce9b9ce7511328cbe107d26a9539c38a

Alembic: always export transforms as inheriting

Blender now always exports transforms as as "inheriting", as Blender has
no concept of parenting without inheriting the transform.

Previously only objects with an actual parent were marked as
"inheriting", and parentless objects as "non-inheriting". However,
certain packages (for example USD's Alembic plugin) are incompatible
with non-inheriting transforms and will completely ignore such
transforms, placing all such objects at the world origin.

When importing non-inheriting transforms from Alembic, Blender will
break the parent-child relation and thus force the child to (correctly)
interpret the transform as world matrix.

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

M	source/blender/io/alembic/intern/abc_writer_transform.cc
M	tests/python/alembic_tests.py

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

diff --git a/source/blender/io/alembic/intern/abc_writer_transform.cc b/source/blender/io/alembic/intern/abc_writer_transform.cc
index 1ec7db0a1c6..ef3e7e29db2 100644
--- a/source/blender/io/alembic/intern/abc_writer_transform.cc
+++ b/source/blender/io/alembic/intern/abc_writer_transform.cc
@@ -97,7 +97,12 @@ void AbcTransformWriter::do_write()
 
   m_matrix = convert_matrix_datatype(yup_mat);
   m_sample.setMatrix(m_matrix);
-  m_sample.setInheritsXforms(m_inherits_xform);
+
+  /* Always export as "inherits transform", as this is the only way in which Blender works. The
+   * above code has already taken care of writing the correct matrix so that this option is not
+   * necessary. However, certain packages (for example the USD Alembic exporter) are incompatible
+   * with non-inheriting transforms and will completely ignore the transform if that is used. */
+  m_sample.setInheritsXforms(true);
   m_schema.set(m_sample);
 }
 
diff --git a/tests/python/alembic_tests.py b/tests/python/alembic_tests.py
index ec290001a6f..705bb98a060 100644
--- a/tests/python/alembic_tests.py
+++ b/tests/python/alembic_tests.py
@@ -194,7 +194,7 @@ class HierarchicalAndFlatExportTest(AbstractAlembicTest):
 
         # Now check the resulting Alembic file.
         xform = self.abcprop(abc, '/Cube_012/.xform')
-        self.assertEqual(0, xform['.inherits'])
+        self.assertEqual(1, xform['.inherits'], "Blender transforms always inherit")
 
         self.assertAlmostEqualFloatArray(
             xform['.vals'],
@@ -233,7 +233,7 @@ class DupliGroupExportTest(AbstractAlembicTest):
 
         # Now check the resulting Alembic file.
         xform = self.abcprop(abc, '/Suzanne/.xform')
-        self.assertEqual(0, xform['.inherits'])
+        self.assertEqual(1, xform['.inherits'])
 
         self.assertAlmostEqualFloatArray(
             xform['.vals'],



More information about the Bf-blender-cvs mailing list