Godot에 3D Gaussian Splatting 렌더와 에디터 충돌 생성이 통합된 플러그인
Godot용 플러그인으로 3D Gaussian Splatting 자산을 임포트하여 컴포지터 기반 실시간 합성과 에디터에서의 충돌 메시 생성을 지원한다.
TL;DR
이 레포지토리는 Godot 엔진에 3D Gaussian Splatting 파이프라인을 통합하는 플러그인으로, 다양한 Gaussian 포맷을 GPU-준비 리소스로 변환하고 컴포지터 전용 패스에서 실시간 합성과 깊이 오클루전을 처리한다. 샘플은 수백만(리드미 기준 약 600만) 가우시안 포인트를 하나의 실시간 씬에서 렌더하는 예를 보여주며, 인스턴싱과 가시성 전파로 GPU 업로드 중복을 줄이는 최적화가 포함되어 있다. 3.1.0에서 추가된 에디터 측 충돌 생성은 opacity-weighted Mahalanobis 누적과 Beer–Lambert 컷오프에 기반한 복셀화, Greedy/Marching Cubes 추출, 백그라운드 작업 및 내보내기를 지원해 캡처 기반 씬을 물리와 연동할 수 있게 했다. 단점으로는 Forward Plus와 컴퓨트 셰이더를 전제로 하는 데스크톱 중심 지원과 4K에서의 GPU 메모리 압박 관련 시각적 오류 보고가 있어 대상 플랫폼 제약을 검토해야 한다.
주요 기능
- 가우시안 자산을 임포트하고 GPU-준비 리소스로 변환하는 파이프라인을 제공한다. 이 변환 과정에서 포맷 통합과 중앙 정렬(center)을 수행하여 씬 배치를 간소화한다. 지원 포맷으로는 .ply, .compressed.ply, .splat, .sog(v2)가 포함되어 있어 다양한 스플랫 소스 파일을 수용한다.
- 컴포지터 기반의 하이브리드 렌더링을 수행하여 Gaussian Splat 출력을 일반 Godot 3D 콘텐츠와 깊이 기반으로 합성한다. 합성 과정은 Gaussian 전용 패스에서 실행되며 WorldEnvironment.compositor에 CompositorEffect 스크립트를 연결해 동작한다. 이 구조로 장면의 오클루전과 깊이 테스팅을 일관되게 처리할 수 있다.
- 에디터 측면에서 Gaussian 데이터로부터 StaticBody3D/ConcavePolygonShape3D 형태의 충돌 메시를 생성하는 기능을 제공한다. 충돌 생성은 가우시안 가중치 기반의 복셀화(voxelization)와 Mahalanobis 누적, Beer–Lambert 스타일 컷오프를 적용하고 Greedy face 또는 Marching Cubes 추출 옵션을 선택할 수 있다. 생성 작업은 백그라운드 WorkerThreadPool에서 진행되며 취소 가능한 진행 대화상자와 단일 undo/redo 커밋을 지원한다.
- 인스턴싱과 가시성 전파를 지원하여 동일 가우시안 데이터를 여러 노드에서 중복 업로드 없이 재사용할 수 있다. 런타임에서 여러 GaussianSplatNode가 하나의 Gaussian 패스에서 함께 렌더링되며 GPU 업로드 최적화로 메모리 중복을 줄인다. 에디터 아이콘과 가이즈, 디버그 뷰를 통해 시각적 검증과 디버깅을 용이하게 했다.
- 디버그 뷰와 메시 내보내기 기능을 포함하여 개발자 워크플로를 보완한다. 디버그 뷰는 GS Alpha, GS Color, GS Depth, Scene Depth, Depth Reject Mask 같은 버퍼별 시각화를 제공한다. 충돌 메시 내보내기는 .res, .obj, .glb 형식을 지원하여 외부 도구로의 후처리를 가능하게 한다.
어떻게 동작하는가
플러그인은 장면을 삼각형 메시 대신 다수의 3차원 가우시안 포인트로 표현하는 3D Gaussian Splatting 파이프라인을 Godot에 통합한다. 임포터는 입력 포맷을 읽어 GPU-준비 Gaussian 리소스로 변환하고, 런타임에서는 별도의 Gaussian 전용 컴포지터 패스가 compute shader를 이용해 각 스플랫을 화면에 투영하고 합성한다. 에디터 충돌 생성은 가우시안 불투명도 가중 Mahalanobis 누적과 Beer–Lambert 스타일 컷오프를 사용해 볼륨을 복셀화한 뒤 Greedy 또는 Marching Cubes로 메시를 추출하며, GPU 경로는 RenderingServer.create_local_rendering_device()로 로컬 장치를 생성해 렌더러의 글로벌 GPU 상태를 건드리지 않는다.
해결 문제
Godot 기본 파이프라인은 Gaussian Splatting 자산의 임포트와 렌더링을 네이티브로 지원하지 않으며, 깊이 기반 합성이나 물리 충돌과의 통합이 부족했다. 이 플러그인은 다양한 Gaussian 포맷을 통합해 GPU-준비 리소스로 빌드하고 컴포지터 패스로 씬에 합성하여 깊이 오클루전과 일관된 렌더 결과를 제공한다. 또한 에디터에서 충돌 메시를 생성하는 워크플로를 추가하여 캡처 기반 씬을 물리 시뮬레이션과 바로 연동할 수 있게 한다.
지금 주목받는 이유
최근 버전 3.1.0에서 에디터 충돌 생성 기능이 추가되며 물리 연동 워크플로가 강화되었고 GameFromScratch와 다수의 동영상 소개를 통해 노출이 늘어났다. 샘플에서 수백만 개(리드미 기준 약 600만) 가우시안 포인트의 실시간 렌더 성능을 보여주어 실시간 포토리얼리스틱 캡처 렌더링 분야에서 관심을 받았다. 또한 기존 오픈소스 포트와의 연계 및 패키지 릴리스가 이루어져 사용자가 시험해보기 쉬운 상태로 배포되었다.
차별점
- Godot의 컴포지터 패스 형태로 Gaussian Splatting을 직접 통합하여 표준 메시 파이프라인과 분리된 렌더 경로를 제공한다. 이 설계는 씬 깊이 버퍼에 대한 깊이-인식 합성 및 오클루전을 자연스럽게 구현하도록 한다. 결과적으로 기존 메시 기반 워크플로와 병행해 사용할 수 있는 하이브리드 렌더링을 실현한다.
- 에디터 측 충돌 생성 기능은 가우시안 데이터를 물리용 삼각형 메시로 변환하는 전체 파이프라인을 포함한다. 복셀화 시 opacity-weighted Mahalanobis 누적과 Beer–Lambert 컷오프를 적용하고 Greedy 또는 Marching Cubes 추출 옵션을 제공하므로 사용 목적에 따라 성능과 품질 트레이드오프를 선택할 수 있다. 생성은 백그라운드 스레드와 취소 가능한 진행 다이얼로그, 단일 undo/redo 액션으로 통합되어 실무 편의성을 높였다.
- GPU 복셀화 경로는 RenderingServer.create_local_rendering_device()를 사용해 개인 로컬 장치를 생성하고 렌더러의 전역 GPU 상태를 변경하지 않도록 설계되었다. 이 방식은 플러그인의 GPU 작업이 기존 렌더러 파이프라인과 충돌하지 않게 하는 안전 장치를 제공한다. 또한 GPU가 없을 경우 자동으로 CPU 경로로 폴백되므로 렌더링 전용 설치에서는 충돌 모듈을 제거해도 렌더 기능은 유지된다.
사용 사례
- 포토그래메트리나 라이트필드로 캡처한 장면을 Godot으로 가져와 실시간 게임 씬에서 시각적으로 높은 품질의 뷰를 구현하는 데 사용한다. GaussianSplatNode와 컴포지터 합성을 통해 장면의 깊이 오클루전과 다른 Godot 3D 오브젝트 간의 일관된 렌더링을 유지할 수 있다. 대규모 포인트 기반 씬을 게임 환경에 직접 통합할 때 로드 시간과 메모리 관리 측면에서 이점이 있다.
- 레벨 프로토타이핑과 물리 상호작용 검증에서 임포트한 스캔 데이터에 대해 에디터 측에서 충돌 메시를 생성하여 바로 물리 시뮬레이션을 수행하는 용도로 적절하다. Interior/Outdoor/Carve 모드와 CollisionSeed 마커를 통해 실내 밀폐 또는 외부 지면 보강 같은 다양한 씬 모드에 맞춘 충돌 체적을 생성할 수 있다. 생성된 메시를 .obj/.glb로 내보내 후처리하거나 외부 툴과 연동하는 워크플로드도 가능하다.
- 실시간 데모나 시각화 프로젝트에서 고밀도 가우시안 렌더링을 이용해 캡처 기반 씬을 보여주는 데 활용할 수 있다. 샘플 에셋과 디버그 뷰를 통해 렌더 결과를 검증하고 뷰포트 해상도나 렌더 설정으로 성능-품질 균형을 조정할 수 있다. VR이나 복잡한 멀티뷰포트 환경에서는 추가 검증이 필요하지만 VR 관련 수정이 이미 일부 적용된 이력이 존재한다.
시작하기
프로젝트의 addons 폴더에 addons/gdgs 폴더를 복사한 뒤 Godot에서 Project > Project Settings > Plugins로 가서 gdgs 플러그인을 활성화하면 플러그트의 루트가 res://addons/gdgs 경로로 노출된다. 샘플 assets 폴더의 demo.ply 또는 demo.sog 같은 자산을 프로젝트에 추가하면 Godot가 리소스로 임포트하고 GaussianSplatNode를 씬에 추가해 gaussian 프로퍼티에 리소스를 할당한 뒤 WorldEnvironment의 compositor에 제공된 gaussian_compositor_effect.gd를 연결하면 장면을 실행할 수 있다. 에디터에서 충돌을 생성하려면 GaussianSplatNode를 선택한 후 Inspector의 GDGS Collision 블록에서 Generate Collision을 클릭하면 백그라운드 작업으로 메시가 생성된다.
요구사항
- Godot 4.4 이상이 필요하며 Forward Plus 렌더링 백엔드를 사용해야 한다. 데스크톱 GPU와 드라이버에서 컴퓨트 셰이더 지원이 필수이며, GPU가 없거나 호환되지 않을 경우 충돌 생성에서 CPU 폴백을 사용한다. 플러그인의 충돌 모듈은 선택적이며 렌더링 전용 설치 시 addons/gdgs/collision 폴더를 제거해도 렌더 기능은 유지된다.
248
Stars
21
Forks
+204
Trending
0
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.