目录
前言
本项目是为开发一套较为完整且表现不错的真实场景渲染系统引擎,预计能够良好地实现光照效果以及渲染后噪声的处理。
各工作情况
1、辐射预计算
该部分需要在 Falcor 框架下实现渲染当中的辐射预计算技术,从而实现环境全局光照实时计算,具体进度请前往这位作者查看。
2、渲染框架
该部分需要实现对 Falcor 基础框架的修改以及基础功能增添,来配合其它工作的实现完成,具体进度请前往这位作者查看。
3、后降噪处理
3.1 阶段任务
在拟写好 NRDPass 的基础框架后,可以开始编写其具体的函数(同时可能会添加新的私有或公有变量)。该部分由两位组员负责,另一位组员具体工作进度请前往这位作者查看。笔者工作如下:
3.2 个人工作
先复习一下之前拟写的公有函数大纲,其中已经结束前四个函数:
static SharedPtr create();
virtual Dictionary getScriptingDictionary() override;
virtual RenderPassReflection reflect() override;
virtual void compile() override;
virtual void execute() override;
virtual void renderUI() override;
virtual void setScene() override;
3.2.1 execute() 函数
该函数显然用于执行这个通道的功能,可以根据父类 RenderPasses 证明猜想:
/** Executes the pass.*/
首先,若场景为空,就没必要执行了,所以:
if (!mpScene) return;
同理,没有开启 NRD 也没必要执行,所以应该先重设 enabled(用于判断 NRD 是否激活),然后预编译以及条件判断是否执行 NRD:
bool enabled = false;
#if FALCOR_ENABLE_NRD
enabled = mEnabled;
#endif
if (enabled)
{
executeInternal(pRenderContext, renderData);
}
其中,参考到其它通道的写法,所以执行的函数单独写为私有函数 executeInternal(),可以前往这位作者查看。
而如果没有执行,由于这里仅仅是关闭 NRD 功能,而不是关闭 NRD 通道,代表着渲染流程中依然会经过这个通道,所以依然需要进行输入输出的传递,且要是将输入原封不动传给输出,这样就能在不用 NRD 的情况下不断了流程。需要用到的是渲染环境类 RenderContext 的传递函数 blit(),例如:
pRenderContext->blit(renderData[kInputDiffuseRadianceHitDist]->asTexture()->getSRV(), renderData[kOutputFilteredDiffuseRadianceHitDist]->asTexture()->getRTV());
这是将输入的 SRV(着色器资源) 转移到要输出的 RTV(渲染目标)。此外,还要清除未用 NRD 则无需使用的输出,例如:
pRenderContext->clearRtv(renderData[kOutputReflectionMotionVectors]->asTexture()->getRTV().get(), float4(0.f));
这样同理编写不同降噪器方法的不同输入输出,就达成目的了。
3.2.2 renderUI() 函数
该函数显然要进行该通道的 UI 设计,主要利用的是 GUI 库。而对于 NRD 来说,需要根据不同降噪器方法分别设计可用的 UI 界面。
3.2.3 setScene() 函数
根据 RenderPasses 父类的描述:
/** Set a scene into the render-pass */
这个函数需要从外部传入降噪前的场景,也就是赋值 NRDPass 的场景含义私有变量 mpScene:
void NRDPass::setScene(RenderContext* pRenderContext, const Scene::SharedPtr& pScene)
{
mpScene = pScene;
}
至上,NRDPass 对于 Falcor 的 RenderPasses 的对接就基本完成。
本文档详细介绍了在一个真实场景渲染系统引擎的开发中,如何实现辐射预计算、渲染框架以及后降噪处理。NRD通道的重点在于execute()函数的执行逻辑,renderUI()的用户界面设计,以及setScene()的场景设置。通过这些功能,实现了全局光照计算和降噪处理,确保在Falcor框架下流畅运行。
(组工作合集 & 个人工作)&spm=1001.2101.3001.5002&articleId=125193504&d=1&t=3&u=248f0a8e860f4e65ab7ab3ce95f56399)
401

被折叠的 条评论
为什么被折叠?



