Why are 2D vector graphics so much harder than 3D?
This is a very interesting article, but it does have some errors.  I&#x27;m no expert in the area, but here are some that I spotted.<p>&gt; The first graphics devices to interact with computers were “plotters”,<p>The first graphics devices used as such on <i>digital</i> computers were the visible debugging CRTs driven from the Williams tube control signals, and of course &quot;ASCII&quot; art (before ASCII) on printers.  George Dyson&#x27;s book on the Johnniac has a lot of images of one-dimensional cellular automata from the dawn of the von Neumann machine.  The TX-0 had a point-plotting CRT and also, I believe, the first pen plotter.<p>&gt; The only major problem with PostScript was its Turing-completeness — viewing page 86 of a document means first running the script for pages 1-85<p>As Don pointed out, that isn&#x27;t the major problem with it being Turing-complete.  Aside from the frequent security holes that have occurred, I recall a four-line PostScript .signature in the 1990s that computed an IFS fractal for 60 seconds and then printed it; it would plot more or fewer points according to whether your printer&#x27;s PostScript was faster or slower, so it might not print out the same way twice even on the same printer.  Writing a PostScript document that renders more or fewer pages is just as easy.  And the common kinds of manipulations you&#x27;d like to do with printable documents are unnecessarily difficult with PostScript because of the Turing-completeness — if you implement them by assuming documents that claim to respect DSC will do so, your tools will break at random on real-world documents whose DSC compliance is imperfect.  Consider the problem of concatenating two PostScript documents (pscat), each of which might have redefined &quot;moveto&quot; in its prologue, or defined &quot;M&quot; as a shortcut version of &quot;moveto&quot; with similar but subtly different meanings; or, worse, interspersing their pages, or displaying reduced images of their pages (psnup, psbook, mpage) on the same page.  In theory you could hack together some kind of sandbox that makes this stuff work reliably, but in practice the solution is to distill the documents to PDF using GhostScript.<p>(For an overview of DSC, see the excellent Brian Reid paper Jasper and Don posted links to: <a href="https:&#x2F;&#x2F;tech-insider.org&#x2F;unix&#x2F;research&#x2F;1985&#x2F;0301.html" rel="nofollow">https:&#x2F;&#x2F;tech-insider.org&#x2F;unix&#x2F;research&#x2F;1985&#x2F;0301.html</a>)<p>Even my favorite PostScript test document (from Network PostScript Printer Installation Illustrated Through Interpretive Dance) prints a rectangle that is quite rarely the same size on different printers; it&#x27;s even different sizes on the same printer using different paper sizes:<p><pre><code>    %!
    clippath stroke showpage
