Jesse Yurkovich b24ac18130 Alembic: Support new Curves object type for export
Support the new Curves object type in Alembic when exporting curve data.
Make corresponding fixes to importing at the same time.

Summary of changes
 - Exporter now supports the `Curves` object type during Export
   including when using the convert to mesh option
 - Exporter will now enforce that only 1 combination of curve type and
   periodicity are in a given object [0].
 - Catmul-rom basis curves are now supported and will be used for Hair
   data [1].
 - Bezier curves are exported with their left/right handle data [2].
 - Cyclic bezier and nurbs curves should be handled correctly now.

Along the way this required changes on the Import side as well in order
to be complete
 - Importer will now load bezier curve handle data correctly
 - Importer could fail to set the correct cyclic data on the last spline
   of a multi-curve object

See PR for screenshots

[0] See https://github.com/alembic/alembic/blob/master/lib/Alembic/AbcGeom/OCurves.h#L55
Prior to this change the Alembic exporter could write invalid data to
the file in these cases.
[1] Alembics created with the new Curves Hair object with this patch
will not be loadable in prior versions of Blender. The importer does not
handle the curve data correctly and will crash.
[2] There was a long-standing TODO about how to handle bezier curve data
since nothing is documented on Alembic's side. Bezier data wouldn't even
round-trip properly inside Blender itself. On a hunch, because USD was
influenced by certain aspects of Alembic which came before it, I decided
to try writing out the data the same way as USD. That turned out to work
quite well in at least 1 external software so that's what this patch
will use for both import and export.

Pull Request: https://projects.blender.org/blender/blender/pulls/119894
2024-04-12 21:27:15 +02:00
2023-12-08 13:28:13 +11:00

Blender

Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.

Blender screenshot

Project Pages

Development

License

Blender as a whole is licensed under the GNU General Public License, Version 3. Individual files may have a different, but compatible license.

See blender.org/about/license for details.

Description
No description provided
Readme 841 MiB
Languages
C++ 78%
Python 14.9%
C 2.9%
GLSL 1.9%
CMake 1.2%
Other 0.9%