AMD FidelityFX™ SDK 1.0 现已在 GPUOpen 上发布

首次发布时间:
最后更新时间:

我们很高兴地宣布,AMD FidelityFX 软件开发工具包 (SDK) 现已可供下载!

什么是 AMD FidelityFX SDK?

AMD FidelityFX SDK 是我们新的、易于集成的解决方案,旨在帮助开发者在不经历复杂移植过程的麻烦下,将 AMD FidelityFX 技术集成到他们的游戏中。简而言之,它就是 AMD FidelityFX 图形中间件。

背景

在过去几年中,随着我们不断发布 AMD FidelityFX 技术,我们已成为行业内使用最广泛、最受信赖的技术合作伙伴之一。我们出色的开源技术现已应用于超过 250 款游戏中,这些游戏由一些业界巨头开发。

随着我们的 AMD FidelityFX 技术不断发展并得到更广泛的应用,我们认识到在开发者集成技术方面还有许多可以改进的地方。AMD FidelityFX SDK 正是我们致力于为所有出色的 AMD FidelityFX 技术带来简洁性、结构和一致性的成果。

值得注意的是,SDK 具有

  • 一致的标准和风格,更易于使用。
  • 更简单的应用程序启动,让我们可以专注于核心算法细节,而不是样板设置代码。
  • 经过重新设计的图形框架,不仅更健壮、更完善,而且是 API 无关的,允许我们同时为目标平台开发效果。
  • 这同时也是一个很好的指南,可以帮助开发者为自己的跨平台引擎创建自定义后端实现。
  • 丰富的文档 .
  • 最后,我们通过提供所有效果的完整预构建解决方案,大大简化了实现步骤。其中大部分只需不到 20 行代码即可支持。
  • 即便如此,如果您过去喜欢自行下载代码并手动集成,现在仍然可以这样做。我们并未移除任何东西。我们所做的只是将它们放入一个更连贯的磁盘结构中,并清理了代码,使其风格更加一致。

引入三项新的 AMD FidelityFX 技术

首先,我们增加了三项新效果

AMD FidelityFX Blur 1.0

AMD FidelityFX Blur logo

AMD FidelityFX Blur 是一种基于计算的、高度优化的高斯模糊技术,用 HLSL 实现。

有关此全新效果的更多信息,请查看 GPUOpen 上的 AMD FidelityFX Blur

FidelityFX Blur off
FidelityFX Blur on
JPG (1600x936)
JPG (1600x936)

AMD FidelityFX Depth of Field 1.0

AMD FidelityFX Depth of Field logo

AMD FidelityFX Depth of Field (DoF) 是一种旨在重现相机镜头产生的散景景深效果的技术。

有关详情,请查看 GPUOpen 上的 AMD FidelityFX Depth of Field

FidelityFX Depth of Field off
FidelityFX Depth of Field on
JPG (1600x936)
JPG (1600x936)

AMD FidelityFX Lens 1.0

AMD FidelityFX Lens logo

AMD FidelityFX Lens 是一款轻量级的着色器,可实现镜头和胶片效果。目前,Lens 包含三种不同的效果

  • 色差
  • 晕影
  • 胶片颗粒

GPUOpen 上的 AMD FidelityFX Lens 页面包含有关此全新效果的更多信息。

FidelityFX Lens off
FidelityFX Lens on
JPG (1600x936)
JPG

我们现有的 AMD FidelityFX 技术

我们还更新了所有现有的 AMD FidelityFX 技术,并将其改编为 AMD FidelityFX SDK 的一部分

AMD FidelityFX CACAO (又名 AMD FidelityFX Ambient Occlusion) 1.3

AMD FidelityFX CACAO logo

AMD FidelityFX Combined Adaptive Compute Ambient Occlusion (CACAO) 是一种高度优化的环境光遮蔽实现,它使用智能和自适应采样技术,以高性能实现出色的环境光遮蔽质量。

v1.3 引入了查看纯 AO 和亮化 AO 结果的功能。

GPUOpen 上的 AMD FidelityFX CACAO 页面展示了 CACAO 的一些实际应用示例。

FidelityFX CACAO off
FidelityFX CACAO on
JPG (1600x936)
JPG (1600x936)

AMD FidelityFX CAS 1.1

AMD FidelityFX CAS logo

AMD FidelityFX Contrast Adaptive Sharpening (CAS) 是一种低开销的自适应锐化算法,具有可选的上采样功能,旨在提供自然的锐化效果,而不会产生伪影。

v1.1 引入了暴露上采样选项的选项。

请查看 AMD FidelityFX CAS 页面了解所有详情。

FidelityFX CAS off
FidelityFX CAS on
JPG (1600x936)
JPG (1600x936)

AMD FidelityFX Super Resolution (FSR)

AMD FidelityFX Super Resolution logo

AMD FidelityFX Super Resolution (FSR 1 和 2) 技术1是我们强大的上采样解决方案,可让您从低分辨率输入生成清晰、高分辨率的图像。

FSR 1.1 和 FSR 2.2.1 的示例已更新,并合并到一个示例中以用于 AMD FidelityFX SDK。

要开始使用我们的上采样器,最佳起点是 AMD FSR 1AMD FSR 2 页面。

FSR 1

AMD FidelityFX FSR 1

FSR 2.2.1

AMD FidelityFX FSR 2

AMD FidelityFX LPM (又名 AMD FidelityFX HDR Mapper) 1.3

FidelityFX LPM logo

AMD FidelityFX Luminance Preserving Mapper (LPM) 是一种用于 HDR 和宽色域内容的色调映射和色域映射解决方案。

v1.3 在 Vulkan® 中提供了更好的 HDR 处理,并修复了 Vulkan 和 DirectX® 的各种操作系统和交换链问题。

查看 AMD FidelityFX LPM 页面,了解 LPM 在真实游戏中的一些使用示例。

FidelityFX LPM

AMD FidelityFX Parallel Sort 1.2

AMD FidelityFX Parallel Sort logo

AMD FidelityFX Parallel Sort 提供了一个易于集成的开源头文件实现,该实现是一个高度优化的计算式基数排序。它可用于对粒子或其他数据集进行排序。

v1.2 已应用各种修复。

有关更多信息和算法细节概述,请访问 AMD FidelityFX Parallel Sort 页面。

Unsorted
Sorted
JPG (1600x1220)
JPG (1600x1220)

AMD FidelityFX SPD (又名 AMD FidelityFX Downsampler) 2.1

AMD FidelityFX SPD logo

AMD FidelityFX Single Pass Downsampler (SPD) 提供了一个针对 AMD RDNA™ 架构优化的解决方案,无需多个中间步骤即可生成纹理的 MIP 级别,最多可达 12 个。

v2.1 允许您选择滤波器核。以前只能使用平均值,现在您还可以使用最小值和最大值。

有关 SPD 的更多信息,请参阅 AMD FidelityFX SPD 页面。

AMD FidelityFX SPD

AMD FidelityFX SSSR (又名 AMD FidelityFX Screen Space Reflections) 1.4 和 AMD FidelityFX Denoiser 1.2

AMD FidelityFX SSSR logo

AMD FidelityFX Stochastic Screen Space Reflections (SSSR) 是一种高度优化的分层屏幕空间遍历内核,用于实现反射。这使您能够创建场景中的高保真反射,而不会带来过高的成本。

AMD FidelityFX Denoiser 提供了一组降噪计算着色器,用于去除反射和阴影渲染中的伪影。可用于光线追踪或栅格化内容。Denoiser 的示例包含在 SSSR 中。

v1.4 (SSSR) 和 v1.2 (Denoiser) 根据过去的集成已应用各种错误修复。

有关 AMD FidelityFX SSSR 如何工作以及效果的一些实际应用示例的概述,请查看 GPUOpen 上的 AMD FidelityFX SSSR 页面。

AMD FidelityFX SSSR off
AMD FidelityFX SSSR on
JPG (1600x936)
JPG (1600x936)

AMD FidelityFX Variable Shading 1.1

AMD FidelityFX Variable Shading logo

AMD FidelityFX Variable Shading (VS) 提供了一个开源头文件实现,用于轻松将可变速率着色集成到您的游戏中。

v1.1 也应用了各种修复。

有关此效果的详细信息,请参阅 AMD FidelityFX Variable Shading 页面。

Final render
Debug visualization
JPG (1600x936)
JPG (1600x936)

我们的混合光线追踪示例现已成为 AMD FidelityFX 的一部分

现在加入 FidelityFX SDK 的,我们提供混合光线追踪示例,非常适合演示如何将传统栅格化技术与光线追踪相结合,以获得快速、高质量的结果。

AMD FidelityFX Hybrid Reflections 1.1

AMD FidelityFX Hybrid Reflections logo

AMD FidelityFX Hybrid Reflections 示例展示了如何将 AMD FidelityFX Stochastic Screen Space Reflections (SSSR) 与光线追踪相结合,以创建高质量的反射。

v1.1 引入了 Vulkan 支持。

请访问 AMD FidelityFX Hybrid Reflections 页面了解更多信息。

AMD FidelityFX Hybrid Reflections

AMD FidelityFX Hybrid Shadows 1.1

AMD FidelityFX Hybrid Shadows logo

AMD FidelityFX Hybrid Shadows 示例展示了一种将传统栅格化阴影与光线追踪相结合的方法,以创建快速、高质量的软阴影。

v1.1 引入了 Vulkan 支持。

AMD FidelityFX Hybrid Shadows 示例的对比图像集合显示在 AMD FidelityFX Hybrid Shadows 页面上。

Final render
Debug rays
JPG (1600x936)
JPG (1600x936)

如何使用 AMD FidelityFX SDK

上手 SDK 非常简单

  1. 将 SDK 库下载或构建到您的系统上。

  2. 将 SDK 库构建或链接到您的游戏/应用程序解决方案中。

  3. 在应用程序启动时,根据所需的特性上下文数量查询后端所需的内存量(以下显示了如何查询 SPD 和 Blur 的 dx12 后端内存需求)

#include <FidelityFX/ffx.h>
#include <FidelityFX/host/backends/dx12/ffx_dx12.h>
// Query required memory for FidelityFX backend.
const size_t scratchBufferSize = ffxGetScratchMemorySizeDX12(FFX_SPD_CONTEXT_COUNT + FFX_BLUR_CONTEXT_COUNT)
  1. 使用您自己的内存分配器分配所需内存,并使用该内存初始化 SDK 后端。
// Allocate required backing memory
void* scratchBuffer = malloc(scratchBufferSize);
FFX_ASSERT(scratchBuffer);
// Initialize the FFX SDK backend
FfxInterface* backendInterface = NULL;
FfxErrorCode errorCode = ffxGetInterfaceDX12(&backendInterface, dx12Device, scratchBuffer, scratchBufferSize, FFX_SPD_CONTEXT_COUNT + FFX_BLUR_CONTEXT_COUNT);
  1. 创建 FidelityFX 特性上下文
// FidelityFX SPD information
FfxSpdContextDescription spdInitParams = {};
FfxSpdContext spdContext = {};
// Setup and create SPD context
spdInitParams.flags = FFX_SPD_SAMPLER_LINEAR | FFX_SPD_WAVE_INTEROP_WAVE_OPS | FFX_SPD_MATH_PACKED;
spdInitParams.downsampleFilter = FFX_SPD_DOWNSAMPLE_FILTER_MEAN;
spdInitParams.backendInterface = backendInterface;
errorCode = ffxSpdContextCreate(&spdContext, &spdInitParams);
FFX_ASSERT(errorCode == FFX_OK);
// FidelityFX BLUR information
FfxBlurContextDescription blurInitParams = {};
FfxBlurContext blurContext = {};
// Setup and create BLUR context
blurInitParams.backendInterface = backendInterface;
blurInitParams.kernelSizes = FFX_BLUR_KERNEL_SIZE_ALL; // allow all kernel sizes
blurInitParams.floatPrecision = FFX_BLUR_FLOAT_PRECISION_16BIT;
errorCode = ffxBlurContextCreate(&blurContext, &blurInitParams);
FFX_ASSERT(errorCode == FFX_OK);
  1. 在运行时使用 FidelityFX 特性上下文