</code></pre>
&gt; The only major problem with PostScript was its Turing-completeness… And that could be slow.  Adobe caught wind of this user complaint, and decided to create a new document format that didn’t have these restrictions<p>This is not really true.  The original motivation for PostScript Distiller (before PDF stopped being a subset of PostScript) was to make a way to get documents onto computers that were too wimpy to run a full PostScript interpreter, like IBM PCs and Macintoshes.  The problem was not, as I understand it, primarily that it was slow, and certainly not that it was Turing-complete (those machines ran lots of Turing-complete languages, after all) but that it required a lot of code and a lot of memory.<p>&gt; It threw out the programming language — but the graphics technology stayed the same.<p>This was only true at the very beginning.  PDF (and SVG) has evolved quite a bit over the years.  Notably, PDF and SVG support alpha-blending and gradients, while PostScript didn&#x27;t, last I checked.<p>&gt; Bezier curves do exist in 3D, where they are known as B-splines, and they are computable, but they have the drawback that they limit the ways you can connect your mesh together.<p>This is almost entirely wrong.  B-splines as such are one-dimensional, or two-dimensional if you consider the abscissa a dimension, though you can of course construct parametric curves of any dimension each of whose coordinates is a B-spline in that dimension.  They are not, in general, computable (and neither are NURBS surfaces, which I think are what is meant), but all of Bézier curves, B-splines, and NURBS surfaces are easy to compute particular points on, if their parameters are computable.  B-spline surfaces in 3-D don&#x27;t, as far as I know, have anything particular to do with Bézier surfaces, except in the sense that Catmull–Clark is a Bézier-like algorithm that converges to a cubic B-spline surface, and of course B-splines (in the sense of basis splines) and the Bernstein polynomials used by Béziers are just alternative bases spanning the same space of polynomials, so you can freely convert a parametric polynomial surface of a given degree between the two representations.  Nor do any of Bézier curves, NURBS surfaces, or B-splines impose constraints on surface topology.<p>&gt; we call approaches like Bezier curves and Hobby splines implicit curves, because they are specified as a mathematical function which generates the curve<p>This is almost entirely wrong; Bézier curves and Hobby splines are parametric, not implicit, and &quot;specified as a mathematical function which generates the curve&quot; is not what &quot;implicit curve&quot; means.  The truth is close to the opposite: an explicit function is a mathematical function which generates the curve, while an implicit function just tells you which side of it you&#x27;re on.<p>&gt; The 3D equivalent of an implicit curve is an implicit surface, made up of basic geometric primitives like spheres, cylinders and boxes.<p>This is very much not what an implicit surface is.  The author has confused CSG (&quot;constructive solid geometry&quot;), which is making things up of basic geometric primitives like spheres, cylinders, and boxes, with implicit surfaces, which are almost, but not quite, completely unlike CSG.<p>An implicit surface is the solution set of an equation in three unknowns.  If you want a sphere, that&#x27;s easy: (x - 17)² + (y - 22)² + (z - 84)² = 39, for any values of 17, 22, 84, and 39.  But a box?  That&#x27;s gonna be a bit rough: (x² - 1)(y² - 1)(z² - 1) = 0 <i>contains</i> a box, but its sides extend to infinity.  It&#x27;s definitely feasible to hack the equation to clip them, but it&#x27;s not what implicit surfaces are good at, and I think some of the obvious approaches make life a lot harder for solvers.<p>A much more typical example of an implicit surface, in my book, is Jim Blinn&#x27;s metaballs — something like (x - 17)² + (y - 22)² + (z - 84)² + (x - 17)² + (y - 28)² + (z - 84)² = 39, which gives you a blobby barbell-looking thing.  Although you might think that it should give you two spheres, actually no patch of its surface is a patch of the surface of a sphere, because the proximity distorts both spheres into non-sphericity.<p>Or, consider a paraboloid, the shape of a satellite dish or a Newtonian telescope mirror: x² + y² - z = 0 (though that particular example is easy to solve as an <i>explicit</i> heightfield, so maybe it&#x27;s not the best example of <i>implicit</i> modeling.)  That&#x27;s gonna be a real pain to model with spheres and cylinders.  You&#x27;re never gonna get there if you&#x27;re trying to get your telescope mirror to focus a clean image.<p>&gt; 2D graphics started and maintained forward momentum around these implicit curves, by near necessity in their use in modelling human letterforms and glyphs. The hardware and software to compute these paths in real-time was expensive<p>This is wrong; although some recent systems like Dan Amelang&#x27;s Gezira do in fact compute paths from letterforms for every frame, none of METAFONT, GDI, and X11 do this, normally.  Instead, all of them rasterize the letterforms early, then use the pre-rasterized letterforms over and over.  PostScript is in kind of a weird gray area, but I&#x27;m reasonably sure that typical PostScript implementations do that most of the time as well, although you <i>can</i> rotate text and blow it up to huge sizes, which necessarily requires re-rasterization at some point, and of course, ever since Type 2, you have &quot;charpath&quot;.<p>&gt; Surfaces like Catmull-Clark and NURBS allow for arbitrarily connected meshes to empower artists, but this can lead to polynomials greater than the fourth degree, which tend to have no closed-form solution<p>This is not, as far as I know, wrong, but is misleading; if you are computing quartic parametric surface patches, you are not going to do it by using Ferrari&#x27;s closed-form solution to quartic equations.  You are going to do it by subdividing triangles, just as you do for higher-order equations, because tabulating the (x,y,z) values for a lattice of (u,v) values is pretty simple actually.<p>&gt; The difficulty, of course, is that only a legitimate genius like Quílez can create Surfer Boy. There’s no existing tooling for signed-distance field geometry, it’s all code<p>This is not even wrong; it&#x27;s incoherent.  ImplicitCAD is &quot;all code&quot;, sure, but does that make it &quot;no existing tooling&quot;?  And, not to bag on IQ here, who is legitimately super awesome, but SDF raymarching is not actually that hard to implement.  You don&#x27;t have to be a genius.  You probably shouldn&#x27;t take the word of someone who confuses CSG and implicit modeling about it, either.<p>Also, it seems a bit amiss to bring up IQ and Shadertoy in the same paragraph, but not mention that IQ wrote Shadertoy!  (Though of course it&#x27;s a team effort now.)<p>Anyway, I thought it was a really interesting article, and it introduced me to a bunch of research I hadn&#x27;t seen.  So it was worth reading.  Just be careful about the errors!