ArthurBrussee/brush

GitHub: ArthurBrussee/brush

基于高斯泼溅技术的跨平台三维重建引擎,使用 WebGPU 和 Rust 实现从桌面端到浏览器、移动端的全面覆盖,无需 CUDA 依赖即可运行。

Stars: 4689 | Forks: 259

# Brush

非常感谢 @GradeEterna 提供的精美场景

Brush 是一个使用 [Gaussian splatting](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/) 的 3D 重建引擎。它支持广泛的系统:**macOS/windows/linux**、**AMD/Nvidia/Intel** 显卡、**Android** 以及**浏览器**。为了实现这一点,它使用了兼容 WebGPU 的技术和 [Burn](https://github.com/tracel-ai/burn) 机器学习框架。 用于实时渲染的机器学习具有巨大的潜力,但大多数机器学习工具在这方面表现不佳:渲染需要实时交互性,通常涉及动态形状和计算,无法在大多数平台上运行,并且附带庞大的 CUDA 依赖来发布应用程序可能会很麻烦。另一方面,Brush 能生成简单且无依赖的二进制文件,无需任何设置即可在几乎所有设备上运行。 [**尝试 Web 演示** chrome logo ](https://arthurbrussee.github.io/brush-demo) _注意:目前仅支持 Chrome 和 Edge。希望尽快支持 Firefox 和 Safari)_ [![](https://dcbadge.limes.pink/api/server/https://discord.gg/TbxJST2BbC)](https://discord.gg/TbxJST2BbC) # 功能 ## 训练 Brush 接收 COLMAP 数据或 Nerfstudio 格式的数据集。完全支持在原生环境、移动端以及浏览器中进行训练。在训练期间,您可以与场景进行交互,实时观察训练动态,并在训练过程中将当前渲染结果与输入视图进行比较。 它还支持对图像进行遮罩处理: - 带有透明度的图像。这将强制最终的 splat 与输入的透明度相匹配。 - 名为 'masks' 的图像文件夹。这将忽略图像中被遮罩排除的部分。 ## 查看器 Brush 也是一款出色的 splat 查看器,包括在 Web 端的使用。它可以加载 .ply 和 .compressed.ply 文件。您可以从 URL 流式传输数据(对于 Web 应用,只需附加 `?url=`)。 Brush 还可以加载 splat 文件的 .zip 压缩包以将其作为动画显示,或者加载包含增量帧的特殊 ply 文件(参见 [cat-4D](https://cat-4d.github.io/) 和 [Cap4D](https://felixtaubner.github.io/cap4d/)!)。 ## CLI Brush 可作为 CLI 使用。运行 `brush --help` 获取概览。每个 CLI 命令都可以配合 `--with-viewer` 使用,这将同时打开 UI,以便于调试。 ## 重新运行 https://github.com/user-attachments/assets/f679fec0-935d-4dd2-87e1-c301db9cdc2c 在训练期间,可以使用优秀的 [rerun](https://rerun.io/) 来可视化额外的数据。要在您的机器上安装 rerun,请遵循其[说明](https://rerun.io/docs/getting-started/installing-viewer)。为了获得最佳效果,请在查看器中打开 ./brush_blueprint.rbl 文件。 ## 构建 Brush 首先安装 Rust 1.88+。您可以使用 `cargo test --all` 运行测试。Brush 使用出色的 [rerun](https://rerun.io/) 在训练时提供额外的可视化功能,如果您需要使用它,请运行 `cargo install rerun-cli`。 ### Windows/macOS/Linux 在工作区根目录下使用 `cargo run --release` 来生成优化后的构建版本。使用 `cargo run` 来运行调试版本。 ### Web Brush 可以编译为 WASM。运行 `npm run dev` 以使用 Next.js 启动演示网站,请参阅 app/brush-app/web 中的 web 目录。 Brush 使用 [`wasm-pack`](https://drager.github.io/wasm-pack/) 来构建 WASM bundle。您也可以在没有 bundler 的情况下使用它,详情请参阅 [wasm-pack 的文档](https://drager.github.io/wasm-pack/book/)。 WebGPU 仍是一项即将推出的标准,因此目前仅支持 Windows 和 macOS 上的 Chrome 134+ 版本。 ### Android 作为一次性设置,请确保您已安装 Android SDK 和 NDK。 - 检查是否设置了 ANDROID_NDK_HOME 和 ANDROID_HOME - 为 rust 添加 Android 目标:`rustup target add aarch64-linux-android` - 安装 cargo-ndk 以管理 lib 的构建:`cargo install cargo-ndk` 每次更改 rust 代码后,请运行 - `cargo ndk -t arm64-v8a -o crates/brush-app/app/src/main/jniLibs/ build` - 注意:为了获得最佳性能,请以 release 模式构建。这与 Android Studio 应用的构建配置是分开的。 - `cargo ndk -t arm64-v8a -o crates/brush-app/app/src/main/jniLibs/ build --release` 您现在可以选择从 Android Studio 运行项目(Android Studio 不会构建 rust 代码),或者从命令行运行它: ``` ./gradlew build ./gradlew installDebug adb shell am start -n com.splats.app/.MainActivity ``` 您也可以在 Android Studio 中将此文件夹作为项目打开并从那里运行。注意:在 Android Studio 中运行_不会_自动重新构建 rust 代码。 ## 基准测试 渲染和训练通常比 gsplat 更快。您可以使用 `cargo bench` 对某些内核运行基准测试。 # 致谢 [**gSplat**](https://github.com/nerfstudio-project/gsplat),感谢他们提供的内核参考版本。 **Peter Hedman, George Kopanas & Bernhard Kerbl**,感谢他们的许多讨论与指导。 **The Burn 团队**,感谢他们在这一路上对 Burn 提供的帮助与改进。 **Raph Levien**,感谢他提供的 GPU 基数排序[原始版本](https://github.com/googlefonts/compute-shader-101/pull/31)。 **GradeEterna**,感谢他们的反馈和提供的场景。 # 免责声明 这*不是*一个官方的 Google 产品。本仓库是 [google-research 仓库](https://github.com/google-research/google-research/tree/master/brush_splat) 的一个派生公开版本。
标签:3D重建, Android, Apex, Burn框架, COLMAP, CUDA替代, DNS解析, DSL, JSON 请求, NeRFsudio, WebGPU, 三维建模, 交互式训练, 可视化界面, 图像处理, 图像掩码, 多平台支持, 实时渲染, 开源项目, 数据集处理, 机器学习, 浏览器, 移动端开发, 视频处理, 计算机视觉, 通知系统, 高斯溅射