NVIDIA Doubts Ray Tracing Is the Future of Games
SizeWise writes "After Intel's prominent work in ray tracing in the both the desktop and mobile spaces, many gamers might be thinking that the move to ray-tracing engines is inevitable. NVIDIA's Chief Scientist, Dr. David Kirk, thinks otherwise as revealed in this interview on rasterization and ray tracing. Kirk counters many of Intel's claims of ray tracing's superiority, such as the inherent benefit to polygon complexity, while pointing out areas where ray-tracing engines would falter, such as basic antialiasing. The interview concludes with discussions on mixing the two rendering technologies and whether NVIDIA hardware can efficiently handle ray tracing calculations as well."
A good way to mix both techniques is Relief Texture Mapping. It's a good way to get smooth surfaces thanks to the texture interpolation hardware, with no extra polygons.
Actually, I don't think that's true at all. Raytracing, just like today's rasterizers, can greatly benefit from dedicated hardware for doing vector operations, geometry manipulation, and so forth. This is particularly true as raytracing benefits greatly from parallelization, and it would be far easier to build a dedicated card with a nice fat bus for shunting geometry and texture information between a large number of processing units than it would be to use a stock, general multicore processor which isn't really designed with those specific applications in mind.
Besides, the whole reason to have separate, specialized gear for doing things like audio/visual processing is to free up the main CPU for doing other things. Heck, we're even seeing specialized, third-party hardware for doing things like physics and AI calculations, not to mention accelerators for H.264 decoding, etc. As such, I see no reason to move graphics rendering back to the main CPU(s).
yet we're still clinging tenaciously to the old safety blanket of a mesh of tesselated triangles and projecting textures onto them.
Tessellation is also frequently used in ray-tracers as it makes things much simpler and faster.
Converting it all to mesh approximations of what was sculpted was, and still is, pretty much just a hack to get things to run at acceptable real-time speeds.
It also makes things much simpler for ray-tracers. Really. Intersecting a line with an arbitrarily curved surface is demanding, in terms of cycles and in terms of getting the calculation correct in the first place.
The article is right that ray-tracers must examine every poly, just like raster renderers. Ray-tracing is not, as some have said, O(ln N) where N is the number of primitives. The article's comments that aliasing is a big problem for ray tracing ignores decades of work in ray-tracing to overcome this problem. The article then goes on to talk about radiosity (although not naming it that) and it being even more computationally intensive and says rasterization is better because it can approximate these soft effects - well, so can ray-tracing. The rest of the article is similar... nothing is really *wrong* but I think it's not entirely unbiased either.
Either way I'd still like to get me a machine with one of the NVidia/ATI computation engines to play with though. :D
The tyrant will always find a pretext for his tyranny - Aesop
Current methods do not scale parallel. SLI does not give you 2x the resolution at the same framerate, or double the framerate at the same resolution. Same for any sort of quad SLI solution (two dual chip gfx cards, etc).
Ray tracing scales almost perfectly. The same processor with 4 cores will perform about 3.9x as well (pushed pixles per second, so either higher FPS or higher resolution, or a mix) as one with 1 core. This is why intel is pushing this.
What you may not realise is that NVIDIA sells a renderer/raytracer which uses the GPU for accelleration, targeted at the animation and VFX market.
They are not discounting ray-tracing. They are embracing it. And they know, from lots of their own R&D, that it's not going to be competitive in the real-time market at any point in the forseeable future.
sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});