Skip to content

Latest commit

 

History

History
106 lines (75 loc) · 4.63 KB

hybrid-shadows.md

File metadata and controls

106 lines (75 loc) · 4.63 KB

FidelityFX Hybrid Shadows

alt text

This sample demonstrates the use of the FidelityFX Classifier and FidelityFX Denoiser techniques.

For details on the techniques that underpins the FidelityFX Hybrid Reflections effect you can refer to the respective FidelityFX Classifier documentation and FidelityFX Denoiser documentation.

Slides which review the main steps of FidelityFX Hybrid Shadows sample can be found here.

Requirements

  • Windows
  • DirectX(R)12
  • Vulkan(R)

UI elements

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.

Controls

Element name Value Description
Run Hybrid Shadow Checked/Unchecked Enable/Disable the hybrid shadows.
Use Denoiser Checked/Unchecked Enable/Disable the shadow denoiser.
Sun Solid Angle 0.0 - 1.0 Controls the size of the sun light.
Debug Mode Disabled, Show RayTraced Tiles, Show Ray minT, Show Ray maxT, Show Ray length, Show RayTracing Texture Used to select the debug output view.
TileCutOff 0 - 32 Used to discard a tile where not enough rays need to be traced in the FidelityFX Classifier.
PCF Offset Checked/Unchecked Used to offset the blocker depth value in the FidelityFX Classifier.
Reject Lit Pixels for Ray Tracing Checked/Unchecked Used to discard pixels for ray tracing that are in lit areas in the FidelityFX Classifier.
Use Shadow Maps to determine RayT Checked/Unchecked Enable/Disable the use of shadow maps to determine ray properties.

Setting up FidelityFX Hybrid Shadows

The FidelityFX Hybrid Shadows sample uses FidelityFX Classifier to generate a list of tiles on the screen from which a ray tracing kernel can be launched. Then, the FidelityFX Denoiser can be enabled to remove noise from the raw, 1 sample per pixel ray tracing output.

Setting up classifier

Include the interface for the backend of the FidelityFX Classifier API.

#include <FidelityFX/host/ffx_classifier.h>

Create FidelityFX Classifier context

m_ClassifierCtxDesc.flags = FFX_CLASSIFIER_SHADOW;
m_ClassifierCtxDesc.flags |= FFX_CLASSIFIER_CLASSIFY_BY_CASCADES;
m_ClassifierCtxDesc.resolution.width = resInfo.RenderWidth;
m_ClassifierCtxDesc.resolution.height = resInfo.RenderHeight;
m_ClassifierCtxDesc.flags |= GetConfig()->InvertedDepth ? FFX_CLASSIFIER_ENABLE_DEPTH_INVERTED : 0;
m_ClassifierCtxDesc.backendInterface = backendInterface;
FFX_ASSERT(ffxClassifierContextCreate(&m_ClassifierContext, &m_ClassifierCtxDesc) == FFX_OK);

Set up the dispatch parameters and dispatch

FfxClassifierShadowDispatchDescription shadowClassifierDispatchParams = {};
shadowClassifierDispatchParams.commandList = ffxGetCommandList(pCmdList);
...
FFX_ASSERT(FFX_OK == ffxClassifierContextShadowDispatch(&m_ClassifierContext, &shadowClassifierDispatchParams));

Setting up the FidelityFX Denoiser

Include the interface for the backend of the FidelityFX Denoiser API.

C++:

#include <FidelityFX/host/ffx_denoiser.h>

Create FidelityFX Denoiser context

m_DenoiserCtxDesc.flags = FFX_DENOISER_SHADOWS;
m_DenoiserCtxDesc.windowSize.width = resInfo.RenderWidth;
m_DenoiserCtxDesc.windowSize.height = resInfo.RenderHeight;
m_DenoiserCtxDesc.flags |= GetConfig()->InvertedDepth ? FFX_CLASSIFIER_ENABLE_DEPTH_INVERTED : 0;
m_DenoiserCtxDesc.backendInterface = backendInterface;
FFX_ASSERT(ffxDenoiserContextCreate(&m_DenoiserContext, &m_DenoiserCtxDesc) == FFX_OK);

Set up the dispatch parameters and dispatch

FfxDenoiserShadowsDispatchDescription denoiserDispatchDescription = {};
denoiserDispatchDescription.commandList = ffxGetCommandList(pCmdList);
...
FFX_ASSERT(FFX_OK == ffxDenoiserContextDispatchShadows(&m_DenoiserContext, &denoiserDispatchDescription));

Sample controls and configurations

For sample controls, configuration, and FidelityFX Cauldron Framework UI element details, see Running the samples.

See also