When I consider the artist friendliness of beziers I don't bear in mind the cubic interpolation calculation, instead its mostly about how to achieve a desired shape, usually by first setting up the control points (where curve passes through) and then adjust the attached tangent handles to tweak the shape.
Accordingly, if I'm looking out to distribute values on said bezier curve I would consider the control points (CPs) to be the appropriate place to set up "key" values that would then be interpolated from CP to CP. But... Right now sampling a bezier curve with either Resample SOP or VEX primuv() will also partially take into account the handles information, which is the correct way to solve the cubic interpolation for the position, but not very useful to define linear, 0 to 1, transitions along the curve.
(Maybe then it will be possible to "roll" the curve like in Blender?)
Following this, I wondered, why not have dedicated primitive type in Houdini, a cubic bezier curve where the only explicit points are the CPs, and the tangent handles are a position vector relative to the CPs and stored in them, like v@handle_in/v@handle_out (with attributetypeinfo "vector" so they are transformed by SOP tools). I wonder if this would be a good use case for "point intrinsics" or "vertex intrinsics".
Some stretch ideas: (old gifs)
1) i@handle_auto, that defines if the CP handles will be explicit (default) or automatically adjusted to their neighbors (smooth spline or linear corner), which can be much more artist friendly than constantly readjusting handles.
2) i@handle_uv, that defines if the CP' uv sampling will be tied to UNIT or UNITLEN.
While it would probably be locked into order 4 (cubic) and necessitate a SOP to manipulate the tangent attributes in the viewport and interact with other explicit geometry, I think there will be some interesting advantages:
- A Polyline and a Bezier have the same amount of points, the latter just needs a tangent handles attributes added. This addresses the current kink when converting polyline to bezier and the polyline not having enough points for the target bezier order, aborting the conversion.
- Also going from a chain of line segments (Polyline SOP -> Convert Line SOP) to Bezier will produce the same shape but with individual bezier segments.
- CPs are neighbors of each other and not of the handles.
- Less finnicky routines to constantly distinguish CP points from handle points and have them share attributes even though they were only intended for CPs.
- Procedurally Turbulizing/Displacing the curve's points won't break its continuity.
- No need to constantly make the absolute handles position, relative to the CPs and then back to absolute; so using VEX on them is more straight forward.
- This hierarchical representation with Implicit tangents seems to be common among other applications and maybe could provide better bridging, like for example do away with "Unreal Spline Resolution" in Houdini Engine.
- Would not replacing existing Bezier primitive type.
Curve2.0 brought us amazing and due improvements; here I'm just pushing the whole thing a bit more for workflows that I think will make setups and interactions with beziers more rational and artist friendly.
Cheers
prb