资讯详情

资讯详情

RenderDoc Python 脚本中的 Replay Output 系统:创建、配置与渲染可视化输出实战指南

开发工具调试器图形学GPU【免费下载链接】renderdocRenderDoc is a stand-alone graphics debugging tool.项目地址https://gitcode.com/gh_mirrors/re/renderdoc点击查看免费下载导读RenderDoc 的很多分析功能如纹理叠加层、3D 网格预览无法用纯文本或数据表格直观呈现必须借助可视化输出。本文以 docs/python_api/in_depth/outputs.rst 为核心系统讲解 RenderDoc 的replay output重放输出系统如何为输出创建原生窗口或离屏缓冲区、如何通过ReplayController.CreateOutput建立输出、如何配置纹理与网格显示、如何驱动渲染刷新以及缩略图、像素上下文、调试叠加层等进阶辅助能力。读完本文你将掌握在 Python 脚本中从零搭建一套可交互的可视化重放输出包括保存到图片文件的完整方案。什么是 Replay OutputReplay output 是 RenderDoc 在 Python 脚本中呈现分析结果的桥梁。它把重放捕获内容与可视化展示解耦重放工作由 ReplayController 负责而 output 负责把纹理、网格等资源渲染到指定目标上。从 API 结构看这一机制定义在 renderdoc/api/replay/renderdoc_replay.h 的IReplayOutput接口中其核心能力包括SetTextureDisplay/SetMeshDisplay设置输出内容Display触发渲染刷新ReadbackOutputTexture读取渲染结果到内存字节AddThumbnail/DrawThumbnail/ClearThumbnails管理缩略图子窗口SetPixelContext/SetPixelContextLocation固定高缩放像素预览GetDebugOverlayTexID/GetCustomShaderTexID获取内部纹理 ID。在 Python 侧output 通过renderdoc.ReplayOutput类暴露类型由 ReplayOutputType 枚举 决定class ReplayOutputType: Headless 0 # 无窗口输出配合 ReadbackOutputTexture 使用 Texture 1 # 纹理、缩略图与像素上下文显示 Mesh 2 # 网格数据预览创建输出窗口 / Widget 与 1:1 对应关系Replay output 与原生窗口或 widget 是1:1 关系每个输出绑定一个显示目标。文档特别警告D3D12 等 API 会对原生窗口取得独占访问权使用后该窗口无法再复用。因此建议每次用完输出后重建 widget。如果使用 Qt 界面qrenderdoc.MiniQtHelper.CreateOutputRenderingWidget会自动处理窗口的创建与重建无需手动管理这一限制对应文档见 miniqt.rst。获取 WindowingData要把窗口交给 RenderDoc必须先把窗口句柄封装成WindowingData。该结构在 renderdoc/api/replay/control_types.h 中定义内部是一个按窗口系统区分的联合体struct WindowingData { WindowingSystem system; union { struct { int32_t width, height; } headless; // 离屏伪窗口 struct { HWND window; } win32; // Win32 窗口 struct { Display *display; Drawable window; } xlib; // X11/Xlib struct { xcb_connection_t *connection; xcb_window_t window; } xcb; // XCB struct { wl_display *display; wl_surface *window; } wayland; // Wayland struct { ANativeWindow *window; } android; // Android 原生窗口 struct { void *view; void *layer; } macOS; // macOS 视图/图层 }; };注通过 SWIG 绑定导出到 Python 时WindowingData被当作完全不透明的结构见 control_types.h你只需要创建并传递它不需要也不应访问其内部字段。获取WindowingData有两条路径Qt 环境使用qrenderdoc.MiniQtHelper.GetWidgetWindowingData直接从 widget 获取原生窗口调用平台相关函数定义于 renderdoc_replay.hrenderdoc.CreateWin32WindowingData(HWND)—— Win32renderdoc.CreateXCBWindowingData(connection, window)—— XCBLinux/X11。离屏渲染CreateHeadlessWindowingData除真实窗口外还可以渲染到固定尺寸的离屏伪窗口。renderdoc.CreateHeadlessWindowingData(width, height)会创建一个带内部缓冲区的固定大小窗口之后用ReplayOutput.ReadbackOutputTexture()把渲染结果读取成原始字节。典型场景是把纹理视图保存为磁盘图片文件配合图片编码库写 PNG/JPG。在 GUI 应用中headless 输出同样可以用于后台批量生成缩略图而不需要任何可见窗口。用 ReplayController.CreateOutput 创建输出准备好WindowingData与ReplayController后调用output controller.CreateOutput(windowing_data, ReplayOutputType.Texture) # 或 ReplayOutputType.Mesh对应 C 接口为 IReplayController::CreateOutput。创建之后必须遵循两条纪律详见 lifetimes.rst 与 threading.rst生命周期output 由 controller 管理必须只在 controller 存续期间使用用完调用ReplayOutput.Shutdown()或者直接ReplayController.Shutdown()它会一并关闭其创建的所有输出见 renderdoc_replay.h线程output 只能在与ReplayController相同的线程上使用跨线程调用会破坏重放一致性。配置输出创建之后根据输出类型调用对应的配置方法# 纹理输出 display_cfg renderdoc.TextureDisplay() # ... 设置纹理、通道、范围等字段 ... output.SetTextureDisplay(display_cfg) # 网格输出 mesh_cfg renderdoc.MeshDisplay() # ... 设置网格位置、变换等字段 ... output.SetMeshDisplay(mesh_cfg)网格输出的相机设置MeshDisplay需要指定一个相机用renderdoc.InitCamera(CameraType)初始化。CameraType枚举定义于 replay_enums.hclass CameraType: Arcball 0 # 围绕原点旋转 缩放的球面控制 FPSLook 1 # 传统 FPS 式控制沿当前朝向各轴移动两种相机的参数模型不同相机类型描述参数模型flycamFPSLook可兼作 look-at 相机position位置 direction朝向arcballArcball围绕原点旋转缩放position位置 angle角度 distance距离InitCamera在 C API 侧对应RENDERDOC_InitCamerarenderdoc_replay.h返回ICamera实例可通过修改其 position / direction / angle / distance 字段实现相机操控。渲染输出配置完成后调用ReplayOutput.Display()触发重绘。何时需要调用修改配置之后SetTextureDisplay/SetMeshDisplay之后必须手动调用一次Display让新配置生效平台需要重绘时原生窗口因平台原因遮挡恢复、尺寸变化等需要重画时。如果使用MiniQtHelper.CreateOutputRenderingWidget创建的 widget更新会自动处理你只需在修改配置后手动调用Display()即可无需关心窗口自身重绘事件。子窗口系统对于纹理输出常见需求是在主视图旁边显示低开销的小缩略图。Replay output 内置了子窗口管理能力。AddThumbnail 与 ClearThumbnails# 把另一个窗口注册为缩略图显示目标 output.AddThumbnail(thumbnail_windowing_data, texture_id, ...) # 手动释放全部缩略图不影响主输出 output.ClearThumbnails()要点AddThumbnail传入目标窗口的WindowingData与要显示的纹理 ID该窗口从此归 output 所有直到输出 shutdownClearThumbnails可随时释放所有缩略图而无需关停主 replay output 本身。DrawThumbnail 快速预览如果不需要持续显示的窗口只想临时拿到缩略图数据raw_bytes output.DrawThumbnail(width, height, texture_id, ...)DrawThumbnail直接渲染并返回原始字节适合做快速预览、列表图标或批量导出省去创建和管理子窗口的开销。像素上下文Pixel Context像素上下文是另一个类似缩略图的辅助视图它在另一个窗口中渲染当前纹理在指定位置的高度放大视图常用于逐像素检查。output.SetPixelContext(windowing_data) # 注册像素上下文窗口归 output 所有 output.SetPixelContextLocation(x, y) # 更新放大中心位置像素上下文窗口同样由 output 拥有直到 shutdown它不需要单独驱动重绘在主输出调用Display()时自动同步渲染显示位置通过SetPixelContextLocation随时更新renderdoc_replay.h 注释说明它使用SetTextureDisplay的配置但强制高缩放值与固定位置。纹理输出专属辅助内部调试纹理对于纹理显示型输出可以查询两个内部资源 ID详见 resourceids.rst 关于 ID 体系的说明overlay_tex_id output.GetDebugOverlayTexID() # 当前纹理叠加层渲染结果 custom_shader_id output.GetCustomShaderTexID() # 自定义显示着色器的输出用途GetDebugOverlayTexID获取用于显示当前纹理 overlay如 Drawcall、Depth、Wireframe 等叠加层见 ReplayOutputType 相关文档 中DebugOverlay枚举的内部纹理 IDGetCustomShaderTexID获取自定义显示着色器custom display shader的输出纹理 ID。通过这两个 ID 可以拿到对应处理过程的直接输出内容用于后续分析或再处理。重要注意事项这些 ID 指向的是内部资源不要长期缓存下次配置变化或当前事件切换时对应纹理可能被销毁重建。正确用法是需要时即时查询、立即使用例如传给ReadbackOutputTexture读取内容或作为纹理输入。端到端示例离屏保存纹理视图把以上环节串起来一个典型的把当前纹理视图保存为图片的 Python 脚本骨架如下import renderdoc as rd # 1. 获取 ReplayController来源参见 replay_controller.rst # controller ... # 2. 创建固定尺寸离屏窗口 windowing_data rd.CreateHeadlessWindowingData(512, 512) # 3. 创建纹理输出 output controller.CreateOutput(windowing_data, rd.ReplayOutputType.Texture) # 4. 配置纹理显示 cfg rd.TextureDisplay() # ... 设置目标纹理 resourceId、通道、缩放、范围、叠加层等 ... output.SetTextureDisplay(cfg) # 5. 渲染并读取结果 output.Display() raw_pixels output.ReadbackOutputTexture() # 6. 把 raw_pixels 按 RGBA8 等格式编码写入磁盘图片文件 # 7. 清理 output.Shutdown()这个流程把窗口抽象成一块离屏缓冲区完全不需要可见 GUI非常适合批量导出、CI 快照或文档截图生成。小结与进一步阅读Replay output 系统的完整使用链路是准备显示目标原生窗口 / Qt widget / 离屏伪窗口→ 取得WindowingData→CreateOutput创建输出 → 用SetTextureDisplay/SetMeshDisplay配置 →Display()驱动渲染 → 可选地叠加缩略图、像素上下文或读取内部纹理。其接口定义集中在 renderdoc/api/replay/renderdoc_replay.h类型定义见 renderdoc/api/replay/replay_enums.h窗口数据结构见 renderdoc/api/replay/control_types.h。围绕本文主题可继续深入阅读frame_viewers.rst纹理与网格查看器的更上层封装replay_controller.rstReplayController的获取与完整生命周期lifetimes.rst输出与控制器等对象的生命周期规则threading.rst重放与输出的线程约束resourceids.rst资源 ID 的获取、传递与缓存注意事项miniqt.rstMiniQtHelper在 Qt 环境下的窗口管理辅助。赞分享开发工具调试器图形学GPU【免费下载链接】renderdocRenderDoc is a stand-alone graphics debugging tool.项目地址https://gitcode.com/gh_mirrors/re/renderdoc点击查看免费下载相关推荐TiXL 渲染导出指南Output Target 输出目标配置文件夹、文件名与自动版本管理TiXL 渲染导出指南Output Target 输出目标配置文件夹、文件名与自动版本管理 TiXLTooll 3的 Render To File 面音视频图形学桌面应用RenderDoc Python 远程回放Remote Replay实战指南连接、传输与回放全流程RenderDoc Python 远程回放Remote Replay实战指南连接、传输与回放全流程 RenderDoc 支持将捕获文件capture放开发工具调试器图形学GPUNeMo Guardrails项目实战输出护栏(Output Rails)配置指南NeMo Guardrails项目实战输出护栏 Output Rails 配置指南 概述 在构建对话系统时确保AI生成的内容符合安全规范至关重要。NVIDI人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →