FidelityFX 随机屏幕空间反射 1.5

AMD FidelityFX 随机屏幕空间反射 (SSSR) 是一种高度优化的分层屏幕空间遍历内核,用于实现反射。为了支持高光反射,光线方向会被随机抖动,结果会被降噪以提供时间上和空间上都稳定的图像。
目录
引言
FidelityFX 随机屏幕空间反射 (简称 SSSR) 是一种技术,旨在无需渲染额外的反射几何通道和着色通道即可产生高质量的屏幕空间反射。
核心上,该算法使用一种最先进的、分层的深度缓冲区遍历内核,该内核通过深度表面进行光线步进 - 最初是从主摄像机的视角渲染的 - 并将结果处理成可以作为反射合成的信号。SSSR 会考虑表面的粗糙度,该粗糙度包含反射。通过分析粗糙度,SSSR 可以从镜面反射的满速率调整遍历速率,一直到高光反射的四分之一速率。

支持的平台
此版本的 FidelityFX 随机屏幕空间反射支持以下平台
- Windows 10+
- DirectX® 12
- Vulkan® 1.x
着色语言和 API 要求
DirectX 12 + HLSL
HLSLCS_6_2CS_6_6†
† 在某些支持 64 位宽波前的硬件上使用 CS_6_6。
Vulkan + GLSL
-
Vulkan 1.x
-
GLSL 4.50,并支持以下扩展GL_EXT_samplerless_texture_functionsGL_KHR_shader_subgroup_basic(由FFX_WAVE控制)GL_KHR_shader_subgroup_ballot(由FFX_WAVE控制)GL_KHR_shader_subgroup_shuffle(由FFX_WAVE控制)
请注意,GLSL 编译器还必须支持 GL_GOOGLE_include_directive 以处理 GLSL 着色器系统中使用的 #include。
快速入门清单
要使用 SSSR,您应遵循以下步骤
-
生成 Visual Studio 解决方案
终端窗口 > <installation path>\BuildSamplesSolution.bat批处理文件将询问是否应将 SDK 构建为 DLL(如果未提供‘n’,则构建为静态链接库),以及应包含哪些示例。请使用‘1’来构建包含所有示例的解决方案,或使用‘15’仅包含 SSSR 示例。
这将生成一个
build\目录,您将在其中找到 SDK 示例的解决方案(FidelityFX SDK Samples.sln)。 -
转到
build目录,打开FidelityFX SDK Samples.sln解决方案,并根据您的 API 构建解决方案。 -
将 API 库
ffx_sssr_x64.lib和ffx_denoiser_x64.lib从bin/ffx_sdk复制到包含第三方库的文件夹的项目中。 -
复制与您想使用的 SDK 后端匹配的库,例如:DirectX 12 为
bin/ffx_sdk/ffx_backend_dx12_x64.lib。 -
将以下核心 API 头文件从
sdk/include/FidelityFX/复制到您的项目中:host/ffx_sssr.h、host/ffx_types.h、host/ffx_error.h、host/ffx_util.h、gpu/sssr/ffx_sssr_common.h和gpu/sssr/ffx_sssr_resources.h。复制文件时请注意保持目标位置的相对目录结构。 -
复制您选择的 API 后端对应的头文件,例如 DirectX 12,您将复制
host/backends/dx12/ffx_dx12.h。复制文件时请注意保持目标位置的相对目录结构。 -
在您希望与 SSSR 交互的代码库中包含
host/ffx_sssr.h头文件。 -
创建目标 API 的后端。例如,对于 DirectX 12,您应该调用
ffxGetInterfaceDX12。应该分配一个大小等于调用ffxGetScratchMemorySizeDX12返回的大小的工作区缓冲区,并将该缓冲区的指针传递给ffxGetInterfaceDX12。 -
通过调用
ffxSssrContextCreate创建一个 SSSR 上下文。参数结构应根据您的应用程序配置进行填充。有关更多详细信息,请参阅 API 参考文档。 -
每个帧,您都应该调用
ffxSssrContextDispatch来启动 SSSR 工作负载。参数结构应根据您的应用程序配置进行填充。有关更多详细信息,请参阅 API 参考文档。 -
当您的应用程序终止时(或者出于其他原因您希望销毁上下文),您应该调用
ffxSssrContextDestroy。在此函数调用之前,GPU 应该处于空闲状态。
集成指南
输入资源
下表列出了 SSSR 或 FidelityFX Denoiser 所需的所有外部输入。
所有资源都来自当前渲染的帧,对于 DirectX 12 和 Vulkan 应用程序,在调用 ffxSssrContextDispatch 之前,所有输入资源都应分别转换为 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE 和 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 颜色缓冲区 | 应用程序指定 | 纹理 | 当前帧的 HDR 渲染目标,包含仅用直接照明照亮的场景。SSSR 负责间接照明,包括环境贴图/探头采样回退。 |
| 深度缓冲区 | 应用程序指定 (1x FLOAT) | 纹理 | 应用程序提供的当前帧的深度缓冲区。数据应以单个浮点值提供,其精度由应用程序控制。深度配置应通过创建 FfxSssrContext 时 FfxSssrContextDescription 结构中的 flags 字段告知 SSSR。如果您的深度缓冲区是反转的(即 [1..0] 范围),您应该设置 FFX_SSSR_ENABLE_DEPTH_INVERTED 标志。 |
| 法线缓冲区 | 应用程序指定(3x FLOAT) | 纹理 | 应用程序提供的当前帧的法线缓冲区,范围为 [-1, 1]。如果您的应用程序以不同的范围存储法线向量,您可以使用 FfxSssrDispatchDescription 结构中的 normalUnPackMul 和 normalUnPackAdd 字段进行调整,以匹配 SSSR 的预期范围。SSSR 将使用以下公式转换 G 缓冲区法线:normal = gbufferNormal * normalUnPackMul + normalUnPackAdd;。 |
| 材质参数缓冲区 | 应用程序指定 (1x FLOAT) | 纹理 | 应用程序提供的当前帧的粗糙度缓冲区。默认情况下,SSSR 期望粗糙度是感知/艺术家设定的粗糙度的平方。如果您的 G 缓冲区直接存储艺术家设定的粗糙度,请将 FfxSssrDispatchDescription 结构中的 isRoughnessPerceptual 字段设置为 true。用户还需要通过 FfxSssrDispatchDescription 结构中的 roughnessChannel 字段提供一个用于从材质参数缓冲区采样的通道。 |
| 运动矢量 | 应用程序指定 (2x FLOAT) | 纹理 | 应用程序提供的当前帧的 2D 运动向量,范围为 [-0.5, 0.5],+Y 为自上而下。如果您的应用程序以不同的范围渲染运动向量,您可以使用 FfxSssrDispatchDescription 结构中的 motionVectorScale 字段进行调整,以匹配 SSSR 的预期范围。 |
| 环境贴图 | 应用程序指定(3x FLOAT) | TextureCube | 当要着色的表面比某个阈值更粗糙,或屏幕空间光线未命中颜色缓冲区时,用作回退的纹理立方体。 |
| BRDF LUT | 应用程序指定 (2x FLOAT) | 纹理 | 与用作回退的预过滤环境贴图一起使用的 BRDF 查找表。 |
| 反射目标 | 应用程序指定(3x FLOAT) | 纹理 | 将 SSSR 算法输出写入的表面;在渲染前必须清除。然后,应用程序可以在后续通道中将此反射缓冲区合成到任何其他表面之上。(请参阅示例中的 apply_reflections 着色器) |
深度缓冲区配置
应用程序应通过在创建 FfxSssrContext 时设置相应的标志来告知 SSSR API 其深度缓冲区配置。下表包含相应的标志。
| SSSR 标志 | 说明 |
|---|---|
FFX_SSSR_ENABLE_DEPTH_INVERTED | 一个位,指示提供的输入深度缓冲区数据是反转的,即范围为 [1..0]。 |
提供运动矢量
空间
SSSR 算法本身不需要使用运动向量,因为它不是一个时间算法。但是,为了获得时间上和空间上稳定的反射,FidelityFX Reflections Denoiser 被应用于 SSSR 算法的输出。时间算法的关键部分是提供运动向量。FidelityFX Reflections Denoiser 接受 2D 运动向量,这些向量编码了当前帧中像素到上一帧中相同像素位置的运动。算法期望应用程序以 [-0.5, 0.5] 的范围提供运动向量,+Y 为自上而下。
如果您的应用程序在不同的空间中计算运动向量 - 例如,归一化设备坐标空间 - 那么您可以使用 FfxSssrDispatchDescription 结构中的 motionVectorScale 字段来指示 SSSR 将其调整为匹配降噪器的预期范围。下面的代码示例说明了运动向量如何缩放到屏幕空间。下面的 HLSL 和 C++ 代码示例说明了如何使用 SSSR 主机 API 来缩放 NDC 空间运动向量。
// GPU: Example of application NDC motion vector computationfloat2 motionVector = (currentPosition.xy / currentPosition.w) - (previousPosition.xy / previousPosition.w);
// CPU: Matching SSSR motionVectorScale configurationdispatchParameters.motionVectorScale.x = 0.5f; // Texture space is [0, 1] while NDC is [-1, 1]dispatchParameters.motionVectorScale.y = -0.5f; // +Y is top down主机 API
虽然可以生成适当的中间资源、编译着色器代码、设置绑定并提交调度,但使用提供的 SSSR 主机 API 会更容易得多。
要使用 API,您应该链接 SSSR 库(稍后会详细介绍)并包含 sdk/include/FidelityFX/host 中的以下头文件。
ffx_assert.hffx_error.hffx_sssr_.hffx_types.hffx_util.h要使用 SSSR API,您应该链接 sdk/bin/ffx_sdk 文件夹中的 ffx_sssr_x64.lib 和 ffx_denoiser_x64.lib,它们将为面向应用程序的 API 提供符号。但是,SDK 的 API 具有模块化后端,这意味着可以通过使用匹配的后端来定位不同的图形 API 和平台。因此,您应该进一步包含与您的需求匹配的后端库,请参阅下表。
| 目标 | 库名 |
|---|---|
| DirectX(R)12 | ffx_backend_dx12_x64.lib |
| Vulkan(R) | ffx_backend_vk_x64.lib |
请注意,SDK API 的模块化架构允许实现自定义后端。有关更多详细信息,请参阅 FSR2 文档中的 模块化后端 部分。
要开始使用 API,应用程序应首先创建一个 FfxSssrContext 结构。该结构应放置在生命周期大致与您的后备缓冲区匹配的位置;通常放置在应用程序的堆上是一个不错的选择。通过调用 ffxSssrContextCreate,FfxSssrContext 结构将填充所需数据。此外,ffxSssrContextCreate 将从 FfxSssrContextDescription 结构中作为一部分提供给 FfxSssrContext 的后端进行多次调用。这些调用将执行创建 SSSR 所需的中间资源以及设置着色器及其关联的管道状态等任务。SSSR API 不执行任何动态内存分配。
应在每一帧调用 ffxSssrContextDispatch。此函数接受在应用程序生命周期早期创建的 FfxSssrContext 结构以及用于计算屏幕空间反射的输入和参数描述。此描述由应用程序通过填充 FfxSssrDispatchDescription 结构来提供。
通过调用 ffxSssrContextDestroy 来销毁上下文。请注意,在尝试调用 ffxSssrContextDestroy 之前,GPU 应该处于空闲状态,并且该函数不会执行隐式同步来确保 SSSR 正在访问的资源当前没有在飞行中。选择这样做的原因是避免 SSSR 为已经执行充分同步的应用程序在可能希望销毁 FfxSssrContext 的点上引入额外的 GPU 刷新,这允许应用程序在需要时执行尽可能高效的 SSSR API 的创建和拆卸。
技术
算法结构
SSSR 算法实现为一系列阶段,如下所示:
- 分层深度生成
- 瓦片分类
- 蓝色噪点纹理生成
- 间接参数生成
- 交集
- 降噪
分层深度生成
分层深度生成通道利用 FidelityFX 单通道降采样器 (SPD) 为应用程序提供的场景深度生成 mipmap 金字塔。SSSR 使用此分层深度缓冲区来加速光线步进,当算法检测到可以使用更粗糙的 mip 时。
资源输入
下表包含 分层深度生成 阶段消耗的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 深度缓冲区 | 应用程序指定 (1x FLOAT) | 纹理 | 应用程序提供的当前帧的深度缓冲区。数据应以单个浮点值提供,其精度由应用程序控制。深度配置应通过创建 FfxSssrContext 时 FfxSssrContextDescription 结构中的 flags 字段告知 SSSR。如果您的深度缓冲区是反转的(即 [1..0] 范围),您应该设置 FFX_SSSR_ENABLE_DEPTH_INVERTED 标志。 |
资源输出
下表包含 分层深度生成 阶段生成或修改的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 深度层级 | FFX_SURFACE_FORMAT_R32_FLOAT | 纹理 | 一个由场景输入深度生成的 7 个 mipmap 的金字塔。 |
瓦片分类
瓦片分类通道扫描场景以检测哪些像素需要发射光线并应用降噪。对于太粗糙且不需要光线步进的像素,它将使用提供的回退环境贴图来评估照明。最后,此通道还会从材质参数纹理中提取粗糙度,供后续通道使用。
资源输入
下表包含 瓦片分类 阶段消耗的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 法线缓冲区 | 应用程序指定(3x FLOAT) | 纹理 | 应用程序提供的当前帧的法线缓冲区,范围为 [-1, 1]。如果您的应用程序以不同的范围存储法线向量,您可以使用 FfxSssrDispatchDescription 结构中的 normalUnPackMul 和 normalUnPackAdd 字段进行调整,以匹配 SSSR 的预期范围。SSSR 将使用以下公式转换 G 缓冲区法线:normal = gbufferNormal * normalUnPackMul + normalUnPackAdd;。 |
| 材质参数缓冲区 | 应用程序指定 (1x FLOAT) | 纹理 | 应用程序提供的当前帧的粗糙度缓冲区。默认情况下,SSSR 期望粗糙度是感知/艺术家设定的粗糙度的平方。如果您的 G 缓冲区直接存储艺术家设定的粗糙度,请将 FfxSssrContextDescription 结构中的 isRoughnessPerceptual 字段设置为 true。用户还需要通过 FfxSssrContextDescription 结构中的 roughnessChannel 字段提供一个用于从材质参数缓冲区采样的通道。 |
| 环境贴图 | 应用程序指定(3x FLOAT) | TextureCube | 当要着色的表面比 FfxSssrDispatchDescription 结构中的 roughnessThreshold 字段更粗糙时,用作回退的纹理立方体。 |
| 深度层级 | FFX_SURFACE_FORMAT_R32_FLOAT | 纹理 | 一个由场景输入深度生成的 7 个 mipmap 的金字塔。 |
| 方差历史缓冲区 | FFX_SURFACE_FORMAT_R16_FLOAT | 纹理 | 上一帧生成的亮度缓冲区的方差。从该缓冲区采样的值将与 FfxSssrDispatchDescription 结构中的 varianceThreshold 字段的值进行比较,以确定是否需要为当前像素发射光线。 |
资源输出
下表包含 瓦片分类 阶段生成或修改的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 辐射缓冲区 | FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT | 纹理 | 一个包含来自回退环境探头的辐射的纹理,用于粗糙度大于 FfxSssrDispatchDescription 结构中的 roughnessThreshold 字段的像素。低于该阈值的像素将初始化为 0。 |
| 光线列表 | FFX_SURFACE_FORMAT_R32_UINT | 缓冲区 | 用于存储在交集通道中要发射的光线列表的缓冲区。 FfxSssrDispatchDescription 结构中的 samplesPerQuad 字段控制每四边形发射的最少光线数,从而控制光线列表中存储的光线数。如果 FfxSssrDispatchDescription 结构中的 temporalVarianceGuidedTracingEnabled 字段设置为 true,则每四边形发射的光线数将动态评估。如果上一帧亮度的方差超过 FfxSssrDispatchDescription 结构中的 varianceThreshold 字段,则光线将存储在该缓冲区中。 |
| 降噪器瓦片列表 | FFX_SURFACE_FORMAT_R32_UINT | 缓冲区 | 一个包含要传递给降噪器的瓦片列表的缓冲区。每个瓦片为 8x8 像素,由其左上角线程 ID 标识。(group_thread_id.x == 0) && (group_thread_id.y == 0) |
| 光线计数器 | FFX_SURFACE_FORMAT_R8_UNORM | 缓冲区 | 一个原子缓冲区,用于存储在 交集 通道中要发射的光线数量,以及要由降噪器降噪的瓦片数量。 |
| 提取的粗糙度 | FFX_SURFACE_FORMAT_R8_UNORM | 纹理 | 一个包含从材质参数缓冲区提取的粗糙度的纹理,请参阅输入。 |
描述
瓦片分类阶段实现在全屏计算通道中。对于每个像素,我们根据多个参数决定是否需要发射光线,并将该光线存储在缓冲区中。
如果表面的粗糙度大于 roughnessThreshold 参数,分类器将不为该像素存储光线。相反,它将简单地评估作为输入提供的回退环境贴图,并将该值存储在辐射缓冲区中。默认情况下,并非每个四边形像素都会发射光线。每像素发射的最少光线数由 samplesPerQuad 参数控制。如果此参数设置为低于 4,我们会在光线数据中编码哪些相邻像素应复制结果。将参数 temporalVarianceGuidedTracingEnabled 设置为 true,瓦片分类器就可以根据上一帧的亮度动态地将每四边形光线数增加到 4。如果方差历史缓冲区中存储的亮度的方差大于 varianceThreshold 参数,则为该像素存储光线。
此通道还确定哪些像素需要降噪,并将此信息存储在降噪器瓦片列表的 64 个瓦片中。每个像素都会使用降噪,除非表面完全光滑(镜面般)。这对于那些未发射光线而是被标记为从相邻像素复制结果的像素特别有用。
光线计数器缓冲区存储 交集 通道要发射的光线数量以及要传递给降噪器的瓦片数量。
蓝色噪点纹理生成
蓝色噪点纹理生成阶段根据帧索引和一些预计算的纹理,每帧生成一个 128x128 的蓝色噪点纹理。
资源输入
下表包含 蓝色噪点纹理生成 阶段消耗的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| Sobol 缓冲区 | FFX_SURFACE_FORMAT_R32_UINT | 纹理 | 一个 256x256 的预计算纹理,用于生成蓝色噪点纹理。 |
| 打乱瓦片缓冲区 | FFX_SURFACE_FORMAT_R32_UINT | 纹理 | 一个 512 x 256 的预计算纹理,用于生成蓝色噪点纹理。 |
资源输出
下表包含 蓝色噪点纹理生成 阶段生成或修改的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 蓝色噪点纹理 | FFX_SURFACE_FORMAT_R8G8_UNORM | 纹理 | 一个 128x128 的蓝色噪点纹理,用于后续通道中的光线生成。 |
间接参数生成
间接参数生成通道利用 瓦片分类 阶段填充的光线计数器缓冲区,为 交集通道 和降噪通道生成间接调度参数。
资源输入
下表包含 间接参数生成 阶段消耗的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 光线计数器 | FFX_SURFACE_FORMAT_R8_UNORM | 缓冲区 | 一个原子缓冲区,用于存储在 交集 通道中要发射的光线数量,以及要由降噪器降噪的瓦片数量。 |
资源输出
下表包含 间接参数生成 阶段生成或修改的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 间接参数 | FFX_SURFACE_FORMAT_R8_UNORM | 缓冲区 | 包含 交集 通道和降噪通道的间接调度参数的缓冲区。 |
交集通道
交集通道执行实际的深度缓冲区光线步进和辐射评估。这是算法预降噪的最后一个通道,它输出供应用程序合成到直接照明之上的反射缓冲区。
资源输入
下表包含 交集 阶段消耗的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 颜色缓冲区 | 应用程序指定 | 纹理 | 当前帧的 HDR 渲染目标,包含仅用直接照明照亮的场景。SSSR 负责间接照明,包括环境贴图/探头采样回退。 |
| 法线缓冲区 | 应用程序指定(3x FLOAT) | 纹理 | 应用程序提供的当前帧的法线缓冲区,范围为 [-1, 1]。如果您的应用程序以不同的范围存储法线向量,您可以使用 FfxSssrDispatchDescription 结构中的 normalUnPackMul 和 normalUnPackAdd 字段进行调整,以匹配 SSSR 的预期范围。SSSR 将使用以下公式转换 G 缓冲区法线:normal = gbufferNormal * normalUnPackMul + normalUnPackAdd;。 |
| 环境贴图 | 应用程序指定(3x FLOAT) | TextureCube | 当交集失败时用作回退的纹理立方体。 |
| 深度层级 | FFX_SURFACE_FORMAT_R32_FLOAT | 纹理 | 一个由场景输入深度生成的 7 个 mipmap 的金字塔。 |
| 提取的粗糙度 | FFX_SURFACE_FORMAT_R8_UNORM | 纹理 | 从材质参数缓冲区提取的粗糙度纹理。 |
| 蓝色噪点纹理 | FFX_SURFACE_FORMAT_R8G8_UNORM | 纹理 | 一个 128x128 的蓝色噪点纹理,用于随机化光线生成。 |
资源输出
下表包含 交集 阶段生成或修改的所有资源。
| 名称 | 格式 | 类型 | 说明 |
|---|---|---|---|
| 辐射缓冲区 | FFX_SURFACE_FORMAT_R16G16B16A16_FLOAT | 纹理 | 包含随机屏幕空间反射结果的纹理。 |
| 光线列表 | FFX_SURFACE_FORMAT_R32_UINT | 缓冲区 | 包含 瓦片分类 通道填充的光线列表的缓冲区。 |
| 光线计数器 | FFX_SURFACE_FORMAT_R8_UNORM | 缓冲区 | 包含要发射的光线数量的缓冲区。 |
描述
交集阶段实现为间接调度调用,每个光线生成一个线程。每个线程恢复要从中发射光线并应将查询结果复制到某些邻居的像素坐标。然后通过对 GGX 法线分布进行重要性采样来生成实际的光线,使用来自先前通道生成的蓝色噪点纹理的随机种子。
下一步是跨分层深度缓冲区进行光线步进。我们首先在当前 mip 级别采样深度缓冲区,并使用该值生成一个安全区域,在此区域内我们可以进行光线步进而不会与几何体发生交集。如果到达 xy 边界,我们可以继续使用更粗糙的 mip 级别。另一方面,如果穿过了 z 边界,我们应该移动到更详细的 mip。一旦达到最详细的 mip,算法就会停止。
最后,一旦找到命中,它将被评估并赋予置信度级别。此级别用于插值光线步进结果与环境贴图样本之间的值,从而在边缘实现平滑过渡。
降噪通道
请参阅 FidelityFX 反射降噪器 页面。
构建示例
先决条件
要构建 SSSR 示例,请按照以下说明操作
- 安装以下工具
- CMake 3.16
- 安装“使用 C++ 的桌面开发”工作负载
- Visual Studio 2019
- Windows 10 SDK 10.0.18362.0
- Git 2.32.0
- Vulkan SDK
-
生成 Visual Studio 解决方案
终端窗口 > <installation path>\BuildSamplesSolution.bat批处理文件将询问是否应将 SDK 构建为 DLL(如果未提供‘n’,则构建为静态链接库),以及应包含哪些示例。请使用‘1’来构建包含所有示例的解决方案,或提供要包含的示例列表(使用示例对应的编号,数字之间用空格隔开)。
这将生成一个
build\目录,您将在其中找到 SDK 示例的解决方案(FidelityFX SDK Samples.sln)。 -
打开
build目录中的解决方案,编译并运行。
版本历史
| 版本 | 日期 | 说明 |
|---|---|---|
| 1.0 | 2020-05-11 | FidelityFX SSSR 的初始发布。 |
| 1.1.0 | 2020-08-28 | Vulkan 支持 |
| 1.2.0 | 2020-11-24 | 将降噪器提取到自己的库中 |
| 1.2.1 | 2022-09-05 | 修复了 Vulkan 问题 |
| 1.3.0 | 2021-09-05 | 更新以支持混合跟踪。 |
| 1.4.0 | 2023-05-26 | SSSR 的 FidelityFX SDK 版本 |
进一步阅读
参考文献
- Frostbite 在随机屏幕空间反射上的演示 - https://www.ea.com/frostbite/news/stochastic-screen-space-reflections
- EA Seed 在混合实时渲染上的演示 - https://www.ea.com/seed/news/seed-dd18-presentation-slides-raytracing
- Eric Heitz 关于 VNDF 的论文 - http://jcgt.org/published/0007/04/01/
- Eric Heitz 关于蓝噪声采样(Blue Noise sampling)的论文 - https://eheitzresearch.wordpress.com/762-2/