Ray Trace Objects and Defer Atmosphere/Cloud

From Planetside Software Wiki
Jump to: navigation, search

This document was originally written for Terragen 2.1 and has been updated to make it more relevant for Terragen 2.5, Terragen 3 and Terragen 4.

Ray trace objects[edit]

If you spent any time at all rendering plants in Terragen 2.0 you know that it was difficult to get really high quality images without very long render times. It was not uncommon to use anti-aliasing settings of 10 or more and still want for smoother, crisper vegetation. With Terragen 2.1 that all changed.

Terragen 2.1 and newer versions feature an option to render objects in a separate deferred render pass which is combined with the rest of the scene automatically. By "objects" we mean imported objects in TGO, OBJ and LWO formats, and the built-in objects Card, Grass Clump and Rock. We improved the ray tracing engine and implementing some adaptive sampling routines, and the results are extremely positive. Rendering this way will give you higher quality images, and usually this comes with shorter render times for scenes with reasonably detailed objects. If you have many objects in the scene, for example using the populator, you will almost certainly notice big improvements in image quality and speed by rendering with the new method.

To use this option in Terragen 2 and 3, enable Ray trace objects on the Quality tab of the renderer. In Terragen 4 it is on the Advanced tab and should usually be enabled.

Defer atmo/cloud[edit]

In Terragen 2.2 we introduced an option called Ray trace atmosphere. In Terragen 3 we renamed this to Defer atmo/cloud. This separates the rendering of all atmospheres and clouds into the deferred render pass, the same pass that is used for ray tracing objects. This produces higher quality images of clouds and atmosphere by combining them with the same adaptive sampling engine that is used for ray tracing objects, although it can be enabled even when Ray trace objects is not. The higher quality results of Defer atmo/cloud often come at the price of longer render times, but there are many cases when you should use it. In some cases it can turn out to be faster simply by enabling it on scenes that are complex, particular if they have a lot of vegetation that covers the ground and sky. In other cases, very often it is possible to achieve equivalent quality results in a shorter time if other atmosphere and cloud settings are adjusted well for deferred atmosphere/cloud rendering.

When rendering with Ray trace objects, atmosphere and clouds that are visible in the subpixels of the ray traced objects are always rendered as part of the ray traced objects, so Defer atmo/cloud doesn't affect those particular subpixels. It only affects atmosphere and clouds that would otherwise have been rendered as part of the micropolygon shading of any surfaces that are rendered with the micropolygon rasteriser. This usually includes terrain (planet), sky (background sphere), water (lake) or any other displaceable object type. However, some of those micropolygons might be calculated even if they are hidden behind ray traced objects, so enabling Defer atmo/cloud can avoid calculating the atmosphere/clouds for these hidden pixels and is one reason why it sometimes produces faster renders.

Defer atmo/cloud brings consistency in the way that the atmosphere and clouds are rendered across the whole image, regardless of micropolygon detail or whether or not objects are ray traced.

More pros and cons are discussed in the "More technical details" section below.

The importance of anti-aliasing[edit]

When objects are ray traced or the atmosphere or clouds are rendered in the deferred render pass, one of the most important settings for controlling the quality of your image—and the time it takes to render—is the Anti-aliasing parameter on the Quality tab of the renderer. The square of the anti-aliasing number tells you the maximum number of primary rays that are traced per pixel of the image, or in other words the maximum samples per pixel. An anti-aliasing value of 3 means that up to 9 samples can be taken per pixel; a value of 8 means that some pixels may take up to 64 samples, and this is usually enough for very good images. An adaptive sampling technique is used to avoid taking the maximum number of samples where the sampler detects that the contrast between adjacent samples is below some threshold. This can be an effective way to concentrate anti-aliasing work where it is needed most, to increase quality and reduce the render time. In previous versions, and still with other objects that are rendered with the traditional way, the Anti-aliasing parameter did not have such a great impact on render times unless you set it very high. With Ray trace objects or Defer atmo/cloud you need to be aware that Anti-aliasing can greatly affect both quality and render time.

Ray trace everything[edit]

There is yet another option on the Extra tab called Ray trace everything. For most scenes we recommend that you do not enable Ray trace everything because this can slow down the rendering of other types of objects and reduce their quality. Planet (terrain), Sphere, Plane, Disc and Lake objects all render more efficiently and with higher quality with the default micro-polygon 'rasteriser', and are not optimised for ray tracing. Detail in these objects is reduced for the ray tracing engine so that their shadows and reflections render faster.

