A Brief DemonstrationIn other ray tracing demos I have seen from Intel (Quake ray traced) and NVIDIA, Caustic claims that what we are seeing is a very low ray count and bounce limit design. The rays remain mostly coherent and thus have good memory locality in order to increase the efficiency of the tracing on those particular processors. But the real benefits of ray tracing come into play when ray counts and bounce limits can be increased to a much higher level, increasing fidelity and the number of effects that can be produced on the rendered image.
For ray tracing, rendering things like shiny balls, shiny cars or anything with a near-mirror finish on it can be ray traced somewhat easily. But doing effects like a glossy reflection, soft shadows or depth of field require a lot more ray tracing power and a lot higher number of rays per pixel on the screen. Caustic claims that no other ray tracing acceleration technology has shown those effects because they are so demanding and performance would basically drop to zero in those cases. Not so with the Caustic hardware we saw on display.
Real-time demo with AA disabled
When I visited the offices of Caustic last month, they presented me with a working real-time demo of the CausticOne hardware running in a MacPro using only the CPUs for shading; no GPU was used.
To setup the demonstration: two Audi R8s are sitting in a Venetian square, each built of about 1.8 million triangles. The surroundings are mostly flat and texture based, just to give us some context. The image being rendered in real-time is VGA resolution (640×480). Nearly all of the parameters can be adjusted in real time during the render including things like ray count per pixel, anti-aliasing implementation, the number of bounces allowed for each ray and even the shader code itself thanks to OpenGL.
Real-time demo with AA enabled
Without having the exact demo to show you as I saw it, let me just give you a few key notes from my experiences:
- AA was disabled during camera motions around the scene to speed up rendering but was re-enabled when the camera stopped.
- There were many areas of reflections inside of reflections inside of reflections – a large number of bounces are required for that.
- The car paint was built as a procedural shader that casts rays as part of the code – James edited it in real time during the demo to prove it.
- By moving slider bars or changing ray counts, performance was definitely changing in real time. The demo as they first showed it (4 rays per pixel I believe) would run at 5-6 FPS. I could increase the ray count to 16 or something to get a better image but performance would decrease proportionally.
- James demonstrated procedural simulation of depth of field with a shader that emulated a camera lens with aperture – no rasterization hacks needed.
- Ambient occlusion, a hot feature used in DX10.1, was shown to work in the corners of the cars being rendered in real-time and again done procedurally.
- Dismantling the car by removing the hood or doors was done in real-time and moving them around the scene in order to show the card’s performance with geometry modification.
I know that while most of the imagery you are seeing in the video might not seem as impressive as current game engines using rasterization, those people that understand the current state of ray tracing technology can tell you how revolutionary this speed up could be.