ArthurBrussee/brush
요약
Brush는 Gaussian splatting을 활용하는 3D 재구성 엔진으로, macOS/windows/linux, AMD/Nvidia/Intel 그래픽 카드, Android, 브라우저 등 광범위한 플랫폼에서 작동합니다. WebGPU 호환 기술과 Burn 머신러닝 프레임워크를 사용하여 실시간 렌더링을 구현하며, 별도의 설정 없이 의존성이 낮은 바이너리를 생성하는 것이 특징입니다. 이 엔진은 COLMAP 또는 Nerfstudio 형식의 데이터셋을 입력받아 학습(Training) 및 다양한 기능을 지원합니다. 특히 웹 환경에서 네이티브한 학습과 상호작용이 가능하고, 이미지 마스킹 기능도 제공하여 높은 유연성을 자랑합니다.
핵심 포인트
- Gaussian splatting 기반의 3D 재구성 엔진입니다.
- WebGPU 호환 기술 및 Burn ML 프레임워크를 사용하여 광범위한 플랫폼(데스크톱, 모바일, 브라우저)에서 작동합니다.
- 별도의 설정 없이 의존성이 낮은 바이너리를 생성하여 배포가 용이합니다.
- COLMAP/Nerfstudio 데이터셋을 지원하며, 웹 환경에서도 네이티브 학습 및 상호작용이 가능합니다.
- CLI 사용과 더불어 rerun 라이브러리를 활용한 학습 중 추가 시각화 기능을 제공합니다.
BrushSizzleCompressedFrame.mp4
아름다운 장면을 제공해 준 @GradeEterna에게 깊은 감사를 표합니다.
*
Brush는 Gaussian splatting을 사용하는 3D 재구성 (reconstruction) 엔진입니다. 이 엔진은 macOS/windows/linux, AMD/Nvidia/Intel 그래픽 카드, Android, 그리고 **브라우저 (browser)**를 포함한 광범위한 시스템에서 작동합니다. 이를 달성하기 위해 WebGPU 호환 기술과 Burn 머신러닝 (machine learning) 프레임워크를 사용합니다.
실시간 렌더링 (real time rendering)을 위한 머신러닝은 엄청난 잠재력을 가지고 있지만, 대부분의 ML 도구들은 실시간 렌더링과 잘 맞지 않습니다. 렌더링은 실시간 상호작용 (interactivity)을 요구하고, 대개 동적인 형태와 연산을 포함하며, 대부분의 플랫폼에서 실행되지 않고, 대규모 CUDA 의존성 (dependencies)을 포함하여 앱을 배포하는 것이 번거로울 수 있기 때문입니다. 반면, Brush는 별도의 설정 없이 거의 모든 장치에서 실행되는 단순하고 의존성이 없는 바이너리 (dependency free binaries)를 생성합니다.
웹 데모 시도하기
참고: Chrome과 Edge에서만 작동합니다. Firefox와 Safari는 곧 지원될 예정입니다.)
Brush는 COLMAP 데이터 또는 Nerfstudio 형식의 데이터셋을 입력으로 받습니다. 학습 (Training)은 모바일과 브라우저에서 네이티브로 완전히 지원됩니다. 학습하는 동안 장면과 상호작용하며 학습 역학 (training dynamics)을 실시간으로 확인할 수 있으며, 학습이 진행됨에 따라 현재 렌더링을 입력 뷰 (input views)와 비교할 수 있습니다.
또한 이미지 마스킹 (masking)을 지원합니다:
- 투명도가 있는 이미지: 이는 최종 splat이 입력의 투명도와 일치하도록 강제합니다.
- 'masks'라고 불리는 이미지 폴더: 마스킹 처리된 이미지의 부분을 무시합니다.
Brush는 웹을 포함하여 splat 뷰어 (viewer)로서도 잘 작동합니다. .ply 및 .compressed.ply 파일을 로드할 수 있습니다. URL로부터 데이터를 스트리밍할 수 있습니다 (웹 앱의 경우, 단순히 ?url=을 추가하면 됩니다).
또한 Brush는 splat 파일의 .zip 파일을 로드하여 애니메이션으로 표시하거나, 델타 프레임 (delta frames)을 포함하는 특수 ply 파일을 로드할 수 있습니다 (cat-4D 및 Cap4D를 참조하세요!).
Brush는 CLI (Command Line Interface)로 사용할 수 있습니다. 개요를 보려면 brush --help를 실행하세요. 모든 CLI 명령은 --with-viewer와 함께 사용할 수 있으며, 이는 쉬운 디버깅을 위해 UI를 함께 엽니다.
rerun_dash_compressed.mp4
학습(training) 중에는 뛰어난 rerun을 사용하여 추가 데이터를 시각화할 수 있습니다. 사용자의 머신에 rerun을 설치하려면 해당 안내 지침을 따르십시오. 최상의 결과를 위해 뷰어에서 ./brush_blueprint.rbl 파일을 여십시오.
먼저 rust 1.88+ 버전을 설치하십시오. cargo test --all 명령어로 테스트를 실행할 수 있습니다.
Brush는 학습 중 추가 시각화를 위해 멋진 rerun을 사용합니다. 사용을 원하신다면 cargo install rerun-cli를 실행하십시오.
최적화된 빌드(optimized build)를 만들려면 워크스페이스 루트(workspace root)에서 cargo run --release를 사용하십시오. 디버그 빌드(debug build)를 실행하려면 cargo run을 사용하십시오.
Brush는 WASM으로 컴파일될 수 있습니다. Next.js를 사용하여 데모 웹사이트를 시작하려면 npm run dev를 실행하십시오. app/brush-app/web에 있는 web 디렉토리를 참조하십시오.
Brush는 WASM 번들(bundle)을 빌드하기 위해 wasm-pack을 사용합니다. 번들러(bundler) 없이도 사용할 수 있으며, wasm-pack의 문서를 참조하십시오.
WebGPU는 아직 도입 중인 표준이며, 따라서 현재는 Windows 및 macOS의 Chrome 134+ 버전만 지원됩니다.
일회성 설정으로, Android SDK 및 NDK가 설치되어 있는지 확인하십시오.
-
ANDROID_NDK_HOME 및 ANDROID_HOME이 설정되어 있는지 확인
-
rust에 Android 타겟(target) 추가
rustup target add aarch64-linux-android -
라이브러리(lib) 빌드 관리를 위해 cargo-ndk 설치
cargo install cargo-ndk
Rust 코드를 변경할 때마다 다음을 실행하십시오.
cargo ndk -t arm64-v8a -o crates/brush-app/app/src/main/jniLibs/ build
- 참고(Nb): 최상의 성능을 위해 release 모드로 빌드하십시오. 이는 Android Studio의 앱 빌드 설정과는 별개입니다.
cargo ndk -t arm64-v8a -o crates/brush-app/app/src/main/jniLibs/ build --release
이제 Android Studio에서 프로젝트를 실행하거나(Android Studio는 Rust 코드를 빌드하지 않습니다), 명령줄(command line)에서 실행할 수 있습니다:
./gradlew build
./gradlew installDebug
adb shell am start -n com.splats.app/.MainActivity
이 폴더를 Android Studio에서 프로젝트로 열어 거기서 실행할 수도 있습니다. 참고(Nb): Android Studio에서 실행한다고 해서 Rust 코드가 자동으로 다시 빌드되지는 않습니다.
렌더링(Rendering)과 학습(training)은 일반적으로 gsplat보다 빠릅니다. cargo bench를 사용하여 일부 커널(kernels)의 벤치마크를 실행할 수 있습니다.
gSplat, 커널의 참조 버전(reference version)을 제공해 준 것에 대해.
Peter Hedman, George Kopanas & Bernhard Kerbl, 수많은 논의와 가이드를 제공해 준 것에 대해.
The Burn team, 진행 과정에서 Burn의 도움과 개선을 제공해 준 것에 대해.
Raph Levien, GPU radix sort의 원본 버전을 제공해 준 것에 대해.
GradeEterna, 피드백과 장면(scenes)을 제공해 준 것에 대해.
이것은 Google의 공식 제품이 아닙니다. 이 저장소(repository)는 google-research 저장소의 포크(forked)된 공개 버전입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending All (daily)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기