For most scenes, we recommend Ray trace objects ON, Ray trace everything OFF. Those are the default settings for new render nodes and new scenes. If you have set a custom default project, we recommend that you update it to include these settings.

More technical details[edit]

There are some situations where you may wish to use Ray trace everything. When everything is ray traced, adaptive sampling can improve the image quality by anti-aliasing shaders and atmospheres (including clouds) and, depending on the sampling settings used, concentrate the anti-aliasing wherever the most contrast is detected. This can be an effective way to reduce noise and anti-alias edges only where they occur. Ray tracing or deferred atmo/cloud rendering also allow clouds and atmospheres to be rendered with volumetric motion blur, whereas the micro-polygon rasteriser only projects the static atmosphere onto a micro-polygon and then blurs the micro-polygon. Bear in mind that these improvements in quality don't come for free; the renderer has to sample the shaders more times per pixel than it usually would with the micro-polygon rasteriser, so higher quality usually comes at the expense of longer render times. Depending on various factors, however, ray tracing may allow you to reduce the overall render time for an equivalent level of quality.

In Terragen 2.2 and higher you can get most of these benefits to your atmosphere and clouds by enabling Ray trace atmosphere (Terragen 2.2) or Defer atmo/cloud (Terragen 3 and 4).

We can think of three reasons why ray tracing everything (or using deferred atmosphere/cloud rendering) may sometimes allow you to reduce render time. Firstly, the ray tracer does not have the problem of overdraw that sometimes happens with the micro-polygon rasteriser, and this can make a big difference in some scenes with mountain ranges which are accidentally drawn back-to-front where front-to-back would be best (this is due to the very simple sorting algorithm used when subdividing polygons in the default renderer, which sometimes does not sort as well as it should). Secondly, surfaces which are viewed at glancing angles, such as terrain or water near the horizon, tend to have micro-polygons that appear smaller than a pixel even thought they would appear much larger if they had been facing the camera. This level of detail is maintained so that important displacements are not missed, because the renderer doesn't know in advance how flat the surface will be. In these areas the surface shaders and atmosphere/cloud shaders might be sampled much more often than in other parts of the image, whereas the adaptive ray tracer treats all parts of the image in the same way. Thirdly, because the level of sampling can adapt to the amount of contrast it detects on a per-pixel or per sub-pixel basis, it is often possible to use lower values for various other render settings that are usually chosen to reduce noise or aliasing of various kinds. For example, a cloudscape might be smooth in most areas of the image and extremely noisy in others. With the micro-polygon rasteriser, the most common way to reduce the noise is to increase the Num samples parameter on the cloud layers or atmospheres, but the extra samples are wasted on the areas that have no noise and they take longer to render. If, instead, the cloudscape is rendered as part of the deferred render pass, the adaptive pixel sampler will likely reduce the noise overall by tracing more rays per pixel than the micro-polygon rasteriser would, and if the settings are chosen well it will concentrate more rays in the noisier areas.

When using Defer atmo/cloud or Ray trace everything, it is tempting to use lower quality settings in the clouds and atmospheres and let the adaptive pixel sampler solve all noise problems. But in practice this is not always the best strategy. It is often better to adjust cloud and atmosphere settings to give acceptably noise-free results in most of the image with very low anti-aliasing/pixel sampler settings, and allow the adaptive sampler to step up one or two levels for a relatively small area of the total image. In some cases, however, it is possible to take advantage of high pixel sampling levels. Images which need to be heavily sampled for other reasons - e.g. detailed vegetation - may render to a high quality with lower-than-expected settings in the cloud and atmosphere nodes simply because most pixels are sampled more often. Similar observations can be made with other sampling settings such as those for soft shadows.

Ray trace everything is therefore worth considering for renders that do not contain any terrain, such as skyscapes and waterscapes, or for atmosphere passes which are to be composited with other passes afterwards (although for skyscapes and atmosphere passes you could simply use Defer atmo/cloud instead of Ray trace everything).

Anti-aliasing settings[edit]

If you use Ray trace objects, Defer atmo/cloud or Ray trace everything, the quality of your image (or parts of it) strongly depends on the Anti-aliasing parameter. In effect this parameter is like a preset that controls the parameters of the adaptive pixel sampler. You don't need to know exactly how these parameters are affected by the anti-aliasing preset; we've selected good presets so that you don't need to think about it. However, if you want precise control over the adaptive sampling this is possible by editing the Render Pixel Sampler node. To edit the Render Pixel Sampler, press the Edit Sampling button on the Quality tab of the renderer.

