> For the complete documentation index, see [llms.txt](https://ipgames.gitbook.io/htrace-ao/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ipgames.gitbook.io/htrace-ao/settings-and-properties/rtao-settings/rtao-denoising/temporal-denoising.md).

# Temporal Denoising

## Reprojection Filter

Defines a reprojection filter used for temporal history fetch. **Linear** is fast but introduces blur, while **Bicubic** is slower but much sharper. This option affects only the sharpness of the reprojection, not its effectiveness.

{% hint style="warning" %}
The filter is applied only to the history, meaning the sharpening effect will be visible during motion. It isn't a general-purpose sharpening effect (like **CAS**) and will have no impact on the stationary image.
{% endhint %}

*Performance impact: moderate, activate only if necessary*

{% tabs %}
{% tab title="Linear" %}

<div data-full-width="false"><figure><img src="/files/ZzSylYTjiIq6D8cWObLe" alt=""><figcaption><p> 3X Zoom</p></figcaption></figure></div>
{% endtab %}

{% tab title="Bicubic" %}

<figure><img src="/files/HBxOkbMIpRM3pYZn5udN" alt=""><figcaption><p>3X Zoom</p></figcaption></figure>
{% endtab %}
{% endtabs %}

## Sample Count

Specifies the number of temporally accumulated frames. More temporal samples lead to better noise reduction with no additional performance cost, while fewer samples make occlusion more reactive.

Use the **Temporal Disocclusion** [Debug Mode](/htrace-ao/settings-and-properties/shared-settings.md#debug-mode) to inspect the state of temporal accumulation. In this debug mode, freshly disoccluded areas, where no temporal history is available, are marked in red. Accumulation progress is shown in grey, and fully accumulated pixels are displayed in white.

*Performance impact: none*

<figure><img src="/files/sSJSsmNToAwWZU99nXaO" alt=""><figcaption><p>Temporal Disocclusion debug mode showing 8 frames of temporal reprojection</p></figcaption></figure>

## Rejection Static

The strength at which occlusion **from static objects** cast **onto dynamic objects** is rejected. The higher this value, the lower the speed a moving object needs to reach to trigger rejection. If set to **0**, it is disabled entirely. It is recommended to **keep this value low**, as occlusion cast from static objects onto dynamic ones rarely produces strong temporal artifacts.

The example demonstrates how a disabled Rejection Static parameter makes the occlusion cast **from** the static pillars **onto** the moving sphere not responsive enough, and half of the sphere remains occluded, as if it were moving along a plain wall. When the Rejection Static parameter is increased, the denoiser starts responding quickly enough to show occlusion from each individual pillar and reject it in between. This video demonstrates an edge case, and in practice, a value of 0.1 – 0.4 is usually enough for most purposes.

*Performance impact: none*

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLiPpxgft87FiOXU8wYFQ%2Fuploads%2FTSuBWWhFlAcsoMgoIk6u%2FDocumentation%20Rejection%20Static-6.mp4?alt=media&token=b456d3bf-819b-4888-8ffe-1f77b118c26c>" %}

## Rejection Dynamic

The strength at which occlusion **from dynamic objects** cast **onto static objects and other dynamic objects** is rejected. The higher this value, the lower the speed a moving object needs to reach to trigger rejection. If set to **0**, it is disabled entirely. It is recommended to **keep this value high**, as occlusion cast from dynamic objects usually produces the strongest temporal artifacts.

The example below shows how the occlusion **from** the moving sphere **onto** the static wall isn't responsive enough and lags behind the sphere when the Rejection Dynamic parameter is disabled. When it's increased, the denoiser suppresses the lag and makes the occlusion far more responsive.

*Performance impact: none*

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FLiPpxgft87FiOXU8wYFQ%2Fuploads%2FOcXEGBnbP6r3IVJvlffI%2FDocumentation%20Rejection%20Static-7.mp4?alt=media&token=a1e958be-0c7e-4533-981f-f6f4269f590c>" %}

## Disocclusion Boost

This option is visible only when the [Ray Count](/htrace-ao/settings-and-properties/rtao-settings/rtao-quality.md#ray-count) parameter is set to a value **less than 4**. In this case, activating it will selectively force the number of rays to 4 only for pixels that have no temporal history in the current frame (marked as **red** in the **Temporal Disocclusion** [Debug Mode](/htrace-ao/settings-and-properties/shared-settings.md#debug-mode)). This can help mitigate excessive noise and speed up temporal convergence in those areas, while maintaining a low overall Ray Count for pixels that have 2 or more frames of accumulated temporal history, which is usually the majority.

*Performance impact: moderate*

## Use Normal Weighting

Specifies whether the difference in surface normals should be considered during temporal history reprojection. This option can mitigate minor reprojection artifacts where occlusion from one surface leaks onto another, unoccluded surface. Such artifacts typically occur on small, irregular geometry.  This option is incompatible with the **Bicubic** [Reprojection Filter](#reprojection-filter) and is therefore hidden when it is selected.

*Performance impact: small*
