目录
项目介绍
NRD
全名Nvidia Real-time Denoiser ,是英伟达正在研发的一个时空双域降噪库,旨在处理低的RPP(ray per pixel)信号。
该技术的图形 API 环境是:DirectX11、DirectX12 以及 Vulkun。其集成方法有三种,其中一种可以是利用 Nvidia 的 NRI(NVIDIA Rendering Interface)包装上述三个 API,进行集成。
项目目标
在Falcor框架下集成nrd。
当前阶段工作
编写函数reinit(),用于创建降噪器实例。
mpDenoiser = nullptr;
const nrd::LibraryDesc& libraryDesc = nrd::GetLibraryDesc();
const nrd::MethodDesc methods[] =
{
{ getNrdMethod(mDenoisingMethod), uint16_t(mScreenSize.x), uint16_t(mScreenSize.y) }
};
nrd::DenoiserCreationDesc denoiserCreationDesc;
其中LibraryDesc和DenoiserCreationDesc为nrd定义的结构体
struct LibraryDesc
{
SPIRVBindingOffsets spirvBindingOffsets;
const Method* supportedMethods;
uint32_t supportedMethodNum;
uint8_t versionMajor;
uint8_t versionMinor;
uint8_t versionBuild;
};
struct DenoiserCreationDesc
{
MemoryAllocatorInterface memoryAllocatorInterface;
const MethodDesc* requestedMethods;
uint32_t requestedMethodNum;
bool enableValidation : 1;
};
接下来为denoiserCreationDesc中的成员赋值,然后与mpDenoiser进行绑定。
denoiserCreationDesc.memoryAllocatorInterface.Allocate = nrdAllocate;
denoiserCreationDesc.memoryAllocatorInterface.Reallocate = nrdReallocate;
denoiserCreationDesc.memoryAllocatorInterface.Free = nrdFree;
denoiserCreationDesc.requestedMethodNum = 1;
denoiserCreationDesc.requestedMethods = methods;
nrd::Result res = nrd::CreateDenoiser(denoiserCreationDesc, mpDenoiser);
最后创建资源和渲染管线,此处两个函数在之后的文章中进行记录。
createResources();
createPipelines();