(The Render Pixel Sampler is a node containing the parameters for the adaptive pixel sampler. It is contained in the internal network of the Render node. It is safe to delete a Render Pixel Sampler node, but another one may be created with default settings the next time an image is rendered or you press the Edit Sampling button. You should not create additional Render Pixel Sampler nodes as this may result in unexpected behaviour.)

Render Pixel Sampler parameters[edit]

Pixel noise threshold is used for adaptive sampling (adaptive anti-aliasing), unless you set the first sampling level to "Max samples (non-adaptive)".

As an example, let's say you have anti-aliasing set to 4, which gives you a maximum of 16 samples per pixel, and set first sampling level to "1/16 first samples". This gives you a minimum of 1 sample per pixel when max samples is 16. The maximum and minimum number of samples per pixel is shown just below the main anti-aliasing parameter. The minimum samples per pixel depends on the maximum samples and the choice of first sampling level. It also says "mean" next to the number because it may not always be the same for each pixel, due to odd spacings explained later.

In the above example, first off, Terragen takes one sample per pixel. For every four pixels, it looks at the difference between the luminance of those pixels and the luminance of the average of those pixels. This is a way to estimate how much noise or contrast there is in this region. If the total difference is greater than the pixel noise threshold, then that pixel is subdivided into four sub pixels. The process continues with the subpixels, comparing sets of four samples at a time and deciding whether to further subdivide.

The actual threshold used to decide whether to subdivide to the next level depends on the spacing between the samples in the current subdivision level compared to the size of a pixel. At deeper subdivision levels (more samples), the allowable threshold is higher (making it less likely to subdivide) because at higher subdivisions each of the samples has less contribution to the pixel result and we want to help the algorithm stop subdividing as soon as possible. (The maximum samples will never be exceeded, however.) In the same way, if the first sampling level is more coarse than 1 per pixel, the actual threshold used on the first level will be lower than the value entered.

If you choose settings that show that minimum samples per pixel are less than 1, this means that the spacing between the first samples will be larger than a pixel. If you have anti-aliasing at 1, and the first sampling level is "1/4 first samples", this means that there will be only one first sample for every four pixels, i.e. a spacing of 2 pixels. The same would also be true of anti-aliasing 2 with "1/16 first samples". You can make the first sampling level even coarser than this. Generally only useful for low quality previews, but nice and fast.

This all makes sense if you have anti-aliasing levels that are powers of 2, e.g. 1, 2, 4, 8. These correspond to maximum samples of 1, 4, 16, 64. The spacing between samples at all levels of the adaptive process will be powers of 2. However, because Terragen's anti-aliasing levels allow you to use odd values, sometimes the samples of the first sampling level will not fall on exact pixel spacings, which is why you sometimes see non-whole numbers for the mean minimum samples per pixel.

Sometimes these odd spacings degrade image quality or introduce artifacts, especially with motion blur. However, in most static renders there are no noticeable problems, and it's quite useful to be able to choose AA levels between the powers of 2 levels. Many other adaptive ray tracers restrict their sampling to powers of 2. If this concerns you, choose anti-aliasing levels 2, 4, 8 or in extreme cases 16.

The luminance values and the differences between them are actually measured in a non-linear colour space so that dark parts of the image don't appear noisier than bright parts.

Currently the adaptive sampler only keys off luminance, rather than the individual RGB components. Samples that have different hues or saturation values but give the same "luminance" will be seen as being equal, so high amounts of noise in colour and saturation may be tolerated by the sampler. This is often OK, because human vision is also less sensitive to high frequency changes in these things. It also means that the most noise is allowed in the blue channel, and the least in the green channel, due to the weightings of these values in the luminance calculation. There are many situations where this approximation isn't good enough, however, so we will add options to change this in future versions.

A parameter is an individual setting in a node parameter view which controls some aspect of the node.

A single element of an image which describes values for color and/or intensity, depending on the color system which the image uses. Groups of ordered pixels together form a raster image.

A sample refers to a value or set of values at a point in time and/or space. The defining point of a sample is that it is a chosen value out of a continuous signal. In Terragen 2 it is usually a mathematical (procedural) function that is being sampled.

A single object or device in the node network which generates or modifies data and may accept input data or create output data or both, depending on its function. Nodes usually have their own settings which control the data they create or how they modify data passing through them. Nodes are connected together in a network to perform work in a network-based user interface. In Terragen 2 nodes are connected together to describe a scene.

This is essentially the brightness of the colour. Terragen converts RGB colours to greyscale by taking the luminance of the colour.