요약
매그노퍼스가 Unreal용 가우시안 스플랫 렌더러를 고쳐 1억 개짜리 장면도 스트리밍으로 띄웠습니다.
매그노퍼스의 기술 디렉터 샘 벌리가 쓴 가우시안 스플랫(수많은 반투명 타원 점으로 3D 장면을 그리는 기법) 연재의 3부입니다. 2부에서 무제한이라던 렌더러가 실제 촬영 데이터 앞에서 한계에 부딪혔고, 이를 다시 손본 과정을 정리했습니다.
왜 중요한가
- 실제 사진 측량(사진으로 3D를 재구성하는 기법) 데이터는 GPU 메모리를 넘기 쉽습니다. 그래서 필요한 부분만 올리는 구조가 실사용의 전제가 됩니다.
- 넘을 수 없는 한계로 여긴 값이 임의로 정한 상수였다는 점이 드러났습니다.
- Streamed SOG 지원이 OKO의 Unreal 판과 웹 판에 모두 들어갔습니다.
핵심 내용
- Unreal의 GPU Scene은 메시 하나당 인스턴스가 약 1,600만 개로 제한돼, 이를 거치지 않는 간접 그리기로 바꿨습니다.
- GPU가 화면 밖 스플랫을 걸러 내고 그릴 개수를 직접 정하게 되면서 LOD(거리에 따라 세밀도를 바꾸는 기법)의 기반이 생겼습니다.
- PlayCanvas Streamed SOG 포맷으로 장면을 공간 트리로 나누고, 화면상 오차를 기준으로 구역마다 세밀도를 고릅니다.
- 텍스처 한 줄 폭을 4096으로 묶어 둔 상수를 늘려 상한을 약 6,700만 개에서 2억 6,800만 개로 올렸습니다.
- 정해진 메모리 예산 안에서 보이는 구역만 올리고 가장 먼 구역을 내보내, 메모리보다 큰 장면도 띄웁니다.
HN 반응
- SOG 도구를 만드는 개발자가 이렇게 쓰이는 줄 몰랐다며, 여러 번 줄인 뒤 생기는 빈틈을 메우는 기능을 담은 V3를 준비 중이라고 밝혔습니다.
- 삼각형 스플래팅이 GPU에 더 맞지 않느냐는 질문에는 그릴 도형 수가 비슷해 빠르지 않고 실제 장면 표현력도 떨어진다는 반론이 나왔습니다.
최근 Siggraph 논문 중에 가우시안 스플래팅을 전혀 다른 방식으로 확장하는 흥미로운 연구가 있습니다. 몇 가지 재미있는 이점이 있는데, 바로 가우시안 포인트 스플래팅(Gaussian point splatting)입니다.
영상: https://www.youtube.com/watch?v=2AWv_nIfp-U
논문: https://jorisar.nl/gaussian_point_splatting/gaussian_point_splatting.pdf
저장소: https://github.com/JorisAR/gaussian-point-splatting
Vulkan으로도 아주 쉽게 옮길 수 있습니다.
https://github.com/expenses/nbn#guassian-point-splatting
삼각형 스플래팅은 왜 널리 쓰이지 못했는지 아는 분 계신가요? GPU 렌더링에는 훨씬 더 잘 맞을 것 같은데요.
https://trianglesplatting.github.io/
크게 빠르지 않습니다. 어차피 그리는 프리미티브 수는 거의 같고(가우시안도 스플랫 영역을 덮는 쿼드로 렌더링됩니다), 셰이딩에 드는 추가 비용도 프래그먼트 샘플링과 깊이 테스트 전체에 비하면 크지 않기 때문입니다. 게다가 삼각형은 현실 세계의 3D 장면 대부분을 표현하는 데 효율이 떨어지는 편입니다. 제가 시험해 본 경우 대부분 3DGS보다 프리미티브가 더 많이 필요했고, 학습 시간도 더 길었으며, 결국 FPS와 PSNR도 더 낮았습니다. PSGR 같은 다른 방법들도 3DGS가 실제 세계의 형상에 더 잘 맞도록 끌어올리는 데 도움이 됐습니다. 삼각형 스플래팅과 그 변형들은 직접 모델링한 장면에서 보던 것 같은 깔끔하고 효율적인 메시를 만들어 내지 못합니다 0.
삼각형이 가우시안보다 PSNR이 낮은 문제는 논문에서도 다룹니다. 요약하면 PSNR은 시각적 품질보다 부드러움에 더 높은 점수를 주는데, 가우시안은 아주 부드럽다는 겁니다. PSGR[0]은 처음 봤는데 꽤 괜찮아 보이지만, 삼각형 스플래팅과 상당히 비슷해 보입니다. 가우시안을 삼각형처럼 불투명도가 달라지는 평평한 프리미티브로 납작하게 만드는데, 삼각형 스플래팅 저자들은 자기네 윈도 함수가 삼각형 가장자리로 경계가 정해져서 일부 영역에서 더 나은 디테일을 낸다고 특별히 짚습니다. 그래도 3DGS는 연구가 많이 쌓이면서 조금씩 개선되고 있는데, 삼각형 스플래팅은 후속 연구를 거의 못 봤다는 제 말이 맞다는 증거 같기는 합니다. 연결된 메시를 만들려면 추가 단계가 필요하다고 저자들도 언급하긴 하지만, 적어도 예시 이미지를 보면 삼각형 수프(triangle soup)로만 이루어져 있는데도 표면이 꽤 괜찮아 보입니다.
방금 저자들이 직접 후속 논문을 냈는지 찾아봤는데, 주저자 중 한 명이 희소 지오메트리(sparse geometry)에 관한 논문[1]을 냈고 흥미로워 보입니다. 삼각형 스플래팅의 직접적인 후속작도 두어 편 냈습니다. 연결된 메시를 만들어 내는 Triangle Splatting+[2]와 Mesh splatting[3]입니다. 가우시안 말고 다른 기법도 계속 연구되고 있다니 반갑네요.
[0] https://zju3dv.github.io/pgsr/
[1] https://lessvrong.com/cs/nexels/
[2] https://trianglesplatting2.github.io/trianglesplatting2/
[3] https://meshsplatting.github.io/
아직 가능성은 있어요. 적어도 일부 틈새 분야에서는요. 논문이 그렇게 오래된 것도 아니고요.
1년도 더 지났어요. 이렇게 빨리 돌아가는 분야에서는 꽤 오래된 거죠. 나중에 더 인기를 끌 수도 있겠지만, 지금까지는 전혀 주목받는 걸 못 봤어요. 반면 가우시안 스플랫은 개발과 도입이 점점 더 활발해지고 있고요.
https://arxiv.org/abs/2505.19175
크리스토프 쉰델라(Christoph Schindelar)의 "Kefermarkt Chruch"입니다. https://www.youtube.com/watch?v=nC6Q2wN-vfM
간단한 장비만으로 이 정도 결과라니 장관입니다.
감사합니다. 영상에 링크된 실시간 버전은 더 인상적이네요!
https://superspl.at/scene/c67edb74
SOG가 이런 식으로 쓰이고 있는 줄은 전혀 몰랐는데, 정말 멋지네요! 지금 V3 작업 중인데, 포함했으면 하는 게 있으면 알려 주세요.
https://github.com/playcanvas/splat-transform/issues/362
도노반, 앞으로도 계속 좋은 작업 부탁해요 :)
그러고 보니 몇 달 전에 KISS-GS 기준선을 측정할 때 splat-transform의 .sog 출력에서 아주 이상한 결과가 나왔어요. 프리미티브를 더 추가하면 .sog 곡선의 품질이 왜 떨어지는 걸까요?
첫 번째 그림의 "POPSpa + .sog" 곡선이 그겁니다: https://arxiv.org/html/2608.26948v1
최신 splat-transform으로 다시 측정해서 무슨 일인지 알아보고 싶었는데 계속 못 했네요.
안녕하세요 비란트, 논문 축하드립니다!
보신 문제는 1.7.0에서 해결됐습니다. 색상과 스케일의 코드북을 k-means로 만들고 있었는데, 극단값에서 가끔 잘못된 값이 나왔습니다. 1.7.0에서는 이상치를 처리하는 최적 양자화기로 바꿨습니다. 의외로 제대로 구현하기가 정말 어려웠습니다.
방금 opus한테 검증을 시켰더니 스케일 코드북 생성에서 다른 문제를 또 찾아냈습니다. 지금 고치겠습니다. 만세!
가장 큰 업데이트는 알파 보정(alpha > 1)을 추가한 것입니다. 이게 들어가면 데시메이션을 여러 차례 반복한 뒤에 생기던 틈을 해결할 수 있습니다.
큰 스플랫을 그냥 직접 돌아다니며 즐겨 보고 싶은 분은 여기로 가 보세요: https://www.useblurry.com/shared/fONoiLF-8AiD
스플랫이 5천만 개이고, XGRIDS K2 카메라로 약 1시간 동안 걸어 다니며 촬영한 겁니다.
"오만: 리덕스(Hubris: Redux)"는 제 커리어 전체를 꽤 잘 표현하는 말이네요.
좋았던 순간들만 모아 보면 그렇다는 얘기예요. 기억할 만한 부분들만요.
이 글에서 제가 얻은 건, 저자가 하는 최적화 하나하나가 장면 전체의 역동성을 뒷받침하는 기술을 깎아 먹는다는 점입니다. 여기서 "역동성"은 사물이 서로 상호작용한다는 뜻이에요. 긴 안목에서 보면 해법은 "역동성"을 아주 촘촘하게 기술하는 엔진, 즉 데이터 포맷과 알고리즘을 만들고, 이게 최적화된 스플랫 렌더러에 밀리초 단위로 데이터를 공급하는 구조일 수도 있겠습니다.
가우시안 스플랫도 훌륭한데, 언리얼에 넣으면 더 좋습니다! 게임이나 스포츠 중계에서 스플랫이 쓰이는 걸 보셨나요? 다음은 어디일까요?
가우시안 스플랫은 놀랄 만큼 쉽게 만들 수 있어요: https://superspl.at/scene/82eb1744 (열화상 카메라로 찍어서 적외선 영상도 함께 투영할 수 있었어요) https://superspl.at/scene/f9672a5e
제 경험으로는 그렇게 쉽지 않았어요. 폰 카메라로 찍은 이미지로는 꽤 고생하다가 아이패드 이미지로 갈아탔거든요.
제가 이해한 게 맞다면, 아이패드보다 폰 카메라가 더 좋아서 그런 걸 수도 있어요. 피사계 심도나 대기 렌즈 효과는 사실 원하는 게 아니거든요. 옛날 폰이나 제 FLIR 같은 핀홀 렌즈가 더 잘 맞아요. 흐릿함이 적이니까요.
고맙습니다. 그렇게 해 볼게요.
NFL 중계에 쓰였다는 얘기를 봤던 것 같아요. 확실히 PGA 챔피언십 중계에서는 쓰였고요.
https://x.com/geekwire/status/2110875270337163757
좀 뻔뻔한 홍보인데요, 8월에 저희 최신 3DGS 압축 논문(KISS-GS)의 데모0를 만들었습니다. 표준적인 가우시안 스플래팅 장면을 여러 압축 수준으로 둘러보면서, 0.5MB 같은 아주 낮은 비트레이트에서 무엇이 깨지는지 볼 수 있어요.
페이지를 조금 내리면 뷰어 아래 컨트롤이 열립니다. 저는 속성 토글(불투명도, 스케일, 회전 등)이 스플랫과 SOG 압축이 어떻게 동작하는지 감을 잡는 데 정말 재미있다고 생각해요.
정말 훌륭한 글이네요!
"lives in", "ledger" 같은 거요. 가장 뻔하디뻔한 클로드식 말투네요 :/