Radeon ProRender

Temporal Accumulation Filter

Filter

RIF_IMAGE_FILTER_TEMPORAL_ACCUMULATOR

Description

This filter can be used for accumulation and averaging of the frames taking into account changes in the position and perspective of the camera. Using a view projection matrix, the filter performs reprojection of the previously stored buffer for new camera position and adds this data to the new frame. This avoids the complete loss of ray tracing data when the camera is changed, which greatly improves the picture’s quality. The filter uses consistency testing to avoid mixing, when objects are moving on the scene. A filter can be used to find temporal variance of the output colors. Note that the filter retains internal state.

Parameters

Parameter Type Input/Output Description
viewProjMatrix float16 input View-projection matrix for the current frame. This matrix is used to reprojection a previously obtained frame to a new position. The filter stores the view projection matrix of the current step and uses it on the next step for obtaining the motion buffer. The motion buffer is used for reprojection. It should be updated at each camera change.
Default value is the identity matrix 4x4.
positionsImg image input The image containing position vectors. Used to generate motion buffer, and for consistency testing. This parameter is required for correct operation and can be ignored.
normalsImg image input The image containing normal vectors. Used for consistency testing. The filter stores this buffer and uses it on the next step to check if a geometry change has occurred. The parameter is optional. If used, can improve the consistency testing.
meshIdsImg image input The image containing IDs of meshes. The filter stores this buffer and uses it on the next step to check if a geometry change has occurred. The parameter is optional. If used, can improve the consistency testing.
outVarianceImg image output The image in which output temporal variance will be stored. Temporal variance is used by some filters (see EAW and Local Weighted Regression filters) to adjust the threshold. This allows you to reduce the blur in a region with a small variance and increase where the variance is higher. The parameter is optional.

Usage Example

rif_image_filter filter = nullptr;
rif_image_filter filter = nullptr;
rifContextCreateImageFilter(context, RIF_IMAGE_FILTER_TEMPORAL_ACCUMULATOR, &filter);

//Attach renderer outputs to filter
rifImageFilterSetParameterImage(filter, "positionsImg", positionsImg);
rifImageFilterSetParameterImage(filter, "normalsImg", normalsImg);
rifImageFilterSetParameterImage(filter, "meshIdsImg", meshIdsImg);
rifCommandQueueAttachImageFilter(queue, filter, inputImage, outputImage);

while (isRun)
{
   // Render new frame

   //Update view projection matrix
   rifImageFilterSetParameter16f(filter_, "viewProjMatrix", mvp);
   rifContextExecuteCommandQueue(context_, queue_, nullptr, nullptr, nullptr);
}