TiXL(Tooll 3)输出窗口全分辨率截图指南:Save Screenshot 按钮、快捷键与底层实现

TiXL(Tooll 3)输出窗口全分辨率截图指南:Save Screenshot 按钮、快捷键与底层实现 TiXLTooll 3输出窗口全分辨率截图指南Save Screenshot 按钮、快捷键与底层实现【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3TiXL原 Tooll 3的 Output 窗口工具栏中内置了一个 Save Screenshot 截图按钮可以在不打断实时创作流程的前提下将当前渲染帧以 GPU 纹理的原始分辨率即使高达 4K保存为 PNG 图片且与编辑器窗口的显示尺寸无关。本文以 .help/references/video-analysis/IJLvPtz0qTg.md官方视频教程 Tooll 3 Tip#018 Saving Screenshots为骨架结合当前仓库源码完整讲解截图按钮的用法、快捷键、输出位置、文件命名规则以及从 GPU 回读到磁盘编码的底层实现原理帮助你彻底掌握 TiXL 中的单帧定格导出工作流。一、功能概述从视频教程到源码实现原教程发布于 2022-09-07时长 1:38演示了两个核心知识点Output 窗口的 Save Screenshot 按钮视频 0:07→0:37抓取当前输出的一帧静帧始终以全分辨率保存——即使编辑器预览窗口显示得很小导出图片依然保留渲染输出的原始尺寸教程中以 4K 为例输出文件的存放位置视频 1:05→1:27截图的落盘位置与编辑器设置、布局、备份文件等个人数据同处.t3文件夹截图保存在其screenshots子目录中。在 Tooll 3 时代.t3文件夹位于可执行文件旁集中存放设置、布局与备份。而在当前 TiXL 版本中源码已将截图目录调整为当前项目Package文件夹下的Screenshots子目录详见下文输出位置一节功能入口与全分辨率行为则保持一致。因此本教程中的操作思路依然完全适用仅落盘位置以当前仓库实现为准。二、在哪里找到 Save Screenshot 按钮截图按钮位于Output 窗口即显示选中运算符渲染结果的视图界面说明见 OutputWindow.md的工具栏右侧与渲染相关的三个按钮排布在一起图标功能触发行为相机SnapshotSave screenshot立即保存当前帧 PNG 到项目Screenshots目录播放/停止Render AnimationRender Animation打开/取消视频渲染导出齿轮SettingsToggle render settings开关 Render To File 渲染设置窗口该工具栏的绘制逻辑位于 OutputWindow.cs。源码中三个按钮的可用状态由RenderProcess.State与RenderProcess.MainOutputType共同决定var screenshotState !RenderProcess.IsExporting RenderProcess.MainOutputType ! null ? CustomComponents.ButtonStates.Emphasized : CustomComponents.ButtonStates.Disabled;也就是说当不存在有效输出类型、或正在执行导出任务时截图按钮会呈现禁用态只有画面正常输出且未在渲染时才可点击。鼠标悬停按钮时Tooltip 会显示 Save screenshot 以及当前绑定的键盘快捷键见 OutputWindow.cs。三、三种触发方式1. 鼠标点击工具栏按钮在 Output 窗口工具栏点击相机Snapshot图标即可这是最直接的触发方式。源码路径OutputWindow.csif (CustomComponents.IconButton(Icon.Snapshot, Vector2.Zero, screenshotState)) { RenderProcess.TryRenderScreenShot(); }2. 键盘快捷键Ctrl Alt R截图操作被注册为全局用户动作UserActions.RenderScreenshot默认快捷键为Ctrl Alt R定义于 FactoryKeyMap.csnew(UserActions.RenderScreenshot, new KeyCombination(Key.R, ctrl:true, alt: true)),动作枚举RenderScreenshot声明于 UserAction.cs。该快捷键在演示、现场演出等需要盲操作的场景非常实用无需移动鼠标即可定格当前画面。3. Ctrl 点击进入连续截图模式在 UserSettings.cs 中可以看到一个配套功能连续截图模式continuous screenshot mode。按住 Ctrl 点击 Output 窗口的截图图标即可开启TiXL 会按固定间隔持续抓取帧/// summarySeconds between captures while continuous screenshot mode is active (Ctrl-click the outputs screenshot icon)./summary public float ContinuousScreenshotDelay 5;ContinuousScreenshotDelay默认5 秒表示连续模式下每次截图之间的间隔。该功能适合自动定时抓取画面序列例如监控长时间运行的实时生成效果或为后续筛选关键帧提供素材。四、截图保存到哪里TryRenderScreenShot()的完整实现位于 RenderProcess.cspublic static void TryRenderScreenShot() { if (MainOutputTexture null) return; var project ProjectView.Focused?.OpenedProject; if (project null) return; var projectFolder project.Package.Folder; var folder Path.Combine(projectFolder, Screenshots); if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); var filename Path.Join(folder, ${DateTime.Now:yyyy_MM_dd-HH_mm_ss_fff}.png); ScreenshotWriter.StartSavingToFile(RenderProcess.MainOutputTexture, filename, ScreenshotWriter.FileFormats.Png); Log.Debug(Screenshot saved in: folder); }可以总结出当前 TiXL 版本的落盘规则目录当前聚焦项目ProjectView.Focused.OpenedProject的 Package 文件夹下的Screenshots子目录目录不存在时会自动创建文件名时间戳命名格式为yyyy_MM_dd-HH_mm_ss_fff.png例如2026_09_18-02_59_35_123.png毫秒级精度可避免同秒连拍被覆盖格式默认 PNG可通过设置切换为 JPG见下文第六节日志保存成功后控制台会输出一行Screenshot saved in: 目录便于在 Log 中确认落盘位置。版本差异提示原视频教程2022 年中截图存放在可执行文件旁的.t3/screenshots目录当前仓库实现已将其迁移到项目文件夹内的Screenshots目录。如果你跟随旧教程找不到图片请优先检查当前项目的Screenshots文件夹并在输出窗口的 Log 面板中查看实际保存路径。五、为什么全分辨率与预览窗口尺寸无关这是本功能最值得展开的技术点。它并不是抓取屏幕或抓取 ImGui 窗口的位图而是直接对 GPU 上的渲染目标纹理RenderProcess.MainOutputTexture执行一次像素回读因此导出分辨率等于纹理自身的原始尺寸例如 3840×2160完全不受编辑器面板缩放、窗口大小或 Fit 模式的影响。核心链路分为两层1. 纹理转换与异步回读TextureBgraReadAccessTextureBgraReadAccess.cs 负责把 GPU 纹理转换并拷贝到 CPU 可读的内存纹理。其类注释明确说明了用途Uses a compute shader to converts an image texture into a BGRA8 and provide CPU read access for writing to images and video files.工作流程TextureBgraReadAccess.cs用compute shader把源纹理转换为 8bit BGRA8 格式ConvertToCpuReadableBgra通过CopyResource把转换结果拷贝到 CPU 访问纹理context.Flush()确保拷贝完成再交给上层编码写盘。关键点回读是异步的、跨多帧完成的。源码注释明确说明TextureBgraReadAccess.csSaving a screenshot will take several frames because it takes a while until the frames are downloaded from the gpu. The method need to be called once a frame.因此截图保存不会阻塞渲染线程但真正写盘要等 GPU 数据下载完毕。Update()方法在每一帧被调用由 T3Ui.Update.cs 中的ScreenshotWriter.Update()触发内部维护一个请求队列_readRequests通过帧计数判断IsReady/IsObsolete顺序完成各个截图请求。2. 编码写盘ScreenshotWriterScreenshotWriter.cs 完成最后的像素打包与文件写入通过MapSubresource(..., MapMode.Read)读取 CPU 侧纹理数据使用 Windows Imaging ComponentWIC编码器写文件支持PNGPngBitmapEncoder与 JPGJpegBitmapEncoder两种格式由内部枚举FileFormats决定ScreenshotWriter.csPNG 路径按行拷贝像素注释特别指出当宽度不能被 16 整除时dataBox.RowPitch与输出rowStride可能不一致因此按行逐行处理JPG 路径则会逐像素跳过 Alpha 通道ScreenshotWriter.cs编码完成后的回调链通过onComplete?.Invoke(request.Filepath)对外通知LastFilename记录最近一次保存的文件路径。此外ScreenshotWriter.cs 中还有一道防御逻辑如果纹理在回读完成前已被释放例如用户中途关闭了窗口会输出ScreenshotWriter: Texture was disposed before readback was complete日志并放弃本次保存避免对已销毁的 GPU 资源进行 Map 操作。六、相关设置格式与间隔截图相关的可配置项集中在用户设置文件userSettings.json由 UserSettings.cs 持久化配置项默认值说明ScreenshotFileFormatPng截图图标保存的文件格式可选Png/Jpg。注释说明JPG 生成的文件小得多更适合连续截图序列UserSettings.csContinuousScreenshotDelay5连续截图模式下两次截图之间的间隔秒Ctrl 点击截图图标启用UserSettings.cs选择建议PNG默认无损、保留完整像素信息适合需要后期合成、抠图或作为素材复用的场景JPG体积小适合快速记录参考帧、归档预览图或连续截图产生大量文件时节省磁盘空间。七、与其他导出功能的边界截图功能与 Output 工具栏相邻的Render Animation视频导出是两条不同的流水线截图单帧、立即执行、全分辨率、异步回读、写入 PNG/JPG不影响播放视频渲染多帧序列、由 Render Settings 窗口配置时间范围/分辨率/格式存在明确的正在导出状态RenderProcess.IsExporting。这也是为什么 OutputWindow.cs 中截图按钮在IsExporting期间会被禁用——避免截图与视频导出同时抢占渲染输出资源。若你需要的是连续多帧的静帧序列而非视频文件请优先考虑第六节提到的连续截图模式。八、实操速查清单在 Output 窗口调整好构图与时间点确保输出有效按钮非灰点击工具栏Snapshot 相机图标或直接按Ctrl Alt R观察控制台日志Screenshot saved in: ...确认落盘路径到当前项目的Screenshots文件夹中取回yyyy_MM_dd-HH_mm_ss_fff.png图片如需定时连拍按住Ctrl点击截图图标启用连续截图模式间隔由ContinuousScreenshotDelay控制默认 5 秒如需 JPG 输出在用户设置中将ScreenshotFileFormat改为Jpg。无论你的合成运行在 1080p 还是 4K这一功能都能保证定格帧以渲染原分辨率落盘是 TiXL 中获取高质量静帧的最直接路径。相关界面说明可进一步参考 OutputWindow.md 与 Settings.md。【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考