// Execute FidelityFX SPD
FfxSpdDispatchDescription spdDispatchParams = {};
spdDispatchParams.commandList = pCmdList;
spdDispatchParams.resource = ffxGetResourceDX12(downsampleResource, L"SPD_Downsample_Resource", FFX_RESOURCE_STATE_PIXEL_COMPUTE_READ, FFX_RESOURCE_USAGE_ARRAYVIEW);
FfxErrorCode errorCode = ffxSpdContextDispatch(&spdContext, &spdDispatchParams);
FFX_ASSERT(errorCode == FFX_OK);
// Execute FidelityFX BLUR
FfxBlurDispatchDescription blurDispatchParams = {};
blurDispatchParams.commandList = pCmdList;
blurDispatchParams.kernelSize = FFX_BLUR_KERNEL_SIZE_13x13;
blurDispatchParams.inputAndOutputSize.width = AppGetWidth();
blurDispatchParams.inputAndOutputSize.height = AppGetHeight();
blurDispatchParams.input = ffxGetResourceDX12(inputResource, L"MyBlurInput", FFX_RESOURCE_STATE_PIXEL_COMPUTE_READ);
blurDispatchParams.output = ffxGetResourceDX12(outputResource, L"MyBlurOutput", FFX_RESOURCE_STATE_UNORDERED_ACCESS);
errorCode = ffxBlurContextDispatch(&blurContext, &blurDispatchParams);
FFX_ASSERT(errorCode == FFX_OK);
  1. 完成后释放内存
// Flush the GPU before releasing contexts/backends!
GPUFlush();
// Destroy FidelityFX SPD
ffxSpdContextDestroy(&spdContext);
// Destroy FidelityFX BLUR
ffxBlurContextDestroy(&blurContext);
// Destroy FidelityFX SDK backend
free(backendInterface.scratchBuffer);

快来试试吧!

完整的源代码和二进制文件现已在 GitHub 上以 MIT 许可证提供。

不要忘记查看我们丰富的 AMD FidelityFX SDK 文档

当然,请务必访问我们 GPUOpen 上的全新 AMD FidelityFX SDK 主页

为 SDK 做出贡献!

您是否有功能请求或发现了 SDK 的问题?请联系您的 AMD 代表,或通过 Twitter 上的 @GPUOpenmastodon.gamedev.place 上的 @GPUOpen 与我们联系。

所有请求和反馈对我们都非常有价值,我们将阅读并尽力回复每一个人。

以下是我们所有 AMD FidelityFX 技术的列表

免责声明和脚注

1AMD FidelityFX Super Resolution (FSR) 版本 1 和 2 可在特定游戏中获得,需要游戏开发者集成,并支持特定的 AMD 产品。AMD 不为在其他供应商显卡上启用 AMD FidelityFX Super Resolution 提供技术或保修支持。请参阅 https://www.amd.com/en/technologies/fidelityfx-super-resolution 获取更多信息。GD-187

归属

其他开发者和游戏归属: https://www.amd.com/en/corporate/game-attributions © 2023 Advanced Micro Devices, Inc. 保留所有权利。AMD、AMD 箭头标志、FidelityFX、Radeon、RDNA 以及它们的组合是 Advanced Micro Devices, Inc. 的商标。DirectX 是 Microsoft Corporation 在美国和/或其他国家/地区的注册商标或商标。Vulkan 和 Vulkan 标志是 Khronos Group Inc. 的注册商标。本出版物中使用的其他产品名称仅用于标识目的,可能是其各自所有者的商标。

相关新闻和技术文章

相关视频

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