Files
chill_notes/wiki/AI工程/GaussForge高斯格式转换库.md
2026-05-06 09:11:11 +08:00

211 lines
5.5 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GaussForge — 高性能 3DGS 格式转换库
> 来源: https://github.com/3dgscloud/GaussForge
> 在线查看: https://www.3dgsviewers.com/
> 研究日期: 2026-05-06
> 协议: Apache-2.0
## 项目概览
- **名称**: GaussForge
- **作者**: 3dgscloud
- **定位**: 高性能 3D Gaussian Splatting 格式转换库
- **核心特点**: 无损转换、多格式支持、C++17 编写
- **Python**: `pip install gaussforge`
- **npm**: `npm install @gaussforge/wasm`
## 解决的核心问题
3D 高斯泼溅领域存在**多种互不兼容的格式**
- PLY标准格式文件大
- SPZNiantic 压缩格式)
- SPLAT / KSPLATWeb 渲染格式)
- SOGPlayCanvas 超压缩格式)
- compressed.ply压缩 PLY
GaussForge 提供**无损转换**,统一这些格式。
## 支持的格式
| 格式 | 扩展名 | 读 | 写 | 说明 |
|------|--------|----|----|------|
| **PLY** | .ply | ✅ | ✅ | 标准 PLY 格式 |
| **SPZ** | .spz | ✅ | ✅ | Niantic 压缩格式 |
| **Compressed PLY** | .compressed.ply | ✅ | ✅ | 压缩 PLY |
| **SPLAT** | .splat | ✅ | ✅ | Splat 格式 |
| **KSPLAT** | .ksplat | ✅ | ✅ | K-Splat 格式 |
| **SOG** | .sog | ✅ | ✅ | PlayCanvas SOG 格式 |
## 核心技术架构
### 统一中间表示IR
```
任意格式 → GaussianCloudIR → 任意格式
```
所有格式转换都通过统一的中间表示 `GaussianCloudIR`
| 数据字段 | 说明 |
|----------|------|
| **Positions** | 3D 坐标数组 |
| **Scales** | 对数尺度值 |
| **Rotations** | 四元数表示的旋转 |
| **Alphas** | 预 sigmoid 不透明度 |
| **Colors** | 球谐函数 0 阶DC系数 |
| **SH Coefficients** | 高阶球谐系数 |
| **Metadata** | 坐标系、单位、颜色空间 |
### 数据验证机制
- 数组大小一致性检查
- 数据范围合理性验证
- 格式规范合规性检查
## 三种使用方式
### 1. CLI 命令行工具
```bash
# PLY 转 SPZ
./gfconvert input.ply output.spz
# 压缩 PLY 转标准 PLY
./gfconvert input.compressed.ply output.ply
# 手动指定格式
./gfconvert input.dat output.dat --in-format ply --out-format spz
```
### 2. Python SDK
```bash
pip install gaussforge
```
```python
import gaussforge
gf = gaussforge.GaussForge()
# 读取 PLY
with open("model.ply", "rb") as f:
data = f.read()
result = gf.read(data, "ply")
print(f"Loaded {result['data']['numPoints']} points")
# 格式转换
converted = gf.convert(data, "ply", "splat")
with open("output.splat", "wb") as f:
f.write(converted["data"])
```
### 3. WebAssembly浏览器/Node.js
```bash
npm install @gaussforge/wasm
```
```typescript
import { createGaussForge } from '@gaussforge/wasm';
const gaussForge = await createGaussForge();
const converted = await gaussForge.convert(fileData, 'ply', 'spz');
```
## 技术栈
| 层级 | 技术 |
|------|------|
| **核心** | C++17 |
| **构建** | CMake 3.26+ |
| **编译器** | GCC 7+ / Clang 5+ / MSVC 2017+ |
| **Python 绑定** | nanobind |
| **WASM 绑定** | Emscripten + TypeScript |
| **依赖** | spz (Niantic) / libwebp / nlohmann_json / zlib |
## 项目结构
```
GaussForge/
├── include/gf/
│ ├── core/ # 核心数据结构IR、元数据、验证
│ └── io/ # I/O 接口和格式实现
├── src/
│ ├── core/ # 核心实现
│ ├── io/ # I/O 实现
│ ├── cli/ # 命令行工具
│ └── wasm/ # WebAssembly 绑定
├── python/ # Python 包nanobind 绑定)
├── wasm/ # WASM 包npm
└── cmakes/ # CMake 配置
```
## 与 SuperSplat 的关系
| 维度 | SuperSplat | GaussForge |
|------|------------|------------|
| **定位** | 可视化编辑器 | 格式转换库 |
| **运行方式** | 浏览器 | CLI / Python / WASM |
| **功能** | 编辑/优化/发布 | 格式转换/验证 |
| **语言** | TypeScript | C++17 |
| **互补性** | 编辑前需要转换格式 | 转换后可用 SuperSplat 编辑 |
**工作流**`原始数据 → GaussForge 转换 → SuperSplat 编辑 → 发布`
## 在线工具
**3DGS Viewer**: https://www.3dgsviewers.com/
- 集成 GaussForge 的在线 3DGS 查看器
- 支持上传 PLY/SPZ/SPLAT/KSPLAT/SOG 格式
- 可直接在浏览器中查看和导出所有格式
- 无需安装
## 应用场景
### 1. 3DGS 开发/研究
- 不同工具输出不同格式,需要统一转换
- 训练输出 PLY → 转 SPZ/SOG 用于生产
### 2. Web 应用
- WASM 版本支持浏览器端格式转换
- 用户上传任意格式,自动转换后渲染
### 3. 自动化管线
- Python SDK 集成到 CI/CD 流程
- 批量转换和验证
### 4. 跨平台协作
- 不同团队使用不同格式
- GaussForge 作为"翻译层"
## 如何添加新格式
1.`include/gf/io/` 创建新的 reader/writer 头文件
2.`src/io/` 实现对应读写逻辑
3.`src/io/registry.cpp` 注册新格式
## 项目评价
**优点**
- ✅ 6 种主流格式全覆盖
- ✅ 无损转换(统一 IR
- ✅ 三种使用方式CLI / Python / WASM
- ✅ C++17 高性能实现
- ✅ 数据验证机制
- ✅ 零多余依赖
- ✅ Apache-2.0 开源协议
**局限**
- 🔧 纯转换工具,不包含编辑功能
- 🔧 不涉及 3DGS 训练/生成
- 🔧 需要配合其他工具使用(编辑器/渲染器)
## 相关链接
- GitHub: https://github.com/3dgscloud/GaussForge
- 在线查看器: https://www.3dgsviewers.com/
- Python PyPI: https://pypi.org/project/gaussforge/
- npm WASM: https://www.npmjs.com/package/@gaussforge/wasm