<山东大学项目实训>渲染引擎系统(五)

目录

项目介绍

NRD

项目目标

当前阶段工作

设置成员变量

对NRD SDK部分变量重写初值

将dict中的value赋给对应key值的设置


项目介绍

NRD

全名Nvidia Real-time Denoiser ,是英伟达正在研发的一个时空双域降噪库,旨在处理低的RPP(ray per pixel)信号。

该技术的图形 API 环境是:DirectX11、DirectX12 以及 Vulkun。其集成方法有三种,其中一种可以是利用 Nvidia 的 NRI(NVIDIA Rendering Interface)包装上述三个 API,进行集成。

项目目标

Falcor框架下集成nrd

当前阶段工作

编写构造函数NRDPass()

NRDPass::NRDPass(const Dictionary& dict)

传入参数Dictionary

设置成员变量

    Program::DefineList definesRelax;
    definesRelax.add("NRD_USE_OCT_NORMAL_ENCODING", "1");
    definesRelax.add("NRD_USE_MATERIAL_ID", "0");
    definesRelax.add("NRD_METHOD", "0"); 
    mpPackRadiancePassRelax = ComputePass::create(kShaderPackRadiance, "main", definesRelax);

    Program::DefineList definesReblur;
    definesReblur.add("NRD_USE_OCT_NORMAL_ENCODING", "1");
    definesReblur.add("NRD_USE_MATERIAL_ID", "0");
    definesReblur.add("NRD_METHOD", "1"); 
    mpPackRadiancePassReblur = ComputePass::create(kShaderPackRadiance, "main", definesReblur);

对NRD SDK部分变量重写初值

    mRelaxDiffuseSpecularSettings.diffusePrepassBlurRadius = 16.0f;
    mRelaxDiffuseSpecularSettings.specularPrepassBlurRadius = 16.0f;
    mRelaxDiffuseSpecularSettings.diffuseMaxFastAccumulatedFrameNum = 2;
    mRelaxDiffuseSpecularSettings.specularMaxFastAccumulatedFrameNum = 2;
    mRelaxDiffuseSpecularSettings.diffuseLobeAngleFraction = 0.8f;
    mRelaxDiffuseSpecularSettings.disocclusionFixMaxRadius = 32.0f;
    mRelaxDiffuseSpecularSettings.enableSpecularVirtualHistoryClamping = false;
    mRelaxDiffuseSpecularSettings.disocclusionFixNumFramesToFix = 4;
    mRelaxDiffuseSpecularSettings.spatialVarianceEstimationHistoryThreshold = 4;
    mRelaxDiffuseSpecularSettings.atrousIterationNum = 6;
    mRelaxDiffuseSpecularSettings.depthThreshold = 0.02f;
    mRelaxDiffuseSpecularSettings.roughnessFraction = 0.5f;
    mRelaxDiffuseSpecularSettings.specularLobeAngleFraction = 0.9f;
    mRelaxDiffuseSpecularSettings.specularLobeAngleSlack = 10.0f;

    mRelaxDiffuseSettings.prepassBlurRadius = 16.0f;
    mRelaxDiffuseSettings.diffuseMaxFastAccumulatedFrameNum = 2;
    mRelaxDiffuseSettings.diffuseLobeAngleFraction = 0.8f;
    mRelaxDiffuseSettings.disocclusionFixMaxRadius = 32.0f;
    mRelaxDiffuseSettings.disocclusionFixNumFramesToFix = 4;
    mRelaxDiffuseSettings.spatialVarianceEstimationHistoryThreshold = 4;
    mRelaxDiffuseSettings.atrousIterationNum = 6;
    mRelaxDiffuseSettings.depthThreshold = 0.02f;

将dict中的value赋给对应key值的设置

    for (const auto& [key, value] : dict)
    {
        if (key == kEnabled) mEnabled = value;
        else if (key == kMethod) mDenoisingMethod = value;

        // Common settings.
        else if (key == kWorldSpaceMotion) mWorldSpaceMotion = value;
        else if (key == kDisocclusionThreshold) mDisocclusionThreshold = value;

        // Pack radiance settings.
        else if (key == kMaxIntensity) mMaxIntensity = value;

        // ReLAX diffuse/specular settings.
        else if (mDenoisingMethod == DenoisingMethod::RelaxDiffuseSpecular || mDenoisingMethod == DenoisingMethod::ReblurDiffuseSpecular)
        {
           篇幅过长,不展示
        }
        else if (mDenoisingMethod == DenoisingMethod::RelaxDiffuse)
        {
           篇幅过长,不展示
        }
        else
        {
            logWarning("Unknown field '{}' in NRD dictionary.", key);
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值