FidelityFX 混合反射

此示例演示了 FidelityFX 分类器和 FidelityFX 降噪器技术的使用。
有关 FidelityFX 混合反射效果的基础技术的详细信息,您可以参考各自的 FidelityFX 分类器文档 和 FidelityFX 降噪器文档。
要求
- Windows
- DirectX(R)12
- Vulkan(R)
UI 元素
示例包含各种 UI 元素,以帮助您探索其演示的技术。下表总结了 UI 元素及其在示例中的控制功能。
| 元素名称 | 值 | 描述 |
|---|---|---|
| 显示调试目标 | 已选中/未选中 | 启用/禁用调试目标。 |
| 可视化工具 | 可视化命中计数器、显示反射目标、可视化主射线 | 选择要可视化的目标 |
| 全局粗糙度阈值 | 0.0 - 1.0 | 修改光线追踪的粗糙度截止值。 |
| RT 粗糙度阈值 | 0.0 - 1.0 | 修改光线追踪的粗糙度截止值。 |
| 不重新着色 | 已选中/未选中 | 使用屏幕空间着色图像的辐射度(可能存在伪影)。 |
| 启用混合反射 | 已选中/未选中 | 启用/禁用屏幕空间混合。 |
设置 FidelityFX 混合反射
FidelityFX 混合反射示例使用 FidelityFX 分类器 生成降噪图块列表和光线追踪图块列表,使用 FidelityFX 单通道降采样器 创建用于深度缓冲区遍历的深度层次结构,并使用 FidelityFX 降噪器 移除抖动反射光线追踪结果中的噪声。
设置 FidelityFX 分类器
包含 FidelityFX 分类器 API 后端的接口。
C++
#include <FidelityFX/host/ffx_classifier.h>创建 FidelityFX 分类器上下文
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);设置分派参数并执行分派
FfxClassifierReflectionDispatchDescription dispatchParameters = {}; dispatchParameters.commandList = ffxGetCommandList(pCmdList); ... FfxErrorCode errorCode = ffxClassifierContextReflectionDispatch(&m_ClassifierContext, &dispatchParameters);设置深度降采样器
包含 FidelityFX 单通道降采样器 (SPD) API 后端的接口。
C++
#include <FidelityFX/host/ffx_spd.h>创建 FidelityFX SPD 上下文
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);将深度缓冲区复制到深度层次结构中,设置分派参数并执行分派
FfxSpdDispatchDescription dispatchParameters = {}; dispatchParameters.commandList = ffxGetCommandList(pCmdList); ... FfxErrorCode errorCode = ffxSpdContextDispatch(&m_SpdContext, &dispatchParameters);设置 FidelityFX 降噪器
包含 FidelityFX 降噪器 API 后端的接口。
C++
#include <FidelityFX/host/ffx_denoiser.h>创建 FidelityFX 降噪器上下文
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);设置分派参数并执行分派
FfxDenoiserReflectionsDispatchDescription denoiserDispatchParameters = {}; denoiserDispatchParameters.commandList = ffxGetCommandList(pCmdList); ... FfxErrorCode errorCode = ffxDenoiserContextDispatchReflections(&m_VRSContext, &dispatchParameters);示例控件和配置
有关示例控件、配置和 FidelityFX Cauldron Framework UI 元素的详细信息,请参阅 运行示例。