跳至内容

FidelityFX 混合阴影

alt text

此示例演示了 FidelityFX Classifier 和 FidelityFX Denoiser 技术的使用。

有关 FidelityFX Hybrid Reflections 效果底层技术的详细信息,请参阅各自的 FidelityFX Classifier 文档FidelityFX Denoiser 文档

有关 FidelityFX Hybrid Shadows 示例主要步骤的回顾幻灯片,请在此处查找:此处

要求

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

UI 元素

示例包含各种 UI 元素,以帮助您探索其演示的技术。下表总结了 UI 元素及其在示例中的控制功能。

控件

元素名称描述
运行 Hybrid Shadow已选中/未选中启用/禁用混合阴影。
使用 Denoiser已选中/未选中启用/禁用阴影去噪器。
太阳角0.0 - 1.0控制太阳光的大小。
调试模式禁用, 显示光线追踪瓦片, 显示光线 minT, 显示光线 maxT, 显示光线长度, 显示光线追踪纹理用于选择调试输出视图。
TileCutOff0 - 32用于丢弃在 FidelityFX Classifier 中不需要追踪足够光线的瓦片。
PCF 偏移已选中/未选中用于在 FidelityFX Classifier 中偏移阻挡深度值。
拒绝已照亮像素以进行光线追踪已选中/未选中用于在 FidelityFX Classifier 中丢弃位于已照亮区域的像素以进行光线追踪。
使用阴影图确定 RayT已选中/未选中启用/禁用使用阴影图来确定光线属性。

设置 FidelityFX Hybrid Shadows

FidelityFX Hybrid Shadows 示例使用 FidelityFX Classifier 在屏幕上生成一个瓦片列表,从中可以启动光线追踪内核。然后,可以启用 FidelityFX Denoiser 来消除原始的每像素 1 次采样光线追踪输出中的噪点。

设置分类器

包含 FidelityFX Classifier API 后端的接口。

#include <FidelityFX/host/ffx_classifier.h>

创建 FidelityFX Classifier 上下文

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);

设置调度参数并进行调度

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

设置 FidelityFX Denoiser

包含 FidelityFX Denoiser API 后端的接口。

C++

#include <FidelityFX/host/ffx_denoiser.h>

创建 FidelityFX Denoiser 上下文

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);

设置调度参数并进行调度

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

示例控件和配置

有关示例控件、配置和 FidelityFX Cauldron Framework UI 元素的详细信息,请参阅 运行示例

另请参阅

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