Crytek's Neon Noir demo: ray tracing without RTX analysed
What it does, how it works and how well it runs.
It's been almost a year since games using hardware accelerated ray tracing first arrived in the market, and it's clear that the use of RT technology continues to gain momentum, with hardware support baked into both Sony and Microsoft next-gen consoles. However, the debut of Crytek's Neon Noir demo earlier in the year raised eyebrows - what we were seeing here was software-powered RT, delivered by a Vega 56 and still looking quite performant. We've been testing this demo ahead of its public release and results are intriguing.
To get right to the heart of it, this demo utilises DirectX 11 and requires no specific ray tracing hardware. Rather, this version of ray traced reflections leverages Crytek's mature sparse voxel octree global illumination technology with a new spin, delivering a simplified version of the scene that can generate diffuse lighting, while being traced via a technique known as cone tracing to give glossy reflections. This technique has its limitations though: it has trouble capturing moving/skinned animated objects and the specular reflections it generates are not pixel accurate.
This is where Neon Noir comes in. On top of the information from voxel cone tracing and cubemaps, Neon Noir also injects ray traced specular reflections of geometric on top. This geometric ray tracing handles moving objects like the flying drone in the seen in the demo, allowing for pixel accurate reflections and indeed self reflections.
It's an entirely software-based solution that doesn't use DXR or the Vulkan API's ray tracing functions, so it cannot use any of the benefits of those APIs, such as the RT core in Nvidia's Turing architecture - or indeed whatever equivalent hardware AMD has in development. With it running on compute shaders via DX11, this means it will work on any more modern GPU out there. However, as we know from our own testing with games like Battlefield 5 or Quake 2 RTX, ray tracing is expensive in computational terms without dedicated hardware to speed things along.
Neon Noir makes a number of smart shortcuts to maintain performance that are important to mention. The first of which is the distance at which objects made of triangles are actually ray traced - in the demo, this is clearly limited. The limited distance of triangle ray traced reflections is more obvious in longer shots, so objects further away into the distance have their reflections handled by cubemaps or the voxel cone trace - leaving them decidedly less detailed or less dynamic.
A second area of optimisation occurs from the type of reflections that are represented - surfaces that are more rough, but still reflective, do not get ray traced reflections on them. Only more mirror-like reflections are maintained to keep performance up - this is similar to how Battlefield 5's low and medium settings work, by limiting reflections to only the more mirror-like surfaces.
Another optimisation is how certain objects are traced via the use of less detailed, lower polygon versions of the objects. There's a fanatastic shot of reflected bullet cases in the demo, but look a little more closely and you can see how the shell casings are much less rounded in the reflection than the actual object - thus saving on performance. A further profound speed boost comes from how recursive reflections are handled: reflections of reflections, if you like. As far as I can tell from the demo, simpler cube maps are used here - which is entirely understandable as this type of effect is challenging to execute even with hardware acceleration.
The final area of obvious optimisation comes from the resolution at which the ray traced reflections are rendered at. Neon Noir ships with ultra and very high quality presets, with the former opting for quarter resolution reflections - native 1080p in a 4K scene, as an example. Very high shifts down to an even lower resolution, perhaps as low as one eighth native resolution. Filtering is heavy here, making precise counts difficult but the technique used to boost performance makes sense.
Neon Noir, DX11, Ultra vs High
Rounding it all off is the way in which the demo's basic assets are authored: a closed street with only a handful of moving objects favours the rendering set-up Crytek has chosen here. From talking with developers and reading presentations about ray tracing, we know that updating the representation for animated or moving objects every frame can be quite expensive in its own right, so this scene having only a handful of them definitely makes it a lighter load on the GPU.
The end result is still very impressive though, and looks wonderful in motion, especially with ultra RT enabled. The environment made for the demo is a wonderful showcase of the power of having off-screen information actually being accounted for: all of those neon signs and puddles show in the reflections and do not disappear when the camera moves - which would definitely happen with standard screen-space reflections.
Neon Noir doesn't only look good, it runs well, as the vast swathe of benchmarks on this page should demonstrate. At 1440p on ultra settings, the RTX 2070 Super and the RTX 2060 Super manage to hang around the 60fps line for most of the demo, with RTX 2060 just beneath that. The biggest dips occur in those instances as the screen fills with a reflection surface, like the shells on the ground. If you add in Nvidia's upper-end GPUs into that mix, RTX 2080 Super performs above 60fps at all points in the benchmark, even when looking at the punishing shell casing scene.
AMD results are somewhat more puzzling, especially when the Radeon 7 is out-performed by the RX 5700XT - relatively speaking, Navi outperforms GCN significantly. Even Nvidia Pascal seems to have a small advantage against Vega. In many games, the GTX 1070 is outclassed by Vega 56, but Crytek's ray tracing demo sees the same average frame-rate with improved lowest one per cent scores.
Dropping down ray tracing to the very high setting sees a staggered difference across architectures. Larger Turing processors see around a 15 per cent uptick in performance as represented by the RTX 2070 Super, while RDNA sees a larger 19 per cent boost utilising the very high setting over ultra. Even with that increase in performance, the usual contenders here of the RTX 2070 Super and RX 5700 XT still show radical differences in performance that don't match up with their usual showings in non-RT games. In summary, my sense is that certain architectures are more suited to this style of ray tracing over others, but the technique definitely seems to favour Nvidia hardware old and new - and remember that with Turing, the RT core isn't being touched in the slightest.
Ultimately, the results here are curious and it all makes me wonder about the future of ray tracing in general. How will AMD's RDNA technology perform in such tasks when it gets ray tracing hardware support in upcoming Navi cards or indeed on the next-gen consoles? The API, method, and driver will be different there, so perhaps there is not much we can project from these results.
But the basic idea of CryEngine technology supporting this form of ray traced reflections is very exciting. According to Crytek itself, it can be extended to support near-field ambient occlusion and shadows too - which bodes well for the Crysis remake I dearly hope the developer is working on (and hinted at heavily in a recent technology trailer). In the shorter term though, I would really like to see this technology ported over to DXR or Vulkan Ray Tracing so that it can run even faster - and so CryEngine itself is fully prepared for the inevitable hardware accelerated future.
In the meantime, as a proof of concept, the Neon Noir demo is fascinating. Crytek recommends a GTX 1070 or Vega 56 as entry level GPUs for decent performance, but as it's based on DX11, it should run on virtually anything you have to hand. Check it out, it's a fascinating demo - perhaps not a complete software solution for the challenges ray tracing presents, but certainly a highly performant, impressive-looking demo that delivers good results on relatively modest graphics hardware.