FidelityFX 混合阴影

此示例演示了 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, 显示光线长度, 显示光线追踪纹理 | 用于选择调试输出视图。 |
| TileCutOff | 0 - 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 元素的详细信息,请参阅 运行示例。