跳至内容

FidelityFX 混合反射

alt text

此示例演示了 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 元素的详细信息,请参阅 运行示例

另请参阅

© . This site is unofficial and not affiliated with AMD.