vault backup: 2024-02-05 22:33:10
This commit is contained in:
parent
fef32e0939
commit
ce621781e3
@ -118,6 +118,14 @@
|
||||
"lastUpdated": 1707121888833
|
||||
}
|
||||
}
|
||||
},
|
||||
"FRDGResource": {
|
||||
"FRDGResource": {
|
||||
"currentFile": {
|
||||
"count": 1,
|
||||
"lastUpdated": 1707140527615
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
---
|
||||
title: 剖析虚幻渲染体系(09)- 材质体系
|
||||
date: 2024-02-05 22:00:48
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
# 前言
|
||||
https://www.cnblogs.com/timlly/p/15109132.html
|
@ -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<IPooledRenderTarget>* 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`列出所有有效的纹理,输入之后可能显示如下所示的信息:
|
@ -0,0 +1,9 @@
|
||||
---
|
||||
title: 剖析虚幻渲染体系(17)- 实时光线追踪
|
||||
date: 2024-02-05 22:02:57
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
# 前言
|
||||
https://www.cnblogs.com/timlly/p/16687324.html
|
Loading…
x
Reference in New Issue
Block a user