Alembic import: greatly improved curve/hair import performance
authorSybren A. Stüvel <sybren@stuvel.eu>
Fri, 14 Apr 2017 13:26:45 +0000 (15:26 +0200)
committerSybren A. Stüvel <sybren@stuvel.eu>
Fri, 14 Apr 2017 13:26:45 +0000 (15:26 +0200)
commite12c3110024dc4b62ffefa739288218b04e39f71
treef817626a1d940dedf5554974373ade48d3137373
parent6af131fa5cd90a6290cb44a683d2f6da01ad8392
Alembic import: greatly improved curve/hair import performance

The U-resolution of the imported curves was kept at the default value
of 12, which is way too high for imported hair. We export hair at a
fairly high resolution already, so it's not needed to subdivide even
further when importing.

Of course this may have an impact on other curves that do require this
U-resolution to be higher. In that case the resolution can be
increased after importing.

I removed the default nu->orderu = num_verts, as that allowed every
point to influence the entire spline, which was more expensive for the
CPU, and unlikely to be needed. The orderu computations had off-by-one
errors in the curve importer, which are now also fixed. The correct
values are:

    - Linear: orderu = 2
    - Quadratic: orderu = 3
    - Cubic: orderu = 4

These values are also what is stored in the Alembic file for curves of
type kVariableOrder, according to the reference Maya exporter
maya/AbcExport/MayaNurbsCurveWriter.cpp, function
MayaNurbsCurveWriter::write(), in the Alembic source code.

The result is a frame rate increase of roughly 100x (tested with one
100-hair test on one machine, so take with grain of salt).
source/blender/alembic/intern/abc_curves.cc