| |

Imagination Incorporates Ray Tracing

October 15, 2013, Imagination Developer Connection, San Francisco—Imagination Technologies described the flows and technologies involved in ray tracing for images.

Wikipedia notes that in computer graphics, ray tracing is a technique for generating an image by tracing the path of light through pixels in an image plane and simulating the effects of its encounters with virtual objects. The technique is capable of producing a very high degree of visual realism, usually higher than that of typical scanline rendering methods, but at a greater computational cost. This makes ray tracing best suited for applications where the image can be rendered slowly ahead of time, such as in still images and film and television visual effects, and more poorly suited for real-time applications like video games where speed is critical. Ray tracing is capable of simulating a wide variety of optical effects, such as reflection and refraction, scattering, and dispersion phenomena (such as chromatic aberration).

The rationale for adding ray tracing to the GPU is to help with content creation and open up creative freedom. A workstation uses about 300 W of power and has memory bandwidth of 240 Gbps. In a mobile device, the limits are 2 W and 20 Gbps.

The GPUs can now process about 16 rays per pixel at 30 FPS, or from 300 to 600M rays per second. A hybrid ray trace and render flow takes advantage of both capabilities. The ray tracing accelerates structural 3-D images and improves the spatial structures better than a triangle tree. The hardware after the vertex shading stage does the highly compute intensive work.

A high traversal memory bandwidth is required and needs sorting to map the objects to a position. For branch divergence, the GPU shares instructions and the pipeline with the CPU, so there is a need to re-parallelize the programs and data. The API stack uses Open RL which is similar to Open GL ES 2.0 for the graphics APIs, sharing of memory, and shaders and texturing.

One primitive object is the render state and geometry data. This persistent object holds the associations for the ray trace. The launched rays and the intersections form objects. This implementation has no fragment shader, just the ray shader. The triangles are used as a base unit for light and there is a frame shader per pixel to launch the rays. An abstracted transversal API client is not able to see the details as the frame and ray shaders are built as fire and forget.

For more details, see developer.caustic.com

Similar Posts