This sample demonstrates the use of the FidelityFX Classifier and FidelityFX Denoiser techniques.
For details on the techniques that underpin the FidelityFX Hybrid Reflections effect you can refer to the respective FidelityFX Classifier documentation and FidelityFX Denoiser documentation.
- Windows
- DirectX(R)12
- Vulkan(R)
The sample contains various UI elements to help you explore the techniques it demonstrates. The table below summarises the UI elements and what they control within the sample.
Element name | Value | Description |
---|---|---|
Show Debug Target | Checked/Unchecked |
Enable/Disable debug target. |
Visualizer | Visualize Hit Counter, Show Reflection Target, Visualize Primary Rays |
Choose the target to visualize |
Global Roughness Threshold | 0.0 - 1.0 |
Modifies the roughness cutoff for ray tracing. |
RT Roughness Threshold | 0.0 - 1.0 |
Modifies the roughness cutoff for ray tracing. |
Don't reshade | Checked/Unchecked |
Use radiance from screen space shaded image (possible artifacts). |
Enable Hybrid Reflections | Checked/Unchecked |
Enable/Disable screen space hybridization. |
The FidelityFX Hybrid Reflections sample uses FidelityFX Classifier to generate a denoise tile list and a ray tracing tile list, FidelityFX Single Pass Downsampler to create a depth hierarchy for depth buffer travesal, and FidelityFX Denoiser to remove noise from the results of tracing jittered reflection rays
Include the interface for the backend of the FidelityFX Classifier API.
C++:
#include <FidelityFX/host/ffx_classifier.h>
Create FidelityFX Classifier context
m_ClassifierInitializationParameters.flags = FfxClassifierInitializationFlagBits::FFX_CLASSIFIER_REFLECTION;
m_ClassifierInitializationParameters.flags |= GetConfig()->InvertedDepth ? FFX_CLASSIFIER_ENABLE_DEPTH_INVERTED : 0;
m_ClassifierInitializationParameters.resolution.width = resInfo.RenderWidth;
m_ClassifierInitializationParameters.resolution.height = resInfo.RenderHeight;
m_ClassifierInitializationParameters.backendInterface = m_BackendInterface;
FFX_ASSERT(ffxClassifierContextCreate(&m_ClassifierContext, &m_ClassifierInitializationParameters) == FFX_OK);
Set up the dispatch parameters and dispatch
FfxClassifierReflectionDispatchDescription dispatchParameters = {};
dispatchParameters.commandList = ffxGetCommandList(pCmdList);
...
FfxErrorCode errorCode = ffxClassifierContextReflectionDispatch(&m_ClassifierContext, &dispatchParameters);
Include the interface for the backend of FidelityFX Single Pass Downsampler (SPD) API.
C++:
#include <FidelityFX/host/ffx_spd.h>
Create FidelityFX SPD context
m_SpdInitializationParameters.flags = 0;
m_SpdInitializationParameters.flags |= FFX_SPD_WAVE_INTEROP_WAVE_OPS;
m_SpdInitializationParameters.downsampleFilter = GetConfig()->InvertedDepth ? FFX_SPD_DOWNSAMPLE_FILTER_MAX : FFX_SPD_DOWNSAMPLE_FILTER_MIN;
m_SpdInitializationParameters.backendInterface = m_BackendInterface;
FFX_ASSERT(ffxSpdContextCreate(&m_SpdContext, &m_SpdInitializationParameters) == FFX_OK);
Copy the depth buffer into the depth hierarchy, set up the dispatch parameters, and dispatch
FfxSpdDispatchDescription dispatchParameters = {};
dispatchParameters.commandList = ffxGetCommandList(pCmdList);
...
FfxErrorCode errorCode = ffxSpdContextDispatch(&m_SpdContext, &dispatchParameters);
Include the interface for the backend of the FidelityFX Denoiser API.
C++:
#include <FidelityFX/host/ffx_denoiser.h>
Create the FidelityFX Denoiser context
m_DenoiserInitializationParameters.flags = FfxDenoiserInitializationFlagBits::FFX_DENOISER_REFLECTIONS;
m_DenoiserInitializationParameters.windowSize.width = resInfo.RenderWidth;
m_DenoiserInitializationParameters.windowSize.height = resInfo.RenderHeight;
m_DenoiserInitializationParameters.normalsHistoryBufferFormat = GetFfxSurfaceFormat(m_pNormal->GetFormat());
m_DenoiserInitializationParameters.backendInterface = m_BackendInterface;
FFX_ASSERT(ffxDenoiserContextCreate(&m_DenoiserContext, &m_DenoiserInitializationParameters) == FFX_OK);
Set up the dispatch parameters and dispatch
FfxDenoiserReflectionsDispatchDescription denoiserDispatchParameters = {};
denoiserDispatchParameters.commandList = ffxGetCommandList(pCmdList);
...
FfxErrorCode errorCode = ffxDenoiserContextDispatchReflections(&m_VRSContext, &dispatchParameters);
For sample controls, configuration, and FidelityFX Cauldron Framework UI element details, see Running the samples.