A Macro View of Nanite
elopezr.com
elopezr.com
Nanite is a system for efficiently rendering masses of geometry (more so than using traditional methods)
Lumen is a technique to enable global illumination (rendering with multiple light bounces, traditional engines do 1 bounce + trickery) by first converting geometry to signed distance fields. Signed distance field techniques are very interesting, swapping triangles for analytic surface equations, they can be used to accelerate complex physics and lighting calculations. They've only recently started making their way into big commercial engines – starting with Media Molecule's Dreams game and now in UE5
Lumen deep dive: https://docs.unrealengine.com/5.0/en-US/RenderingFeatures/Lu...
Signed Distance Functions, Inigo Quilezles: https://iquilezles.org/www/articles/distfunctions/distfuncti...
Here is a link to an admittedly very long and very large PDF detailing the methods they used.
http://advances.realtimerendering.com/s2015/mmalex_siggraph2...
It is strange that Dreams didn't make a bigger splash. It is the first time an engine focused on making low-polygon assets look as aesthetically pleasing as possible. The ability to turn up the rendering roughness in some early sketches, and then tune it down once more details are added is incredible. I expected a small revolution with many competing engines reusing the tech, but nothing happened so far?
I thought once they create splats as quads, the rest of pipeline is standard? Each quad should be 2 triangles that get clip view coordinates, then pixel shader paints the brush texture, and then ROP assembles them on screen. Could you point out where I'm wrong? And in what way can a pixel end up on the screen without going through ROPs?
Or is it a different thing with the same name?
[1] https://robertsspaceindustries.com/spectrum/community/SC/for...
But it's now a pretty standard staple of VFX and other sorts of industries to do a cheap approximate raycast on the GPU.
Lumen simply uses the same data structure to accelerate bounce lighting cone tracing.
[0] http://advances.realtimerendering.com/s2015/DynamicOcclusion...
The biggest repeated claim there is that Nanite makes rendering cost scale primarily with screen resolution and with little impact from scene complexity.
I haven't had the opportunity to test it myself, but I've spoken to colleagues who got the demo running, ran some tests, and analysed it in RenderDoc. As incredible as it sounds, at a glance it seems Nanite largely delivers on what it promises. I've been very skeptical, but this is really exciting.
[0] https://docs.unrealengine.com/5.0/en-US/RenderingFeatures/Na...
My gamedev path is (stubbornly?) along a low-level path through C and Haskell. So I doubt I'll ever use UEx. But I can't wait to know enough to learn from this and build libraries for myself.
I've mostly done some 2D stuff, at most using some fixed-function-pipeline-sort of things (blending.) I'm still early in my computer graphics journey, but the Haskell Vulkan bindings are good (there's even a Quake3 engine written with Haskell and Vulkan) so I figure starting with learning Vulkan will be a good starting point. I'm a CompE by education so I would really prefer to start low-level I think.
Here for example is impressive GI implementation from single Path of Exile dev https://youtu.be/OPFvcsQAKjc
(In a similar marketing trend, Nvidia's "Deep Learning Super Sampling" is more like 2x2 grid deinterlacing, not magical AI upscaling.)
It's still alternately rendering a 2x2 grid.
But the fact remains that DLSS 2 is friggin amazing: achieving combination of visual quality and performance that was not possible before it, and in some cases it looks even better than rendering at the native resolution. It's solving a hard problem, and does it very very well.
My point is rather that most of the marketing speak makes it sound like an _impossible_ upscaling tech, rather than an impressive temporal super sampling tech.
I do wonder about the "better than rendering at native", though. In true TV-set marketing fashion, DLSS 2.0 comes topped up with a free sharpening filter to make it look slightly sharper than native renders, by default.
The 10000ft overview is perhaps easy to understand but the details are anything but basic.
How does the streaming part work? I don't think this article mentioned it.
As far as I can tell this architecture was possible at least starting from the introduction of DX11 hardware more than 10 years ago, and it seems to be the most straightforward way of rendering a realistic 3D scene.