Slug: Dynamic GPU Font Rendering and Advanced Text Layout
sluglibrary.com
sluglibrary.com
Pathfinder tessellates edges into microtriangles, computes signed trapezoidal areas in the fragment shader, and then accumulates those areas using a compute shader. I assume that this would make Pathfinder a "tessellating" algorithm in the language of this article as opposed to a "non-tessellating" one.
By contrast, I can't verify from source, but it appears that Slug does all the work in a fragment shader. If so, this would make its closest relative the Will Dobbie vector texture approach [1].
I considered the Dobbie technique but rejected it because it's very slow, asymptotically so even: it's O(height ∗ width ∗ number of curves), with a high constant factor as Newton-Raphson or de Casteljau subdivision (note that the quadratic formula is an alternative if all you care about is TrueType) has to be repeated over and over again for every pixel/subsample in the scene. I don't know how any non-tessellating algorithm can avoid this asymptotic problem, since if you defer all the work to the fragment shader then you have no choice but to run your expensive shader on a conservative cover area instead of only the areas that need to be expensive (i.e. edges, or curves if you're doing Loop Blinn). By contrast, traditional scanline rendering on the CPU is O(height ∗ number of curves), not counting the blitting, and forward differencing can make the work needed to be done for each curve on the scanline extremely cheap. For this reason, every non-tessellating algorithm I've seen is significantly outperformed by typical CPU renderers in practice.
This is not to say that non-tessellating text renderers such as what Slug seems to be are worthless: they may be useful to avoid costly CPU/GPU synchronization if the size of the text to render is not known by the CPU, for example if it depends on the result of vertex shading for a scene.
My further work on Pathfinder, should it pan out, ought to allow for more precise tessellation without significant performance cost, exploiting the fact that the shape of the traditional CPU scanline rendering algorithm can be adapted to generate triangulations on-the-fly through monotone polygon decomposition. My colleague Nical Silva's Lyon [2] shows how this idea can work, though I'm still working on adapting the technique to efficiently handle curves and high quality Levien-style antialiasing. This would eliminate the compute shader step, allowing Pathfinder to easily composite into 2D and 3D scenes as Slug can do without sacrificing performance. Bear in mind that this work is highly experimental and unfinished.
[1]: http://wdobbie.com/post/gpu-text-rendering-with-vector-textu....
It seems like this would have the same challenges as multi channel signed distance fields [0], where for unicode (e.g. Chinese characters) you need to generate textures on the fly and ship them to the GPU for the fragment shader to work off of.
[0] HN Discussion: https://news.ycombinator.com/item?id=20020664
Good text rendering/layout is about the only thing I feel like I'm missing from being able to pretty simply/rapidly create 3d apps with web tech these days. I still end up typically just overlaying DOM elements over the scene :/
That's precisely what I'm looking at. I'm not as familiar with the front-end space as I used to be. What's the SOTA these days?
But, here's their article on text in three.js: https://threejs.org/docs/#manual/en/introduction/Creating-te...
I think the bitmap font stuff can be extended to rendering SDF (signed distance field) fonts, which are nice enough for me--but that is not ready to use out of the box.
I just found this...
Google's CanvasKit - Skia + WebAssembly
I spent far too long looking for technical details, a github or similar on that page before I realized that this wasn't open.
I'm not opposed to non-open source software, but it would be nicer if this was a bit more up front.
I wonder how they both compare. I am guessing Slug is more accurate but certainly also much more intensive, if its actually rendering outlines.
Too bad the site is very mysterious about licensing and pricing.
Did anybody contact them to request a quote?
So do PC laptops that do UEFI boot since Windows 8.
It's not really problem on laptops, but more on desktops, especially if you have add-on cards that initialize themselves with custom UEFI addon. Or when you need to work in UEFI shell. Or when you use boot manager in text mode, like grub (but grub know how to switch modes, at least). Or miriad of other things, that fall outside of the happy path of bootloader booting the OS on fixed hardware.