3 ms·
So Raph, how do you draw these things? I’m not sure exactly where I’d start given an equation of the curvature or tangent (I assume?) angle. The pen tool link t
by dahart 2mo ago
So Raph, how do you draw these things? I’m not sure exactly where I’d start given an equation of the curvature or tangent (I assume?) angle. The pen tool link talks about “auto points”, giving the impression that it’s a sort of Bezier subdivision with some constraints, is that accurate? And your article mentions you’ve since fixed some things in the math - so this is a bit different from the pen tool, not using auto points?
Playing with your demo, I see the curve lock shape in certain configurations and stop moving even when I’m dragging one of the control points around. Is this a temporary or numerical stability issue, or is this a property of hyperbezier curves? For example if I arrange the control points in a square with P0 bottom left, C1 bottom right, C2 top left, P3 top right, and then drag C1 to the right, the shape locks up quickly. Eyeballing, it’s maybe when the length of P0C1 is ~1.5 times the length of C2P3? Moving C1 further right and up/down, there’s a huge area where moving C1 doesn’t affect the shape of the curve.
I was slightly curious about the P/C naming as well - is this a Hermite-like idea where P[03] are points and C[12] are similar to tangent vectors? Why not use P[0123]?
Probably one really obvious thing worth mentioning - Beziers are indeed very versatile, but it has to be said that one of the reasons they’re so popular is because the math is so simple, right? Decomposable into linear steps, integer exponents, with a couple multiplies of only your parameter you can evaluate them with a matrix multiply. They’re trivial to draw. Add in the controllability and intuitiveness and simplicity of computing other properties of the curve (such as finding roots & inflections & bounding boxes, splitting curves, etc.), and it makes sense they’re very popular. Hyperbeziers look interesting, and I don’t have intuition on their uses yet, but I assume their rendering involves heavier math than Beziers - since the curvature & angle equations have a divide & square root? Can they be split or subdivided easily?
You’ve been in search of a better curve for a long time. I’m wondering how you think about and where you stand on subdividing curves like Bezier vs finding a more perfect interpolation. Obviously there are tradeoffs, but are you aiming at problems that can’t be solved in practice using subdivision/approximation? I’d also be curious to hear your thoughts on hyperbeziers vs NURBS.
- raphlinus 2mo agoI'll try to answer some of these questions. Yes, there are regions of the parameter space where moving a control point has vanishing effect on the curve shape. I'm not thrilled about this and have explored alternatives, but this is the best I could come up with. Pretty much all approaches based on solving for optimal curve fit have discontinuous "flipping" behavior. Another approach would be to split We haven't yet done the work wiring this up into a spline like the older pen tool draft. The "auto point" is not a form of subdivision but is a way of achieving G2 continuity. Yes, hyperbeziers can be split and subdivided without much trouble at all, and being closed under subdivision is an important mathematical property that was lacking in the earlier draft. This follows directly from their formulation as polynomials. If you look into the code, you'll see that there's subdivision at the near-cusp to make the integral robust. The P/C naming evokes Hermite but there wasn't a lot of thought into it. Math is heavier, but this is more nuanced than you might expect. My feeling is that computers are fast, so if we can draw higher quality curves with less human effort, it's worth it. But the seeming simplicity of Béziers is deceptive; you often have to solve inverse arc length problems (for example to compute dashing), and curve fitting is really hard (I have a blog post in the pipeline on that). So I think overall the math is only slightly heavier. The goal is human-driven interactive design, originally motivated by font design. Splitting into more Béziers obviously gives much finer control, but it's hard to avoid them getting lumpy. In most fonts you have a minimum number of Bézier segments and accept whatever fine details the Bézier math gives you. That's even more so when making variable fonts, where the control points are interpolated. I haven't yet done a rigorous comparison with NURBS. While they're hugely popular in CAD, they're basically unused in things like font design. Thanks for these questions, they obviously show a deeper understanding.
- dahart 2mo agoThanks! Okay this makes sense, and I have to agree interactive design with fonts & CAD does call for more control, and subdivision and resampling does often lead to lumpy, or just harder to manage curves. Personally I use splines mainly for CG hair rendering and procedural geometry, so very different goals. Do you see any major benefits to using hyperbezier curves for procedural/simulation assets like hair, or for applications like maps or auto-generated UI or other use-cases outside of manual design? I have some modest experience with the polynomial curves but very little experience with the kind of non-polynomial curves you post about. I’m always curious but haven’t spent the time studying that I’d like to. I don’t have a lot of experience with NURBS either; it was just the rational in the hyperbezier curvature formula that made me think maybe there’s a relationship, and/or the rational in NURBS has something to do with it’s greater level of control versus the uniform B-spline.
- raphlinus 2mo agoSuper good questions. First, for hair rendering you've got a 3D trajectory, which Béziers can handle just fine, but I'm not sure about these spirals. I do have a chapter in my thesis and there has been a bit of followup from others, but I can't say anything with confidence. That said, because of the specular reflections, applications like hair really would benefit from higher degrees of continuity. Cem Yuksel has a recent SIGGRAPH paper on how to tweak Béziers to get more continuity. In fact, seeing that was one of the motivations to take this work off the back burner. I'm not sure about maps. But I do know of applications representing the centerline for autonomous vehicles that use polynomial spiral representations, specifically because of the extremely high degrees of continuity you can attain. For that, you don't have to represent these high-tension curvature regions. I do think there is a specific application for drawing smooth connecting lines in autogenerated diagrams. These tend to be S-shaped, and with Béziers you tend to get curvature peaks near the endpoints. You're much better off with monotonic curvature and with spirals that's easier to achieve. And I also believe being able to get those squircle/superellipse shapes would help as well.
- dahart 2mo ago