当前位置: 首页 > article >正文

观察RenderDoc截帧UE时“Event”代表什么

概要

RenderDoc 的 Event Browser 窗口是观察渲染流程的最基础方式。其中包含着绘制出当前这一帧按时间顺序所经历的事件(Event)。
在这里插入图片描述

本篇想弄明白在截帧UE的时候,这些“Event”代表什么,或者说来源是什么。

Event代表什么

官方文档这样描述“Event”:

By default the events which are listed here are those known as actions. Draws and dispatches are examples of actions, but also events that modify resources like clears and copies. State setting and other CPU-update calls like Maps are not included and are available in the API Calls view (see below).
默认情况下,此处列出的事件又称为“操作”。draw 和 dispatch 都算是操作,但也有修改资源的事件,如 clear 和 copy。状态设置和其他 CPU 的调用(如 Maps)不包括在内,它们可在 API Inspector 视图中找到。

很显然,图形API,比如最常用DrawIndexedInstanced算是一个Event。
我这里UE用的是D3D12,他所有的图形API可以在这里全部看到:ID3D12GraphicsCommandList (d3d12.h) - Win32 apps | Microsoft Learn


但不光如此,截帧UE会看到很多事件的名字并非是图形API,并且有层级关系,这是在哪指定的呢?
通过搜索代码,我发现是通过 RDG_EVENT_SCOPE宏来指定的。
在这里插入图片描述
RDG_EVENT_SCOPE在一个作用域(即代码的一个花括号{}范围)发挥作用,这个作用域内的event都会显示为其子项。

Scene是最根层的Event

很显然,Scene这个Event包含了数量最多的子项。
在这里插入图片描述
通过搜索,找到了它定义在FDeferredShadingSceneRenderer::Render
在这里插入图片描述
为了测试,我将其外层调用暂时注释掉:
在这里插入图片描述
再开启引擎,就看到场景没有绘制了(不过周边UI还在,说明UI不在Scene里)
在这里插入图片描述
截帧也看不到Scene这个事件了
在这里插入图片描述

总结

RenderDoc截帧UE时“Event”来源于两方面:

  • 图形API的调用(D3D12完整图形API可查阅这里)
  • 而Event的自定义名字与层级结构,则是用RDG_EVENT_SCOPE宏实现的。

Scene 这个Event是最根层的,它定义在FDeferredShadingSceneRenderer::Render中,可以以此为起点学习UE的渲染流程。

附加

这里可以在编辑器内改为前向渲染,不过前向渲染时仍旧走的是FDeferredShadingSceneRenderer::Render,这个命名会有些误解。
在这里插入图片描述
看起来Renderer类只有两个,只是区分了桌面平台和移动平台。
在这里插入图片描述


http://www.kler.cn/a/593900.html

相关文章:

  • Linux系统——crontab定时任务
  • 网络工程师的要求
  • 深蕾半导体IP-KVM产品方案解析
  • 云盘搭建笔记
  • 论文笔记——BiLLP框架
  • 【CAD二次开发】调试无法进入断点提示无可用源问题(非空心断点)
  • 【机器学习】什么是逻辑回归
  • 单调队列【C/C++】
  • JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
  • wpa_supplicant驱动初始化源码分析
  • 当Anaconda的安装路径与我想创建的conda虚拟环境路径不一致时,应该怎么操作?
  • Docker Compose部署MantisBT
  • java学习笔记5
  • 智能AI流式输出的前端展现过程
  • 实现一个函数,将驼峰命名法的字符串转换为下划线命名法。
  • 剑指 Offer II 112. 最长递增路径
  • Java的表达式自动类型提升
  • Java操作RabbitMQ
  • 基于ArcGIS和ETOPO-2022 DEM数据分层绘制全球海陆分布
  • VLLM专题(三十一)—架构概述