Saturday, September 8, 2012

Interoperable Geometry (Part 1): Curves

Discussions about interoperability have become extremely pervasive in the computational design and BIM communities. As they rightly should, users expect their software applications to support one another through integrated workflows where information can fluidly pass from one system to the next..  Unfortunately, given the complexity of our industry and its technological infrastructure, we still have a ways to go before we achieve seamless integration between systems and across platforms... but that doesn't mean we should give up!

Which brings me to geometry....

Being in the midst of developing the next release of CASE's Import OpenNURBS Add-in for Revit (which will include broader curve and surface support through conceptual massing), I thought it would be helpful to contextualize that effort by providing some short infographics which explain specific geometry challenges across the Rhino and Revit platforms.

Even at the lowest levels of representation, the two systems handle geometry differently which makes it especially challenging to ensure correct and reliable translation.  The graphic below shows a comparison of NURBS and Interpolated curves created in Rhino and Revit which share the same control points and weights.  The variations in how the two systems compute the curves are made obvious by the deviations...  Even NURB Splines are translated with variations.

UPDATE 1 - Interpolation Algorithms:  I just wanted to clarify that I attribute these variations due to a difference in spline and interpolation algorithms.  Architectural Geometry (Pottmann et al) has a nice section on Freeform curves with a nice diagram showing different interpolation algorithms.

UPDATE 2 - NURBS Splines and Knots:  After some further investigation into the NURB Spline, the variation in curvature is due to a difference in how knots are computed in Rhino and Revit.  According to the SDK, Revit determines knots based on NumberOfControlPoints + Degree + 1.  Rhino, on the other hand, uses NumberOfControlPoints + Degree -1.  This means that there is a difference of 2 knot values between the tools. For accurate results, an interoperability method must also account for this variation.

Thanks, Matt Jezyk and the Autodesk team for confirming some of these technical differences!