diff --git a/.obsidian/plugins/various-complements/data.json b/.obsidian/plugins/various-complements/data.json index fd2bcfb..5373190 100644 --- a/.obsidian/plugins/various-complements/data.json +++ b/.obsidian/plugins/various-complements/data.json @@ -118,6 +118,14 @@ "lastUpdated": 1707121888833 } } + }, + "FRDGResource": { + "FRDGResource": { + "currentFile": { + "count": 1, + "lastUpdated": 1707140527615 + } + } } } } \ No newline at end of file diff --git a/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(09)- 材质体系.md b/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(09)- 材质体系.md new file mode 100644 index 0000000..6fd8956 --- /dev/null +++ b/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(09)- 材质体系.md @@ -0,0 +1,9 @@ +--- +title: 剖析虚幻渲染体系(09)- 材质体系 +date: 2024-02-05 22:00:48 +excerpt: +tags: +rating: ⭐ +--- +# 前言 +https://www.cnblogs.com/timlly/p/15109132.html \ No newline at end of file diff --git a/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(11)- RDG.md b/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(11)- RDG.md index 387bdfc..e7f5aa4 100644 --- a/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(11)- RDG.md +++ b/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(11)- RDG.md @@ -290,3 +290,76 @@ FRDGBuilder是RDG体系的心脏和发动机,也是个大管家,负责收集 RDG编译期间的逻辑非常复杂,步骤繁多,先后经历构建生产者和消费者的依赖关系,确定Pass的裁剪等各类标记,调整资源的生命周期,裁剪Pass,处理Pass的资源转换和屏障,处理异步计算Pass的依赖和引用关系,查找并建立分叉和合并Pass节点,合并所有具体相同渲染目标的光栅化Pass等步骤。 # RDG开发 +### 注册外部资源 +如果我们已有非RDG创建的资源,可以在RDG使用么?答案是可以,通过FRDGBuilder::RegisterExternalXXX接口可以完成将外部资源注册到RDG系统中。下面以注册纹理为例: +```c++ +// 在RDG外创建RHI资源. +FRHIResourceCreateInfo CreateInfo; +FTexture2DRHIRef MyRHITexture = RHICreateTexture2D(1024, 768, PF_B8G8R8A8, 1, 1, TexCreate_CPUReadback, CreateInfo); + +// 将外部创建的RHI资源注册成RDG资源. +FRDGTextureRef MyExternalRDGTexture = GraphBuilder.RegisterExternalTexture(MyRHITexture); +``` +需要注意的是,外部注册的资源,RDG无法控制和管理其生命周期,需要保证RDG使用期间外部资源的生命周期处于正常状态,否则将引发异常甚至程序崩溃。 + +如果想从RDG资源获取RHI资源的实例,以下代码可达成: +```c++ +FRHITexture* MyRHITexture = MyRDGTexture.GetRHI(); +``` + +用图例展示RHI资源和RDG资源之间的转换关系: +- FRHIResource =>FRDGBuilder::RegisterExternalXXX =>FRDGResource +- FRDGResource => FRDGResource::GetRHI => FRHIResource + +### 提取资源 +RDG收集Pass之后并非立即执行,而是延迟执行(包括资源被延迟创建或分配),这就导致了一个问题:如果想将渲染后的资源赋值给某个变量,无法使用立即模式,需要适配延迟执行模式。这种适配延迟执行的资源提取是通过以下接口来实现的: +- FRDGBuilder::QueueTextureExtraction +- FRDGBuilder::QueueBufferExtraction + +```c++ +// 创建RDG纹理. +FRDGTextureRef MyRDGTexture; + +FRDGTextureDesc MyTextureDesc = FRDGTextureDesc::Create2D(OutputExtent, HistoryPixelFormat, FClearValueBinding::Black, TexCreate_ShaderResource | TexCreate_UAV); + +MyRDGTexture = GraphBuilder.CreateTexture(MyTextureDesc, "MyRDGTexture", ERDGTextureFlags::MultiFrame); + +// 创建UAV并作为Pass的shader参数. +(......) +PassParameters->MyRDGTextureUAV = GraphBuilder.CreateUAV(MyRDGTexture); +(......) + +// 增加Pass, 以便渲染图像到MyRDGTextureUAV. +FComputeShaderUtils::AddPass(GraphBuilder, RDG_EVENT_NAME("MyCustomPass", ...), ComputeShader, PassParameters, FComputeShaderUtils::GetGroupCount(8, 8)); + +// 入队提取资源. +TRefCountPtr* OutputRT; +GraphBuilder.QueueTextureExtraction(MyRDGTexture, &OutputRT); + +// 对提取的OutputRT进行后续操作. +(......) +``` + +# RDG调试 +RDG系统存在一些控制台命令,其名称和描述如下: +|控制台变量|描述| +|---|---| +|**r.RDG.AsyncCompute**|控制异步计算策略:0-禁用;1-为异步计算Pass启用标记(默认);2-开启所有使用compute命令列表的计算通道。| +|**r.RDG.Breakpoint**|当满足某些条件时,断点到调试器的断点位置。0-禁用,1~4-不同的特殊调试模式。| +|**r.RDG.ClobberResources**|在分配时间用指定的清理颜色清除所有渲染目标和纹理/缓冲UAV。用于调试。| +|**r.RDG.CullPasses**|RDG是否开启裁剪无用的Pass。0-禁用,1-开启(默认)。| +|**r.RDG.Debug**|允许输出在连接和执行过程中发现的效率低下的警告。| +|**r.RDG.Debug.FlushGPU**|开启每次Pass执行后刷新指令到GPU。当设置(r.RDG.AsyncCompute=0)时禁用异步计算。| +|**r.RDG.Debug.GraphFilter**|将某些调试事件过滤到特定的图中。| +|**r.RDG.Debug.PassFilter**|将某些调试事件过滤到特定的Pass。| +|**r.RDG.Debug.ResourceFilter**|将某些调试事件过滤到特定的资源。| +|**r.RDG.DumpGraph**|将多个可视化日志转储到磁盘。0-禁用,1-显示生产者、消费者Pass依赖,2-显示资源状态和转换,3-显示图形、异步计算的重叠。| +|**r.RDG.ExtendResourceLifetimes**|RDG将把资源生命周期扩展到图的全部长度。会增加内存的占用。| +|**r.RDG.ImmediateMode**|在创建Pass时执行Pass。当在Pass的Lambda中崩溃时,连接代码的调用堆栈非常有用。| +|**r.RDG.MergeRenderPasses**|图形将合并相同的、连续的渲染通道到一个单一的渲染通道。0-禁用,1-开启(默认)。| +|**r.RDG.OverlapUAVs**|RDG将在需要时重叠UAV的工作。如果禁用,UAV屏障总是插入。| +|**r.RDG.TransitionLog**|输出资源转换到控制台。| +|**r.RDG.VerboseCSVStats**|控制RDG的CSV分析统计的详细程度。0-为图形执行生成一个CSV配置文件,1-为图形执行的每个阶段生成一个CSV文件。| + +除了以上列出的RDG控制台,还有一些命令可以显示RDG系统运行过程中的有用信息。 +`vis`列出所有有效的纹理,输入之后可能显示如下所示的信息: \ No newline at end of file diff --git a/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(17)- 实时光线追踪.md b/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(17)- 实时光线追踪.md new file mode 100644 index 0000000..5c68578 --- /dev/null +++ b/03-UnrealEngine/Rendering/RenderingPipeline/向往渲染系列文章阅读笔记/剖析虚幻渲染体系(17)- 实时光线追踪.md @@ -0,0 +1,9 @@ +--- +title: 剖析虚幻渲染体系(17)- 实时光线追踪 +date: 2024-02-05 22:02:57 +excerpt: +tags: +rating: ⭐ +--- +# 前言 +https://www.cnblogs.com/timlly/p/16687324.html \ No newline at end of file