Hey all,
We're about to branch for Cortex 10, so I thought I should give a public heads up before we start bashing away at it.
As usual, a major version update in Cortex comes with all the breaking changes we've been holding off on... that goes for API, ABI, default values, general user expectations, etc. In this case, since we haven't had a new major version for over 2.5 years (wow!), there are quite a few things that we're planning to change.
The first thing to note is that quite a lot has occurred on the “Open Source for VFX” landscape since our last major update. In addition, the way Cortex has been used in production at Image Engine has narrowed in scope substantially over that time period. Cortex Procedurals haven't seen action in our pipeline for a long time – they've been replaced entirely by Gaffer at this point, and that's proven a positive change for quality of work, performance, and user experience. We've also phased out our use of Cortex's image processing in favor of Gaffer's image processing, OpenImageIO, and OpenColorIO.
We see Cortex continuing to slim down over time, focusing on providing the underlying geometric datatypes, IO, DCC / Renderer interoperability, and algorithms for use in Gaffer. In short, we're aiming for Cortex to contain the "behind the scenes" components of Gaffer where Cortex is still the best choice, and deferring to other projects (e.g. OCIO, OIIO, VDB) where they make sense.
We plan to branch for maintenance in the next few days, at which point master will become bleeding edge / non-stable. Here's a brief rundown of our goals for Cortex 10:
- Remove Color and Image processing
- OpenColorIO and OpenImageIO have become clear favorites in these areas. No need for Cortex to provide this functionality any longer. We'll likely have a thin wrapper presenting OIIO as an ImageReader, but we'll be dropping a big bulk of code here. What we do keep will be flipping the image orientation, matching Gaffer and Nuke conventions instead of OpenEXR conventions.
- New Renderer API
- The redesign has been done already, and is working well in production (see GafferArnold and GafferAppleseed). We've just been waiting for the right moment to break compatibility.
- Unfortunately this means we'll be dropping RI spec support, and as a consequence, dropping PRMan and 3delight for the time being. We're hopeful that the new API will enable 3delight NSI support in the near future, and maybe even more modern PRMan support eventually.
- Revamp the LRUCache
- Again, the redesign is done, and working well, just waiting for the break to merge it.
- Conform UVs to match modern requirements
- This includes flipping the orientation to match the majority of DCCs and Renderers, and moving to a combined indexed primitive variable rather than separated s,t variables.
- Improved Alembic support
- Ideally we'll get Alembic support on-par with SceneCache, so they can be used fairly interchangeably.
- Update to modern OpenGL
- OpenSubdiv wrapper to operate on MeshPrimitives
- OpenVDB wrapper to add VDB grids to SceneInterfaces
We'll put up a 9_maintenance branch first, and IE is planning to do at least 2 more releases from that branch... likely a few more than that even. If you're using Cortex 9 in production now, and want to stick with it for the long term, that's always possible, and its fine to have any number of Cortex 9 tags/releases that aren't used at Image Engine. We won't be maintaining that branch ourselves once all our productions have transitioned to Cortex 10 (likely end of year), but we're always here to help and advise anyone who wants to take that on. Feel free to email the list (or contact me privately) if you have questions / comments / concerns, or if you'd like to lend a helping hand.
Cheers,
Andrew