【免费下载链接】splat-transform
CLI tool and library for 3D Gaussian splat processing and conversion
splat-transform是一款开源的 3D Gaussian Splat(3D 高斯泼溅)处理与转换 CLI 工具及库,支持读取 PLY、SOG、SPZ 等主流格式。本教程带你快速掌握它对高斯场景做平移(translate)、旋转(rotate)、缩放(scale)的三种核心变换操作,几行命令即可完成场景摆放。
上图是 splat-transform 通过 GPU 光栅化器渲染的高斯泼溅网格场景,正是变换操作常用的测试素材。
为什么需要变换操作
扫描或训练得到的 3D 高斯场景,往往存在这些问题:
- 场景没有放在坐标系原点,需要平移
- 扫描时设备朝向不对,需要旋转
- 场景单位是厘米/毫米,需要缩放到米制
- 多个场景文件需要摆放到正确位置后合并
splat-transform 用三个简洁的参数覆盖了所有需求,且变换与格式转换、过滤、统计可以随意组合。
快速上手:三个核心变换参数
CLI 的基本语法是:
splat-transform [全局选项] 输入文件 [操作] ... 输出文件 [操作]三个变换操作都可以重复使用,按书写顺序依次生效:
| 参数 | 作用 | 格式 |
|---|---|---|
-t, --translate | 平移所有高斯 | <x,y,z>三个分量 |
-r, --rotate | 按欧拉角旋转 | <x,y,z>角度(度) |
-s, --scale | 均匀缩放 | <factor>单一系数 |
如何平移高斯场景
将场景沿 X、Y、Z 轴各偏移指定距离(世界单位):
# 场景整体上移 5 个单位 splat-transform input.ply -t 0,5,0 output.ply如何旋转高斯场景
旋转使用欧拉角,单位为角度(degrees),按 x、y、z 三个轴指定:
# 绕 Y 轴旋转 90 度 splat-transform input.ply -r 0,90,0 output.ply如何缩放高斯场景
-s接受一个均匀缩放系数,同时作用于位置和高斯椭球的尺寸:
# 整体缩小到一半 splat-transform input.ply -s 0.5 output.ply组合变换:一条命令搞定平移+旋转+缩放
多个操作按书写顺序依次应用,这就是 splat-transform 最强大的地方:
# 先缩放 2 倍,再平移 (1,0,0),最后绕 Z 轴转 45 度 splat-transform input.ply -s 2 -t 1,0,0 -r 0,0,45 output.ply # 缩小一半并移到 z=10 处 splat-transform bunny.ply -s 0.5 -t 0,0,10 bunny_scaled.ply变换还可以写在输出文件之后,表示对最终结果(例如合并结果)再做处理:
# 两个输入合并后,统一上移 10 并缩小一半 splat-transform input1.ply input2.ply output.ply -t 0,0,10 -s 0.5多场景摆放合并的常见技巧
给每个输入文件单独挂上变换参数,可以一次把多个场景摆到正确位置再合并:
# cloudA 旋转 90 度,cloudB 放大 2 倍,合并为一个压缩 PLY splat-transform -w cloudA.ply -r 0,90,0 cloudB.ply -s 2 merged.compressed.ply💡 小贴士:
-w, --overwrite表示覆盖已存在的输出文件,批量处理时很实用。
用 --stats 验证变换前后数据
--stats可以打印每列的统计信息(min/max/median 等),加在操作前后各一次,就能直观对比变换是否生效:
splat-transform input.ply --stats -s 0.5 --stats output.ply也可以只分析不写文件(输出为null):
splat-transform input.ply --stats null变换在底层是怎么工作的
对想深入了解原理的读者,splat-transform 的变换实现位于 src/lib/ops/bake-transform.ts,核心逻辑分三层:
- 位置(position):应用完整的 缩放→旋转→平移(TRS)变换
- 几何属性(geometric):旋转矩阵左乘到每个高斯的四元数上;缩放则把
log(scale)加到对数尺度(log-scales)上,保证椭球尺寸同步变化 - 颜色(color):更高阶球谐(SH)系数按旋转矩阵同步旋转,保证旋转后视角相关的颜色依然正确(零阶 DC 分量不受影响)
动作类型定义见 src/lib/process.ts 中的Translate、Rotate、Scale,CLI 参数解析在 src/cli/index.ts。整个流程是流式分块处理的,可以平稳处理数亿高斯的超大场景。
用库 API 编程式执行变换
如果你在 Node.js 或浏览器环境中开发,也可以用库 API 完成同样的操作,详见 README.md 的 Library Usage 章节:
import { Vec3 } from 'playcanvas'; import { readFile, writeSource, getInputFormat, getOutputFormat, createChunkDataPool, processSourceBridged, MemoryFileSystem } from '@playcanvas/splat-transform'; const [source] = await readFile({ filename: 'scene.ply', inputFormat: getInputFormat('scene.ply'), fileSystem }); // 变换按数组顺序惰性组合:先缩放,再平移 const pool = createChunkDataPool(); const processed = await processSourceBridged(source, [ { kind: 'scale', value: 0.5 }, { kind: 'translate', value: new Vec3(0, 1, 0) }, { kind: 'rotate', value: new Vec3(0, 90, 0) } ], pool); const memFs = new MemoryFileSystem(); await writeSource({ filename: 'output.ply', outputFormat: getOutputFormat('output.ply', {}), source: processed, pool, options: {} }, memFs);常见问题
Q:旋转角度是弧度还是角度?A:-r使用角度(degrees),例如 90 度直接写0,90,0。
Q:缩放只支持均匀缩放吗?A:-s只做均匀缩放(单一系数)。非均匀需求可以通过缩放后再次处理实现,或直接修改 PLY 数据。
Q:变换会改变文件格式吗?A:不会强制改变。输入输出可以是任意受支持的格式组合,变换在中间透明地执行。
Q:想先造一个测试场景练手?A:项目自带生成器脚本 generators/gen-grid.mjs:
splat-transform gen-grid.mjs -p width=10,height=10,scale=10,color=0.1 scenes/grid.ply -w总结
| 需求 | 命令 |
|---|---|
| 平移 | -t x,y,z |
| 旋转 | -r x,y,z(度) |
| 缩放 | -s factor |
| 组合 | 按顺序串联多个参数即可 |
| 合并多场景 | 每个输入文件前挂各自的变换参数 |
splat-transform 的变换操作遵循"按顺序执行"的简单模型,学习成本极低,却能覆盖 3D 高斯场景摆放、合并、单位换算的全部日常需求。配合--stats验证与流式处理性能,它是 3D Gaussian Splatting 工作流中非常趁手的一环。
【免费下载链接】splat-transform
CLI tool and library for 3D Gaussian splat processing and conversion
相关推荐
go-zero 接入 etcd 动态配置最小实战:改配置不重启,四步跑通
go zero 接入 etcd 动态配置最小实战:改配置不重启,四步跑通 把限流阈值从 100 调到 200,线上服务不必再重启——这是 go zero 接入
后端RPC框架Web框架微服务API网关服务注册发现代码生成Natron Transform 变换组节点完全指南:位移、旋转、缩放、镜头畸变与追踪实战
Natron Transform 变换组节点完全指南:位移、旋转、缩放、镜头畸变与追踪实战 Transform(变换)节点组是 Natron 节点式合成中负责图
音视频视频处理图形学桌面应用SVG Path Editor路径操作详解:缩放、平移、旋转实战教程
SVG Path Editor路径操作详解:缩放、平移、旋转实战教程 想要精准编辑SVG路径却不知从何下手?SVG Path Editor是一款功能强大的在线S
前端图形学
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考