Rerun 0.36 新特性实战指南:3D 高斯泼溅可视化、多 Sink 数据流与 MCAP/RRD 自省工具链
Rerun 0.36 新特性实战指南3D 高斯泼溅可视化、多 Sink 数据流与 MCAP/RRD 自省工具链【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun本指南基于 Rerun 开源仓库docs/content/changelog/changeset-0-36.md0.36 版本变更说明系统梳理该版本引入的实验性 3D 高斯泼溅Gaussian Splats支持、面向超大文件的 Web 端 Viewer Catalog 流式加载、可配置 3D 坐标轴、时间轴播放头导航菜单、GrpcServerSink多 Sink 组合、MCAP 文件自省与rrd::optimize程序化优化等能力并结合仓库源码crates/viewer/re_view_spatial/src/visualizers/gaussian_splats3d.rs、crates/top/rerun/src/rrd.rs、rerun_py/rerun_sdk/rerun/sinks.py等给出可复制的实操代码与配置参数说明。读完本文你将掌握如何从 SDK 或直接打开 PLY 文件在 Viewer 中查看 3D 高斯泼溅如何让 Web Viewer 打开超过内存上限的.rrd文件如何用rr.set_sinks同时向多个接收端gRPC 服务器、文件写入数据以及如何用 CLI 与 Python 自省 MCAP 文件、用 Rust API 程序化优化录制文件。版本概况Rerun 0.36 的核心变化可概括为六点详见 变更说明实验性 3D 高斯泼溅支持Viewer 可直接可视化高斯泼溅可从 SDK 记录该类型也可直接打开 PLY 文件实验性 Viewer Catalog 支持超大文件Web Viewer 可在浏览器中惰性流式加载大于 RAM、甚至大于 Wasm 4 GiB 地址空间的.rrd文件3D 视图可配置坐标轴通过 UI 或蓝图代码直接配置场景的 up/left/down 方向时间轴导航增强新增播放头playhead导航菜单并展示可用键盘快捷键GrpcServerSink支持多 Sink 组合Rust、Python、C SDK 中可同时向多个接收端写数据MCAP 自省与 RRD 优化能力增强rerun mcap info重写为富信息输出新增rerun mcap check子命令Rust 侧新增rrd::optimizeAPI。下文按主题逐一展开每个主题都会补充对应的源码实现证据与实操细节。实验性 3D 高斯泼溅Gaussian Splats支持能力总览0.36 引入了实验性的GaussianSplats3D原型archetype。每个高斯体是一个各向异性 3D 高斯分布一个单位各向同性高斯按各轴缩放scale、旋转quaternion并平移translation。与 3DGS 训练检查点如 PLY 文件不同Rerun 以“自然形式”存储所有数值线性尺度、以 RGBA 表示的基色与不透明度。该类型当前标注为unstable后续可能发生不向后兼容的显著变化且渲染器保持“非常简单”以实现全浏览器兼容。加载 PLY 文件两种方式直接通过 Viewer 打开任何 3D 高斯泼溅 PLY 文件都可以直接加载到 Viewer 中通过 SDK 记录用rr.log_file_from_path让导入器importer解析文件。仓库中crates/store/re_importer内的ArchetypeImporter负责 PLY 的检测与二进制载荷解析端到端测试见crates/store/re_importer/tests/test_ply_importer.rs它用真实的 3DGS 重建文件gaussian_splats/cactus.ply覆盖“gaussian-splat 检测 → 二进制载荷解析 → 转换为 chunk”的完整链路并断言导出的 splat 数量与GaussianSplats3D::descriptor_centers()一致。Python 示例记录 PLY 文件import sys import rerun as rr if len(sys.argv) 2: print(fUsage: {sys.argv[0]} path_to_splats.ply) sys.exit(1) rr.init(rerun_example_gaussian_splats3d_ply, spawnTrue) rr.log_file_from_path(sys.argv[1])从 SDK 直接记录高斯泼溅Python 端构造器签名见 gaussian_splats3d.pyGaussianSplats3D( centers, # 高斯中心均值 scalesNone, # 各轴标准差场景单位 quaternionsNone, # 高斯朝向 colorsNone, # 基色与不透明度RGBA sh_coefficientsNone, # 高阶球谐系数视点相关颜色 spherical_harmonics_degreeNone, # 渲染时评估的最高球谐阶数 0-3 )各字段语义与取值范围字段类型说明centersVec3DArrayLike必填高斯体的中心均值位置scalesVec3DArrayLike各向异性缩放即沿主轴的标准差场景单位quaternionsQuaternionArrayLike每个高斯的朝向colorsRgba32ArrayLikeRGB 部分为视点无关基色即球谐 DC/0 阶项alpha 部分为高斯峰值不透明度高斯衰减会在空间上进一步调制它sh_coefficientsSphericalHarmonics3RgbArrayLike1–3 阶球谐系数每个 splat 15 个 RGB 系数用于视点相关颜色spherical_harmonics_degreeUInt32Like渲染时最高评估阶数 0–3阶数越低渲染越快0完全禁用视点相关颜色未设置时默认3使用数据中全部系数一个完整示例来自该原型的 docstringimport rerun as rr rr.init(rerun_example_gaussian_splats3d, spawnTrue) rr.log( gaussians, rr.GaussianSplats3D( centers[[0, 0, 0], [2, 0, 0], [4, 0, 0]], scales[[1.0, 0.5, 0.25], [0.5, 1.0, 0.5], [0.25, 0.5, 1.0]], quaternions[ rr.Quaternion.identity(), rr.Quaternion(xyzw[0.0, 0.0, 0.382683, 0.923880]), # 绕 Z 轴 45 度 rr.Quaternion.identity(), ], colors[(255, 0, 0, 128), (0, 255, 0, 200), (0, 0, 255, 255)], # 每个 splat 15 个视点相关 RGB 系数1-3 阶 sh_coefficients[ [[0.5, 0.0, 0.0]] * 15, [[0.0, 0.5, 0.0]] * 15, [[0.0, 0.0, 0.5]] * 15, ], ), )Rust 端用法等价定义见 gaussian_splats3d.rs通过GaussianSplats3D::new([...])后接.with_scales(...)、.with_quaternions(...)、.with_colors(...)、.with_sh_coefficients(...)链式构造PLY 文件则用rec.log_file_from_path(path, None, false)无实体路径前缀、按时间序列而非静态记录。底层渲染实现从源码结构看GaussianSplats3D的渲染由 crates/viewer/re_view_spatial/src/visualizers/gaussian_splats3d.rs 中的 visualizer 承担它读取spherical_harmonics_degree组件GaussianSplats3D::descriptor_spherical_harmonics_degree().component将全部球谐系数按该阶数截断后送入 GPU// (degree-independent) cache is truncated on the way to the GPU从而在渲染阶段控制视点相关颜色的计算量与最终观感。仓库中还提供了对应渲染测试 crates/viewer/re_view_spatial/tests/gaussian_splats3d.rs并可通过cargo test -p re_view_spatial验证该可视化器行为。实验性 Viewer Catalog在 Web 上打开超过内存大小的文件0.36 的 Viewer Catalog自 0.35 引入见 changeset-0-35.md现在支持在 Web Viewer 中惰性加载.rrd文件通过文件对话框或拖放打开的文件会流式写入浏览器的 Origin Private File SystemOPFS不经过 Wasm 线性内存之后按需读取 recording 的 chunk因此 Web Viewer 可以打开大于可用 RAM、甚至大于 Wasm 4 GiB 地址空间的录制文件重新打开同一文件时若启用了持久化persistence会复用其基于内容寻址的浏览器存储副本内嵌的默认蓝本blueprint在.rrd注册时会被保留录制以其预期布局打开Viewer Catalog 在包含数据之前会保持在 recording panel 中隐藏。启用步骤UI 操作打开Settings在Viewer catalog下启用Load files via Viewer catalog再打开.rrd文件对于 Web 上的大文件同时在Origin private filesystem下勾选Request persistence——这会请求浏览器保护 Viewer catalog 文件免于自动存储驱逐并可能提高部分浏览器的存储配额注意浏览器仍可能拒绝该请求。3D 视图可配置坐标轴0.36 之前设置 3D 场景的 up/left/down 方向需要在场景根节点记录ViewCoordinates原型。现在可以直接在UI 或通过蓝图代码修改axes属性完成配置无需再写日志代码为场景坐标系适配如机器人、SLAM 等以特定轴为“上”的应用提供了更便捷的途径。时间轴导航增强Viewer 时间轴新增播放头playhead导航菜单可更方便地在录制中跳转并直接展示可用的键盘快捷键如播放/暂停、逐帧、跳到首尾等。对于长录制或需要精细审阅多模态机器人数据的场景这一菜单显著降低了键盘学习成本。多 Sink 支持GrpcServerSink与其他接收端组合背景GrpcServerSink此前无法与其他 recording sink 组合0.36 起在Rust、Python、C三个 SDK 中都可以把它与其他 sink 组合从而一边向已连接的 Viewer 流式推送实时数据一边把同一份录制写入文件或送往其他目的地。Python 用法Python 端统一入口为rr.set_sinks实现见 sinks.pyimport rerun as rr # 同时向多个 sink 流式发送数据 rr.set_sinks( # 托管一个 gRPC 代理服务器Web Viewer 可连接 rr.GrpcServerSink(), # 把数据写入当前目录下的 data.rrd 文件 rr.FileSink(data.rrd), )sinks.py中值得注意的实现细节影响实际使用重复 sink 会报错set_sinks内部会先做去重检查例如两个使用相同url的GrpcSink会抛出ValueError它替换现有 sink调用rr.init(spawnTrue)、rr.spawn()、rr.connect_grpc()之后再调用set_sinks最终只会保留set_sinks传入的 sink只对调用后新记录的数据生效set_sinks之后记录的日志才会写入新挂接的 sink可选参数default_blueprint为该应用设置默认蓝本与recording指定RecordingStream默认使用当前活跃数据录制必须先rr.init提供 application id否则抛出ValueErrorLogSinkLike类型别名涵盖GrpcSink | GrpcServerSink | FileSink | BinaryStream。set_sinks底层通过 Python 绑定的bindings.set_sinks落入原生实现见 python_bridge.rs 与类型标注 rerun_bindings.pyi单元测试见 test_grpc_server_sink.py。Python 侧 docstring 中还有一个“tee”模式示例适合作为模板rr.init(rerun_example_tee) rr.set_sinks( rr.GrpcSink(), rr.FileSink(data.rrd) ) rr.log(my/point, rr.Points3D(position[1.0, 2.0, 3.0]))更多关于多 sinktee 模式的说明见文档 sinksMultiple sinks。Rust / C 注意点Rust 与 C SDK 同样支持该组合set_sinks的 Python 签名等价物在 Rust 侧为RecordingStreamBuilder/RecordingStream上的多 sink 配置。若需文件与 gRPC 并存可同时配置FileSink与GrpcServerSink从而实现“服务实时数据 同时写文件”。MCAP 文件自省rerun mcap info/rerun mcap check与McapReader.info()CLI 命令拆分0.36 将原先单一诊断式输出的rerun mcap info重写为输出更丰富、更详细的文件级信息的命令原有诊断检查移到新的专用子命令rerun mcap check。rerun mcap info的实现位于 crates/top/rerun/src/commands/mcap/info.rs其关键特征通过memmap2内存映射整个 MCAP 文件只基于 MCAP header 与 summary 生成报告不解压消息 chunk因此对大型文件也很快支持--recover标志当 summary 缺失或损坏时从文件可读部分重建输出内容包括Profile、Library、消息总数、Duration、起始/结束时间戳、Schemas/Channels/Attachments/Metadata 数量、Summary 来源embedded 或 reconstructed、Chunks 数量与最大解压/压缩大小、是否存在重叠时间范围、各压缩 codec 的统计信息等。rerun mcap check见 crates/top/rerun/src/commands/mcap/check.rs专门负责原先的诊断检查。Python 编程访问McapReader.info()同一份信息现在也可通过 Python 的McapReader.info()获取实现见 crates/top/rerun/src/commands/mcap/check.rs 对应的 Python 绑定 _mcap_reader.py。数据类包括McapInfo整体头部与汇总信息、McapChannelInfotopic、schema、消息数、频率范围等、McapChunkInfochunk 数、最大压缩/解压大小、时间范围重叠标志、McapCompressionInfocodec、chunk 数、压缩前后字节数并带有savings_ratio属性。info()的结果惰性构建并缓存一次因此重复调用代价很低。from rerun.chunk import McapReader reader McapReader(data.mcap) print(f{reader.info().chunks.count} chunks at max. {reader.info().chunks.max_compressed_size_bytes} B) if reader.info().metadata_count 0: print(MCAP has metadata records) for channel in reader.info().channels: print(f{channel.topic} [{channel.schema.name}] - {channel.message_count})从 Rust 优化录制rrd::optimize能力与入口0.36 将录制优化能力带到 Rust此前仅 CLI 与 Python 可用位于rerun::rrd模块实现见 crates/top/rerun/src/rrd.rs由rrdfeature默认启用提供。核心 APIrerun::rrd::optimize(input_reader, output_writer, profile)从任意 reader读取、向任意 writer写出输出可直接进入内存缓冲、socket 或对象存储上传rerun::rrd::optimize_file(input_path, output_path, profile)文件到文件的简写形式它先完整读取输入再截断输出因此输入输出可以是同一个文件返回EncodeStats其中包含num_chunks写入的 chunk 数与num_bytes消息字节数。use rerun::rrd::OptimizationProfile; let profile rerun::rrd::OptimizationProfile::OBJECT_STORE; let input std::io::Cursor::new(std::fs::read(input.rrd)?); let mut output: Vecu8 Vec::new(); let stats rerun::rrd::optimize(input, mut output, profile)?; println!(wrote {} chunks, {} bytes of messages, stats.num_chunks, stats.num_bytes);文件对文件版本rerun::rrd::optimize_file(input.rrd, output.rrd, profile)?;内存与运行注意点optimize在工作期间会把整个录制保存在内存中rrd.rs中read_entity_dbs会逐个解码消息并索引到EntityDbload_and_compact一次性完成所有 store 的读取与压缩。此外optimize是无头操作实现会关闭 changelogconfig.enable_changelog false并且不运行订阅者以避免大幅拖慢。OptimizationProfile与预设OptimizationProfile见 crates/store/re_chunk_store/src/profile.rs组合了 chunk 尺寸阈值与后处理旋钮提供两个预设预设定位chunk_max_byteschunk_max_rowschunk_max_rows_if_unsortednum_extra_passesgop_batchingsplit_size_ratioLIVE面向实时 Viewer 工作流小 chunk、低延迟渲染、时间面板高精度12 × 8 × 4096即 393216 B4096102450trueNone不启用厚/薄拆分OBJECT_STORE面向对象存储后端如 catalog server大 chunk、查询与网络流式吞吐优先2 × 1024 × 1024即 2 MiB65 536819250trueSome(10.0)厚/薄列分离 10×参数语义源码注释摘要chunk_max_bytes单个 chunk 的最大字节数两个 chunk 仅在合并后仍在此限制内才会合并超出限制的传入 chunk 会被递归拆分设为0则完全禁用合并chunk_max_rows时间排序 chunk 的最大行数同时作为压缩上限与拆分触发条件仅当 chunk 内所有时间线均已排序时生效chunk_max_rows_if_unsorted含至少一条未排序时间线的 chunk 的最大行数保持更低是因为未排序 chunk 的查询代价更高解析时间范围需要全扫描num_extra_passes初始摄入后额外的压缩轮数每轮合并相邻且满足尺寸阈值的 chunk若某轮无合并则提前结束gop_batching是否沿视频 GoP画面组边界重组含视频帧的 chunk使每个 chunk 从关键帧开始随机访问最多只读一个 chunkLIVE与OBJECT_STORE均为truesplit_size_ratio厚/薄列拆分——若设置则拆分 chunk 使同一 chunk 内任意两个 archetype 组的字节大小差异不超过该比例从而把“厚”列图像、blob与“薄”列标量、变换分开None禁用1.0强制每个 archetype 独占一个 chunk。同一 archetype 的组件绝不会被拆分到不同 chunk例如EncodedImage:blob离开EncodedImage:media_type无法解码。单元测试 profile.rs 还保证LIVE阈值与ChunkStoreConfig::DEFAULT同步防止回归并验证OBJECT_STORE的阈值正确传递。各 profile 的适用场景与取舍详见文档 Optimize chunk count。多 store 版本戳修复本项变更还修复了rerun rrd optimize与rerun rrd merge在输入含多个 store时输出上的版本戳此前取哈希表中“先到者”的版本且该 store 未声明版本时回退到写入版本现在改为取所有输入 store 中的最新版本。该修复从 0.36.3 起可用。Breaking changes升级 0.35 → 0.36 需要关注的破坏性变更1. Entry-name 限制扩展至 application IDs为统一 application ID 与 catalog entry names见 catalog-object-modelEntryName限制现在也适用于ApplicationId见 recordings 文档。Rerun 会尝试通过将不支持的字符和点替换为连字符并追加短哈希后缀来迁移已有 application ID超长的 application ID 会被截断并追加同样的后缀。升级要求application ID 至多180 个字符且仅使用 ASCII 字母数字字符、下划线、连字符、空格、方括号与冒号。例如my/application需改为my-application。2.ParquetReader加载选项移入stream()实验性ParquetReader的构造函数现在只接受文件路径所有加载选项entity_path_prefix、column_grouping、delimiter、prefixes、use_structs、static_columns、index_columns移至stream()实现见 _parquet_reader.py# 0.35 写法 ParquetReader(path, column_groupingindividual, index_columns[IndexColumn.sequence(frame)]).stream() # 0.36 写法 ParquetReader(path).stream(column_groupingindividual, index_columns[IndexColumn.sequence(frame)])由此reader 变成文件的轻量句柄每次stream()调用相互独立——同一个 reader 可以在同一文件上驱动多个不同配置的流例如以不同 column grouping 分别读取。IndexColumn的定义可参考 _index_column.py。总结Rerun 0.36 围绕“更大地看、更灵活地录、更容易地查”三个方向做了实质增强可视化实验性GaussianSplats3D支持含 PLY 直开与 SDK 记录、各向异性缩放/旋转/不透明度、0–3 阶球谐视点相关颜色3D 场景坐标轴可直接在 UI/蓝图中配置时间轴播放头导航菜单降低长录制回放成本数据流与 WebGrpcServerSink可与FileSink等组合实现“实时推流 落盘”双写Web 端 Viewer Catalog 可惰性加载超过 RAM/Wasm 地址空间上限的.rrd工具链rerun mcap info富信息输出 rerun mcap check诊断拆分 PythonMcapReader.info()程序化自省Rustrrd::optimize/optimize_file配合OptimizationProfile::{LIVE, OBJECT_STORE}可在任意 reader/writer 间完成 chunk 重塑并修复多 store 场景的版本戳问题。升级到 0.36 时注意将 application ID 收敛到 180 字符内的合法字符集并把ParquetReader的加载选项迁移到stream()调用中。更早版本的迁移说明可参考 migration guides。【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →