Looks like an excellent resource! I had not seen this before, bookmarking it now.
Bezier curves are immensely useful in graphics, animation and pretty much everywhere you need interpolation. But to get the most out of them, you need to know the tricks to manipulate them, e.g. subdivision and calculation of derivatives.
Nice to see a really thorough resource on one of my favorite methods.
Related: There's a Unity3D video on Bezier splines/curves [0] - it's far more noob than this article, and very good at explaining b-splines from the basics up. It certainly doesn't have the depth of this article (neither the maths nor more advanced spline stuff), but some of it is 'practical' (if you have Unity) and it might make a good primer for those getting started on the subject.
The degree `n` B-spline basis function can be obtained (up to scale and location) by the `n`-fold convolution of the indicator function on [0,1]. It is also, therefore, the pdf for the sum of `n` uniform random variables, i.e., the Irwin-Hall distribution [1].
I have no idea if these facts are useful, but I've always found them interesting.
It's the way my brain works for sure, but dense material is always harder for me to get through when it looks dense and is laid out densely. My brain instantly puts up a hurdle and makes assumptions about the material.
That said, it seems like the entire mathematics and scientific community disagrees with me :)
I would have liked it to be more mathy, the "it seems complicated but it actually is" followed by an approximate explanation is confusing, and the math looks like a bit hidden inside the main explanation.
For more detailed maths, wikipedia and actual B-spline articles are your content of choice. Doing a full analysis of B-splines is out of scope as a section in a Primer on Bezier curves (as noted in the text, I'd have to write a separate primer on B-splines instead), so the maths is not as detailed, and the implementation focuses on code in use by several libraries (like the JavaScript "bspline.js" or C "tinyspline" libraries).
One note about it being an approximate explanation: it's not, B-Spline maths can analysed (like Bezier maths) either using calculus, using geometry, or using algorithm operations, all three being different ways to work out exactly the same thing. The explanation in this primer only covers the algorithmic approach of computing the B-spline function as iterative interpolation, but is functionally equivalent to a more "mathy" approach involving lots of calculus. Doing so does not give you the information you'd get from symbolic maths to aid in things like finding normals, tangents, extremities and inflection points, etc. etc. but for the scope of the section, and given the article it's part of, that's intentional.
Almost all CAD/CAM these days runs on top of the Parasolid geometry kernel. While Parasolid does have b-spline support, it's mostly truely mathematically modeled geometry that is then converted to a poly mesh for rendering - but internally it's all "full precision". It's actually closer to how something like POV-Ray models, rather than NURBS.
In the Film and Animation Industry they have been completely replaced by Sub-Division surfaces. Which offer more flexibility and are easier to work with.
Maya and other software have become heavily focused on Sub-Division surfaces.
Indeed. The main reason they weren't replaced sooner was because parameterizing subdiv and poly surfaces for texturing was historically a pain in the neck, whereas NURBS was essentially free. New techniques like PTex and better UV mapping tools removed that issue, essentially nulling the inherent advantage of NURBS for use as an asset authoring surface type.
It will be interesting to see going forward what happens in games and real time. If something like Pixar's OpenSubDiv will become the de-facto standard for real time geometry or if there will be another paradigm shift to somthing like OpenGL tessellation or something else. Tessellation does not look like it is gaining much traction atm. But then again neither does OpenSubDiv.
I remember when I jumped into the CGI world, NURBS were the big feature in 3DSMAX 2. And it was a huge pain (I guess non optimal math leads to beefy cpu power otherwise it's useless). One day I discover Maya and I realize NURBS are the main surface kind. Except everything was smooth and fluid... on the same very old very weak GPU-less P2 desktop. it's as if the Alias guys were co-authors of The Nurbs Book. Magic.
No, it really wasn't, you changed the link and title I posted to a completely different thing by removing the hash for the B-Spline section that I finally finished adding to the primer about 10 minutes before posting the link, after having been in request for about 2 years, weeks of research, and days of writing/programming.
The link was very specifically to https://pomax.github.io/bezierinfo/#bsplines, and the title specifically mentioned the fact that it was about B-Splines, not the base article (because the base article is nearly 70 print pages worth of content, and the point was to link straight to the spline section near the end instead of linking people to an article that's been on HN before several times, but never with this new content, because it didn't exist any of the previous times).
A lot of people had requested it, and it was worth calling out on its own, specifically. Instead, by marking it a dupe and rewriting the link, you completely wasted the effort of posting it because no one will have any idea the last section is even there. Certainly, some people will have never seen the entire site, but fragment identifiers in URLs are there for a reason. Don't strip them out unless you can show the content people get is the same whether they click on the link with or without the hash. Which for this URL was absolutely not the case.
So: can you please change this back, the link you rewrote it to is not useful for the purposes of why this was posted to HN, and the title you picked doesn't even make sense. This is a link to today's Primer, in 2016, not some historical tiny document from 2011, which the Primer was five years ago when I had only just started it.
I'm a day late, but just to clarify: moderators usually take anchors out of URLs because most of the time it's better for users to see the whole story for themselves. There are definitely exceptions, though, like this one. Sorry for getting it wrong. When we make that kind of mistake we're eager to hear about it and fix it; when we got cpach's email we fixed it right away.
For everybody's future reference, one way to reduce the odds of this happening is to post a first comment in the thread explaining what's new about the story and/or what's special about the anchored portion that's linked to. You don't have to do that, of course, but it can be helpful for readers too, not just moderators.
@dang This is a fair complaint. The submitted link was the latest article in a series - it makes no sense to change the link to the first in the series, and then mark it a dupe because that article has been posted before.
If you have JavaScript disabled, you'll have to enable it, as this book heavily relies on JS rendering, both for the base content (it's been written as a React application) and all the interactive graphics, which rely on JS not just for the user interaction but also for the live-drawing (none of the graphics in this book are flat images, they're all live-rendered).
I wouldn't call that a book, but rather an interactive article. I consider a book something I can save as a PDF, print out, and read without using a computer.
Yeah I typically go with "online article", I think the only place I call it a book is literally in that JS notice, to highlight that we're talking about a lot of content (roughly 70 print pages worth) instead of the more usual "several pages max" that people think of when you use the word article.
Bezier curves are immensely useful in graphics, animation and pretty much everywhere you need interpolation. But to get the most out of them, you need to know the tricks to manipulate them, e.g. subdivision and calculation of derivatives.
Nice to see a really thorough resource on one of my favorite methods.