#vulkan #graphics #gamedev #game #denoiser

nightly sys nrd-sys

Rust 对 NVIDIA 实时去噪器的 FFI

2 个不稳定版本

0.2.0 2023年12月17日
0.1.0 2023年9月11日

#230 in 渲染

MIT/Apache

60KB
1K SLoC

nrd-sys

nrd-sys 是 NVIDIA 实时去噪器 SDK 的 Rust 绑定,面向 Vulkan 应用。

NVIDIA 实时去噪器 (NRD) 是一个与空间时间 API 无关的去噪库。该库旨在与低 rpp(每像素射线)信号一起工作。NRD 是一种快速解决方案,稍微依赖于输入信号和环境条件。

支持 Windows 和 Linux。预编译的二进制文件将自动下载并链接。

这些二进制文件是从一个定制的 NRD 分支 编译的,这是为了使 SDK 能够更好地与 Rust 一起工作。该分支包含以下更改

  • CI 编译二进制文件。
  • 更新了分配器接口,以便在 free 中传递分配大小和对齐方式(如 Rust 分配 API 所需)。

用法

fn main() {
    let lib_desc = nrd_sys::Instance::library_desc();

    let id1 = nrd_sys::Identifier(0);
    let mut instance = nrd_sys::Instance::new(&[nrd_sys::DenoiserDesc {
        identifier: id1,
        denoiser: nrd_sys::Denoiser::ReblurDiffuse,
        render_width: 100,
        render_height: 100,
    }])
    .unwrap();
    let desc = instance.desc();

    instance
        .set_common_settings(&nrd_sys::CommonSettings::default())
        .unwrap();
    instance
        .set_denoiser_settings(id1, &nrd_sys::ReferenceSettings::default())
        .unwrap();

    let dispatches = instance.get_compute_dispatches(&[id1]).unwrap();

    // Now, make API calls based on `dispatches`
}

注意

此软件包中包含的预编译二进制文件仅包含 SPIR-V 着色器。如果您需要 DirectX 集成所需的 DXIL / DXBC 着色器,请随意将其作为 Cargo 功能创建,并提交 PR。

无运行时依赖

~130KB