Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@blender.org>2020-06-19 11:24:57 +0300
committerSybren A. Stüvel <sybren@blender.org>2020-06-19 11:24:57 +0300
commit2dff08c8ce9b9ce7511328cbe107d26a9539c38a (patch)
tree773c39810e8bcba57038b31ac0efde6d7561b21c
parentf106369ce8577aa9115fead1eff3acd34273a86b (diff)
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.
-rw-r--r--source/blender/io/alembic/intern/abc_writer_transform.cc7
-rw-r--r--tests/python/alembic_tests.py4
2 files changed, 8 insertions, 3 deletions
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'],