Rendered at 02:46:04 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
momojo 13 hours ago [-]
I love bezier curves. In community-college, it was the first time I ever encountered a subject that made me want to go do more research on my own. One of my core memories is toiling away for multiple nights when the rest of the house was asleep on my 2015 Macbook Pro, writing janky p5.js code and pressing refresh on the browser page over and over until suddenly, I started see real, beautiful curves blossom from my control points.
I just went back to dig up some old sources[0], and I can't believe this post is almost a decade old now. This guy's explainers and animations were leagues beyond any other resource I could find through Google searc at the time.
This is fucking fantastic. I wish the whole of the internet was like this. People enthusiastically sharing their own enthusiasm about learning something cool, and other enthusiasts finding it and going down their own rabbitholes. The internet is multimedia. It should be nothing _but_ people sharing knowledge. Thanks for writing this up.
fishfasell 3 hours ago [-]
Pretty much sums up why this site is my last bastion of solace on the web
dlg 42 minutes ago [-]
“Polynomial spirals, or Spiro curves, the subject of my PhD thesis, fail to achieve this goal.”
Wasn’t your PhD thesis on attack-resistant trust metrics? At least I remember reading it.
dahart 12 hours 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 6 hours ago [-]
I'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 5 hours ago [-]
Thanks! 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 4 hours ago [-]
Super 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 2 hours ago [-]
> because of the specular reflections, applications like hair really would benefit from higher degrees of continuity.
Oh this is interesting. So FWIW - I’ve done a bit of CG hair in production (in a previous life, for DreamWorks) - and now that everyone’s ray tracing, I like to advocate for considering quadratic B-splines for CG hair over cubics. In practice, I don’t personally think you can see anything in hair specular reflections that is based on degree or continuity beyond C1. Catmull-Rom is only C1 and people have been using Catroms for hair for a long time (and interesting side note - I’ve found that Catmull-Rom curves are pretty lumpy and ugly, even lumpier than quadratic B-splines. This is possibly very similar to the issue of designing with subdivision you mentioned).
My opinion here does not apply to surface patches - with surfaces, the continuity can be visible in the reflections. But at my work among the researchers there was a very strong assumption that cubic B-spline curves would be visibly better than quadratic, and that quadratic would suffer from reflection artifacts due to the C1 continuity, which just doesn’t seem to be true (and ignores the history of Catmull-Rom). Quadratic curves are faster and more accurate for ray intersections and bbox calculations, and they offer some interesting advantages like having an analytic rotation-minimizing frame (with the Frenet frame, even…). Of course with procedural curves, I recommend only the quadratic B-spline, not Bézier. With a uniform B-spline, the degree of the curve is essentially nothing more than a smoothing factor. Production hair/fur/sim data tends to be over-sampled already, so the smoothing factor doesn’t buy you much.
BTW, yes I know Cem and I’m familiar with his work. He also has published on some non-polynomial curve types, so your post reminded me of him as well.
zellyn 2 hours ago [-]
re: the control points having areas where the curve is unresponsive. IIUC, whereas the control points of a Bezier have direct meaning, this is an attempt at a sensible/usable mapping of synthetic control points to the curve? Which presumably means it could be made much better with some work/exploration? Or did I misunderstand that part?
krtkush 14 hours ago [-]
Related: Last year I had the pleasure to work with Bezier curves to make a very specific UI for an app I was working on.
I wrote down a bunch of posts on how I achieved the UI primarly to explain the process to my future self[0]
As a mobile developer it was so much fun to do something other than building a CRUD app.
Playing with the example, the controls points don’t feel any more intuitive to work with than traditional cubic Béziers. They still exhibit annoying behaviors near the endpoints, though they don’t tend to “explode” like traditional cubics.
I find it curious that the author makes no attempt to compare his solution to other splines like B-splines or Catmull-Rom splines, given their popularity in computer graphics and CAD.
dahart 8 hours ago [-]
> the author makes no attempt to compare his solution to other splines like B-splines or Catmull-Rom
I’d argue that talking about Bézier is absolutely sufficient in this context; B-splines and Catmull-Rom splines and a few other types are all piecewise polynomial splines (cubic specifically, at least in the case of Catmull-Rom). You can convert B-splines and Catmull-Rom splines to Bézier directly and analytically; therefore B-splines and Catmull-Rom splines cannot do anything beyond what Bézier curves can do. There are some minor usability / interface / intuition differences, but there is no difference in mathematical control.
diabllicseagull 14 hours ago [-]
One big aspect that made Bezier popular was local support, i.e. moving control points resulted in expected changes in the same direction. It's interesting that this is the result of a search for 'a curve family better suited for interactive design than cubic Beziers.' I think it's better for achieving curve quality in the sense of curvature changes, but not so much in interactivity.
raphlinus 6 hours ago [-]
There are two separate questions here. One is how much moving control points creates expected changes in the same direction. Béziers nail this, as the position of a point at t is a linear combination of the control points, with the Bernstein polynomials as weighting functions. So it always feels like direct control. With my mapping, you get this for a nice big chunk of the parameter range – small to moderate angles and control point distances. But this property does fall apart when pushing to extremes.
The other question is whether the control is local. As others have remarked, this has much more to do with the way the curve is embedded into a spline than the curve family itself. In particular, it is deeply affected by the continuity constraints. As payment for the local support, cubic Béziers only give G1 continuity. Euler spiral splines, by contrast, are G2 but changes do cause those ripples.
The pen tool prototype linked in the blog post suggests giving designers more choices. If you specify all control points, you get G1 just like a cubic Bézier. But it also gives the choice of specifying one control point on a smooth endpoint, and solving the other for G2 continuity. In my experience, it feels more like local control than Euler spiral-like splines. When you want smoother curves, you do that, and when you're willing to sacrifice continuity for local control, that's also possible.
adrian_b 12 hours ago [-]
Trying the example from TFA, I think that it is easy to acquire a good intuition about how the curve moves when you pull a control point and the shapes of the curves that you can obtain are more beautiful and more interesting than what you obtain with cubic Beziers.
So I believe that if for you the "interactivity" does not seem better, that is more likely to be caused by being much more familiar about how cubic Beziers behave, from past experience, than because these hyperbezier curves were really less suited for interactivity. Also, the current implementation in JavaScript seems buggy.
For me, the poor approximation by cubic Beziers of some important curves, like conics and the Euler spiral, is an extremely serious defect, so I like these hyperbezier curves much more and I intend to investigate how efficient can they be, from a computational viewpoint.
Karliss 10 hours ago [-]
There are two bad properties in terms of interactivity (and for other uses).
In some configurations hyperbezier explodes towards infinity or at least way outside the bounds of control points. Cubic beziers don't do that, if control points are bounded the curve will be as well. This is direct result of how cubic bezier can be calculated with series of linear interpolations.
Other issue was that there were discontinuities while moving through parameter space or at least very sudden jumps, small changes of control points caused curve flip to completely different shape.
WillAdams 14 hours ago [-]
Yeah, editing TrueType fonts w/ B-splines which have a shared off-curve control point between two on-curve control points is nightmarish as a small change will ripple through the entire outline.
dahart 8 hours ago [-]
I haven’t done any font editing but is this true in general? Sounds like some kind of application-defined constraint. You’re talking about quadratic splines with the shared approximating point between interpolating points, and probably quadratic Bézier, not B-splines, I would guess. Quadratic Bézier would do this if the application decides to constrain all tangents to be smooth, which is a choice, not a property of the spline. Quadratic B-splines do not in general have this property; you can move any of the control points and have local control of the curve that doesn’t extend beyond the two neighboring control points. The difference is that B-splines don’t have interpolating control points in general - the curve only approximates all the control points, and you have to use phantom points or duplicated points to ensure the curve touches them.
WillAdams 4 hours ago [-]
Mostly font editors use Bézier curves with four control points, so the effect of moving an off-curve point is limited to that portion of the curve from the associated on-curve node up towards the opposing on-curve node as affected by the other on-curve node.
It is my understanding that only a couple of very expensive font editors use B-splines where there are three control points which ripple as I noted, however it seems that FontForge supports order2 (quadratic, TrueType) or order3 (cubic, PostScript).
shuwix 11 hours ago [-]
One big aspect that made bezier curves popular was Quake 3 Arena.
That was literally first time general public even heard the name.
Synaesthesia 8 hours ago [-]
They were a part of computer graphics for a long time before that, 2D and 3D.
shuwix 6 hours ago [-]
How many people knew about them prior and after Q3A?
dahart 5 hours ago [-]
I’ve been fiddling with curves a long time and I haven’t seen the Q3A-Bézier reference - what are you referring to exactly? Is there some blog post, and was this about game programmers knowing about cubic Bézier curves? Most of the ‘general public’ still haven’t heard of Bézier curves.
I don’t doubt something Q3 related might have popularized it. I’m familiar with the fast inverse sqrt approximation that was popularized by Q3A. That’s not what you’re thinking of, is it? (https://en.wikipedia.org/wiki/Fast_inverse_square_root) But animators and most people in graphics and rendering (the Pixar, ILM, and Siggraph types) as well as all font designers and mathematicians and car designers and CAD people all knew about Bézier curves long before Quake 3 Arena.
3 hours ago [-]
joshmarinacci 4 hours ago [-]
These are an exciting new curve. I’d like to hear about how they will handle stroking. The inside and outside stroke of a Bézier curve can’t be represented with a Bézier curve. How do hyperbeziers fare?
raphlinus 3 hours ago [-]
This is future work, but I expect it to go fairly well. One encouraging sign is that there are parts of the parameter space where you do get an exact solution: circular arcs and circle involute. Another encouraging sign is that it's easy to get bounds on curvature, which is important for figuring out whether there's a cusp in the offset curve.
monster_truck 11 hours ago [-]
This is awesome.
Geometric topology makes my brain itch. I refuse to engage with it, I am certain it would drive me mad.
I do agree though, those elastica (elasticas? elastici??) are fine as hell
somat 14 hours ago [-]
Very cool demo, The curve does sort of go screwball when the control points are close together.
After playing with it some more. Not close together, but more side loaded. On reflection while many of these forms would be awkward to find in a drawing program, I think this is the source of the superior spiral the author likes.
Sharlin 13 hours ago [-]
It can’t do a loop (or a cusp, in the limit) like cubic Beziers can, and may instead "lock" to a weird hook-like shape, I’m not sure whether it’s just an artifact of the way the demo tries to match the curve to a Bezier.
Loops and cusps are of course not very useful in 2D graphic or typeface design, and even if you’re animating a plane or designing a rollercoaster you’d probably use more than one Bezier to make up a looping shape.
raphlinus 6 hours ago [-]
As a clarification, the hyperbezier curve can do a loop, but I deliberately chose not to make that accessible in the parameter mapping. I couldn't figure out how to do it with any reasonable continuity. It's possible to flip from the normal shape to the loop, but I wanted to avoid that. And if you don't flip, then all trajectories have to go through an exact corner as an intermediate, which is very different behavior than the cubic Bézier. In the Bézier, the cusp can occur anywhere along the curve, but to make the corner shape it has to be exactly at the intersection of the endpoint tangents.
There are other Bézier shapes that the hyperbezier can't match, including two cusps on the interior. As you say, I consider these not very useful in actual 2D design, and am happy to give them up for smoother curves and the increased range of superellipse shapes.
Arodex 3 hours ago [-]
Bezier curves were invented to design physical objects (cars), but they were an idealized and simplified solution to enable CAD at the time computer were much less powerful. Ideally, CAD should put elastica curves as the first choice - but they are difficult to compute as they can diverge drastically when control points get too close, and there is sometimes more than one solution for a set of constraints.
Spiro curves were supposed to solve it but I am surprised to read here that even spiro fails to approximate elastica. Have you mapped where the limitations are?
For information, I am drawing boat hulls, and elastica would model the natural bend of wood/plywood/metal much better than bezier... Amateur naval designers really lack good tools to bridge the gap between ideal hydrodynamic forms and ease of construction, and there are still a lot of tiny but annoying adjustments when one planks the first hull.
raphlinus 3 hours ago [-]
Elastica curves have only three parameters, compared with four for cubic Béziers, Spiro curves, and the new hyperbezier. The easiest way to understand that limitation is to consider the parallel curve of an Euler spiral. That has a built-in asymmetry, one end has higher tension than the other. But the math for elastica locks in odd symmetry around the inflection point.
I think hyperbezier would be a natural fit for boat hulls, but it's not a mathematically precise approximation to elastica either. I'd say to carefully evaluate it, and I'd very much like to hear how that goes.
ETA: "parallel curve of elastica" is an intriguing curve family to consider for this application, as it has the correct number of parameters and ticks a lot of the other boxes. However, the math for this is hard mode.
3 hours ago [-]
hingler36 10 hours ago [-]
This is a really cool demo, but I don't necessarily see these superceding traditional beziers so much as being another option for designers
Jacopos311 9 hours ago [-]
Has anyone used those for a real life project that solves some issues or whatever?
scythe 9 hours ago [-]
>In this post, I present the curve family to the world.
>August 8, 2026
I would guess not.
raphlinus 7 hours ago [-]
Not yet.
achierius 15 hours ago [-]
One unintuitive thing I noticed about these curves, at least from the demo on the page, is that they have both areas where their behavior quickly 'snaps' from one configuration to another, and areas where they saturate such that changes to the control handles no longer produce any movement. Standard Bezier curves don't have either of these; I wonder if that's essentially coupled to the higher expressivity they offer?
scythe 8 hours ago [-]
>Perhaps this is not surprising, as the exponent of 1.5 resembles the equation for curvature of a parametric curve : k = x' × x'' / (x'•x')^(1.5)
Hindsight is really something. Of course we usually write the denominator as |x'|^3 but once you see it, it makes sense.
I just went back to dig up some old sources[0], and I can't believe this post is almost a decade old now. This guy's explainers and animations were leagues beyond any other resource I could find through Google searc at the time.
[0] https://jamie-wong.com/post/bezier-curves/
Wasn’t your PhD thesis on attack-resistant trust metrics? At least I remember reading it.
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.
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.
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.
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.
Oh this is interesting. So FWIW - I’ve done a bit of CG hair in production (in a previous life, for DreamWorks) - and now that everyone’s ray tracing, I like to advocate for considering quadratic B-splines for CG hair over cubics. In practice, I don’t personally think you can see anything in hair specular reflections that is based on degree or continuity beyond C1. Catmull-Rom is only C1 and people have been using Catroms for hair for a long time (and interesting side note - I’ve found that Catmull-Rom curves are pretty lumpy and ugly, even lumpier than quadratic B-splines. This is possibly very similar to the issue of designing with subdivision you mentioned).
My opinion here does not apply to surface patches - with surfaces, the continuity can be visible in the reflections. But at my work among the researchers there was a very strong assumption that cubic B-spline curves would be visibly better than quadratic, and that quadratic would suffer from reflection artifacts due to the C1 continuity, which just doesn’t seem to be true (and ignores the history of Catmull-Rom). Quadratic curves are faster and more accurate for ray intersections and bbox calculations, and they offer some interesting advantages like having an analytic rotation-minimizing frame (with the Frenet frame, even…). Of course with procedural curves, I recommend only the quadratic B-spline, not Bézier. With a uniform B-spline, the degree of the curve is essentially nothing more than a smoothing factor. Production hair/fur/sim data tends to be over-sampled already, so the smoothing factor doesn’t buy you much.
BTW, yes I know Cem and I’m familiar with his work. He also has published on some non-polynomial curve types, so your post reminded me of him as well.
I wrote down a bunch of posts on how I achieved the UI primarly to explain the process to my future self[0]
As a mobile developer it was so much fun to do something other than building a CRUD app.
[0]https://www.krtkush.com/computer-graphics-basics-with-compos...
I find it curious that the author makes no attempt to compare his solution to other splines like B-splines or Catmull-Rom splines, given their popularity in computer graphics and CAD.
I’d argue that talking about Bézier is absolutely sufficient in this context; B-splines and Catmull-Rom splines and a few other types are all piecewise polynomial splines (cubic specifically, at least in the case of Catmull-Rom). You can convert B-splines and Catmull-Rom splines to Bézier directly and analytically; therefore B-splines and Catmull-Rom splines cannot do anything beyond what Bézier curves can do. There are some minor usability / interface / intuition differences, but there is no difference in mathematical control.
The other question is whether the control is local. As others have remarked, this has much more to do with the way the curve is embedded into a spline than the curve family itself. In particular, it is deeply affected by the continuity constraints. As payment for the local support, cubic Béziers only give G1 continuity. Euler spiral splines, by contrast, are G2 but changes do cause those ripples.
The pen tool prototype linked in the blog post suggests giving designers more choices. If you specify all control points, you get G1 just like a cubic Bézier. But it also gives the choice of specifying one control point on a smooth endpoint, and solving the other for G2 continuity. In my experience, it feels more like local control than Euler spiral-like splines. When you want smoother curves, you do that, and when you're willing to sacrifice continuity for local control, that's also possible.
So I believe that if for you the "interactivity" does not seem better, that is more likely to be caused by being much more familiar about how cubic Beziers behave, from past experience, than because these hyperbezier curves were really less suited for interactivity. Also, the current implementation in JavaScript seems buggy.
For me, the poor approximation by cubic Beziers of some important curves, like conics and the Euler spiral, is an extremely serious defect, so I like these hyperbezier curves much more and I intend to investigate how efficient can they be, from a computational viewpoint.
It is my understanding that only a couple of very expensive font editors use B-splines where there are three control points which ripple as I noted, however it seems that FontForge supports order2 (quadratic, TrueType) or order3 (cubic, PostScript).
I don’t doubt something Q3 related might have popularized it. I’m familiar with the fast inverse sqrt approximation that was popularized by Q3A. That’s not what you’re thinking of, is it? (https://en.wikipedia.org/wiki/Fast_inverse_square_root) But animators and most people in graphics and rendering (the Pixar, ILM, and Siggraph types) as well as all font designers and mathematicians and car designers and CAD people all knew about Bézier curves long before Quake 3 Arena.
Geometric topology makes my brain itch. I refuse to engage with it, I am certain it would drive me mad.
I do agree though, those elastica (elasticas? elastici??) are fine as hell
After playing with it some more. Not close together, but more side loaded. On reflection while many of these forms would be awkward to find in a drawing program, I think this is the source of the superior spiral the author likes.
Loops and cusps are of course not very useful in 2D graphic or typeface design, and even if you’re animating a plane or designing a rollercoaster you’d probably use more than one Bezier to make up a looping shape.
There are other Bézier shapes that the hyperbezier can't match, including two cusps on the interior. As you say, I consider these not very useful in actual 2D design, and am happy to give them up for smoother curves and the increased range of superellipse shapes.
Spiro curves were supposed to solve it but I am surprised to read here that even spiro fails to approximate elastica. Have you mapped where the limitations are?
For information, I am drawing boat hulls, and elastica would model the natural bend of wood/plywood/metal much better than bezier... Amateur naval designers really lack good tools to bridge the gap between ideal hydrodynamic forms and ease of construction, and there are still a lot of tiny but annoying adjustments when one planks the first hull.
I think hyperbezier would be a natural fit for boat hulls, but it's not a mathematically precise approximation to elastica either. I'd say to carefully evaluate it, and I'd very much like to hear how that goes.
ETA: "parallel curve of elastica" is an intriguing curve family to consider for this application, as it has the correct number of parameters and ticks a lot of the other boxes. However, the math for this is hard mode.
>August 8, 2026
I would guess not.
Hindsight is really something. Of course we usually write the denominator as |x'|^3 but once you see it, it makes sense.