This chapter will review all the key features, parameters and settings that interact with REDsdk's software ray-tracer.

Software ray-tracing vs. hardware ray-tracing

REDsdk can render simple images using its hardware accelerated ray-tracer. There's nothing specific to be done to leverage hardware accelerated ray-tracing. Just call RED::IWindow::FrameDrawing and enable some ray-tracer options on the rendered camera. The hardware ray-tracing capabilities in REDsdk are mostly limited to reflections, refractions and shadow casting. Both glossy reflections and area shadows are handled, but the rendering time can be quite high on rendering these dispersive effects.

To render an image using the software ray-tracer, any of the RED::IWindow::FrameTracing methods needs to be called instead of RED::IWindow::FrameDrawing, and some ray-tracing options must be set. The engine must have been initialized in hybrid or software mode to make sure that software rendering can be done (see: Hardware or software startup).

Rendering feedback

The feedback delivered by a software ray-tracer does matter. As a ray-traced image can take hours to render, what do we see while it's not finished? Learn all the details here: Feedback.

Rendering options

Setup of rendering options is of course very important. The page here: Ray-tracing options detail all the software ray-tracer options that can be setup for a rendering. Note that this does not cover global illumination options that are reviewed here: GI rendering options.

Sampling method

REDsdk's rendering is based on Monte Carlo sampling. Learn all the details here: Monte Carlo sampling

Using rendering layers

Rendering layers can be extracted out of a software rendering if the rendering method used is RED::IWindow::FrameTracingImageLayers. See all the details here: Rendering layers.

Adding custom primitives

The default implementation of REDsdk supports ray-tracing of meshes, lines, points and texts objects. Only tessellated primitives are supported by the default intersection routines available in REDsdk. The REDsdk API delivers callbacks that can be used to add application specific primitives to the software rendering. That way analytic primitives or application specific primitives of any type can be managed and rendered. See the details here: External custom primitives.

Numerical accuracy in ray-tracing

REDsdk data can be natively simple or double precision. Hardware rendering is mostly based on simple precision. Special techniques such as using Floating origins can help in increasing locally the numerical accuracy of a given dataset, but how does this behave in ray-tracing? See here for some explanations: Numerical accuracy.