Back in March, Crytek debuted the ‘Neon Noir' demo at GDC, showing off real-time ray tracing in CRYENGINE for the first time, all running on an RX Vega 56. The demo does a good job of showing off ray-traced reflections specifically but now Crytek has shared an update diving deeper into the technical side of things.
Vladimir Kajalin, the Principal Rendering Engineer for CRYENGINE, offered some discussion surrounding the engine's implementation of ray-tracing on the technical side. This is something that the engine team has been working towards since 2015 as part of the ‘Global Illumintation' feature. Ray traced lighting has been implemented but one area that the engine struggled with was real-time ray-traced reflections, so most developers have continued to use pre-baked cube-maps and local screen space reflections.
As Neon Noir demonstrates, CRYENGINE's Global Illumination tools now support real-time mesh ray-traced reflections and refractions, all powered by the GPU. As Kajalin puts it, this is still a research and development project, but “ray-traced reflections will come to the engine by the end of the year”.
As we already know, the Neon Noir demo was running on an RX Vega 56 and was capable of decent results. Kajalin explains that there are specific optimisations in place within CRYENGINE to allow for this:
“One of the important components of any ray tracing implementation is the ray intersection acceleration structure. Our SVOGI (Total Illumination) system already contained what was necessary, so it was a relatively straightforward step to add the data required for ray tracing. In the current implementation, for every voxel, we store a reference to overlapping triangles, plus the usual information like albedo, opacity, and normal data.
Merging voxel and ray tracing data provides great flexibility. For example, for diffuse rays, true mesh tracing is needed only near the beginning of the ray but for the rest of the ray we can use more efficient cone tracing without any visual artifacts. A similar optimization works with specular rays. Only smooth and clean surfaces like mirrors require true mesh ray tracing. Most low-gloss, less shiny surfaces can be traced much faster simply by tracing voxels, which will achieve the same or better visual output.”
Combining mesh tracing with voxel tracing allows CRYENGINE's implementation to run well on mainstream, non-RTX GPUs. However, “RTX will allow the effects to run at a higher resolution” and enable higher detail settings.
There are multiple ways that ray-tracing can be used within games, from ambient occlusion to soft shadows. At this point in time, Crytek is focused on paving the way for very reflective surfaces, as seen in the demo. Developers will be able to start using CRYENGINE's new ‘Total Illumination' lighting suite later this year.
KitGuru Says: The Neon Noir demo was very impressive, particularly due to the fact that it was running on a mainstream GPU, rather than an ultra high-end RTX 2080 or RTX 2080Ti. The feature will be handed over to developers later this year, so it will be a while before we see developers making use of it and implementing it in their games.