1P by GN⁺ | ★ favorite | 댓글 1개
  • CityGaussian(CityGS) 는 3D Gaussian Splatting(3DGS)을 도시 규모 장면으로 확장해, 학습 효율과 실시간 탐색 품질을 함께 겨냥한 ECCV 2024 방법임
  • 대규모 장면을 한 번에 다루기 어렵다는 한계를 분할 정복 학습세부 수준(LoD) 전략으로 나눠 해결함
  • 전역 장면 사전 정보와 적응형 학습 데이터 선택을 활용해 블록별 학습 결과를 더 효율적으로 맞추고 매끄럽게 융합함
  • 융합된 Gaussian primitive를 압축해 여러 세부 수준을 만들고, 렌더링 시 블록 단위로 적절한 세부 수준을 선택·집계함
  • LoD 없이 MatrixCity를 2,500만 개 Gaussian으로 표현하면 A100에서 18 FPS에 그치지만, LoD 적용 CityGS는 평균 36 FPS로 실시간 렌더링을 달성함

대규모 3DGS를 위한 학습·렌더링 구조

  • 3D Gaussian Splatting(3DGS)은 실시간 3D 장면 재구성과 새로운 시점 합성에서 강점을 보였지만, 대규모 장면 학습과 다양한 스케일의 실시간 렌더링은 여전히 부담이 큼
  • CityGaussian은 이 문제를 두 단계로 나눠 다룸
    • 분할 정복 학습: 대규모 장면을 블록 단위로 나눠 효율적으로 학습함
    • LoD 전략: 관찰 스케일에 맞춰 필요한 세부 수준만 사용해 렌더링 속도를 높임
  • 전역 장면 사전 정보와 적응형 학습 데이터 선택이 학습 효율을 높이고, 분리된 장면 조각을 더 자연스럽게 융합하도록 돕음
  • 융합된 Gaussian primitive는 압축 과정을 거쳐 여러 세부 수준으로 구성됨
  • 렌더링 단계에서는 블록별 세부 수준 선택과 집계 전략을 사용해, 여러 스케일에서도 빠른 화면 생성을 가능하게 함

성능과 공개 자료

  • LoD를 적용하지 않으면 MatrixCity 장면이 2,500만 개 Gaussian으로 표현되며, A100 기준 18 FPS로 측정됨
    • 이 속도는 쾌적한 로밍 경험을 제공하기 어렵다고 평가됨
  • LoD를 적용한 CityGS는 매우 다른 스케일에서도 실시간 렌더링이 가능하며, A100에서 평균 36 FPS로 측정됨
  • 대규모 장면 실험에서 CityGS는 최신 수준의 렌더링 품질을 보이고, 다양한 스케일의 대규모 장면에서 일관된 실시간 렌더링을 지원함
  • 공개 자료

댓글과 토론

Hacker News 의견들
  • 영상의 데이터셋 이름이 Matrix city인 걸 보면, 몇 년 전 공개된 Unreal Engine 5 Matrix 데모에서 추출됐을 가능성이 큼
    시점들이 매우 비슷해서 사진 같은 사실감은 있지만 실제 사진에서 온 것은 아닌 듯함
    추가로 찾아보니 맞았음: https://city-super.github.io/matrixcity/

    • Epic이 예전에 사진측량 회사 Quixel을 인수했으니, Matrix city를 만들 때 사진 스캔 애셋 라이브러리를 썼을 가능성이 높음
      재미있게도 그러면 원 글은 실제 물체를 재구성한 것을 다시 재구성하는 셈임
    • The Matrix Awakens 데모의 일부 애셋은 Unreal Engine 마켓플레이스에 별도 팩으로 공개됐음: [1] 지도, [2] 건물·군중·차량
      MatrixCity 지도는 다르지만 Matrix Awakens의 지도와 어느 정도 비슷함. Matrix Awakens 프로젝트의 기술 리드가 쓴 [3] 이 페이지의 설계 분석에서도 확인 가능함
      더 들어가서 [4] GitHub 코드베이스의 MatrixPlugin 섹션을 보면 city-sample 프로젝트를 사용했다고 명시돼 있음
      [1] https://www.unrealengine.com/marketplace/en-US/product/city-...
      [2] https://www.unrealengine.com/marketplace/en-US/learn/city-sa...
      [3] https://quentinmarmier.artstation.com/projects/xYeKNO
      [4] https://github.com/city-super/MatrixCity
    • 게임 엔진 데이터를 쓰면 각 이미지에 대응하는 정확한 카메라 자세를 얻을 수 있음
      그래서 NeRF나 가우시안 스플래팅 학습이 조금 쉬워짐. 카메라 자세 최적화 오차가 없기 때문임
      초기 NeRF 논문들이 Blender로 렌더링한 유명한 노란 Lego 굴착기를 쓴 이유도 같음
    • 완전히 모델링된 Unreal Engine 장면이 있다면, 스플랫을 만들 때 학습 단계 없이 생성할 수는 없을까 궁금함
      Matrix city 같은 장면이라면 데이터를 재현하려고 긴 시간을 들여 학습할 필요가 없어 보임
    • 모든 영상이 Matrix City는 아니고, 일부는 실제 장소
  • 주말에 Google Maps 3D 타일 메시와 가우시안 스플랫을 붙여봤는데, 완전히 같은 건 아니지만 효과가 꽤 비슷하고 유용했음
    코드가 링크된 예시 1: https://twitter.com/kfarr/status/1773934700878561396
    예시 2: https://twitter.com/3dstreetapp/status/1775203540442697782

    • 정말 멋진데 코드가 있는 GitHub가 있는지 궁금함
      첫 번째 링크에서 개발자 도구에 오류가 뜸
      Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>;)...
    • Aframe과 OSM 건물 외곽선으로 이것저것 해보고 있었는데, 이 방식이 훨씬 좋아 보임
      aframe-loader-3dtiles-component를 살펴볼 예정임
    • xitter를 쓰지 않는 사람들을 위해 여기에도 코드 저장소 링크를 올려줄 수 있으면 좋겠음
  • “평균 속도는 36 FPS(A100에서 테스트)”라니, $8k짜리 GPU가 있으면 실시간이라는 뜻인 듯함

    • 오래된 SIGGRAPH식 실시간
      그래픽스 논문이 실시간 속도를 달성했다고 하면, 정말 실시간인지 아니면 “돈으로 살 수 있는 가장 비싼 하드웨어에서 640x480 20fps”인지 항상 다시 확인해야 함
      기준을 충분히 낮추면 뭐든 실시간이 될 수 있음
    • LOD와 블록을 쓰는 첫 3DGS로 보이니 최적화 여지는 있을 수 있음
      가상 프로덕션 같은 용도에는 쓸모가 생길 수 있지만, 모바일용은 아닐 듯함
    • 예전 GPU 벤치마크도 처음 나왔을 때는 10fps로 돌다가 시간이 지나면서 달라졌던 게 떠오름
      https://www.techpowerup.com/forums/attachments/all-cards-png...
    • 안타깝게도 많은 3DGS/NeRF 연구가 이런 식임
      10년 된 노트북에서도, 심지어 GPU 없이도 돌릴 수 있는 걸 원하면 https://github.com/pierotofy/OpenSplat를 보길 바람. 내가 만든 것임
    • 다음 세대 소비자 GPU인 5090은 A100보다 두 배 빠르면서 $8k는 아닐 거라고 봄
      그래서 넘을 수 없는 문제처럼 보이진 않음
  • 3D 가우시안 스플래팅이 막다른 길이 아니라고 누가 설득해줄 수 있을까
    렌더링은 한 자릿수 배율로 너무 느리고, 데이터도 한 자릿수 배율로 너무 큼. 래스터화와 광선 추적의 대립을 다시 보는 느낌임
    래스터화는 항상 광선 추적보다 빠를 것이고, 광선 추적이 10배 빨라지면 래스터화도 10배 빨라질 것임
    가우시안 점 구름에서 전통적인 지오메트리와 재질을 생성하는 건 흥미로울 수 있음. 하지만 사진측량은 이미 꽤 오래전부터 있었음
    거대한 도시를 스플랫으로 실시간 렌더링하려는 건 “올바른 방향”처럼 느껴지지 않음
    멋지고 재미있고 흥미롭긴 하지만 실제로 유용해질지 잘 모르겠음. 전문가가 아니라서 진지하게 묻는 것임

    • 가능성은 엄청 많음. Unreal Engine에서 쓰는 특허 기술들과 비슷하지만 다른 접근임
      현재 연구 대부분은 성능에 초점을 두지 않고 있고, 압축을 포함한 통합 포맷 합의조차 아직 없음
      최적화 가능성은 매우 분명하고, 여러 기기에 맞게 조정하기도 쉬움. 점 구름 LOD나 메시 컬링과 비슷함
      스플랫 성능은 뷰어의 일시적 경쟁 우위가 될 수 있지만, 동영상 압축 해제나 다른 3D 표준이 오픈소스로 보급된 것처럼 몇 년 안에 대부분의 기기에서 고품질·고프레임 스플랫 보기가 기본 조건이 될 가능성이 큼
      그다음 질문은 이걸 어디에 쓸 것이냐임
    • 한 자릿수 배율로 느린 건 아님. 지금도 Unreal이나 Unity에서 200~400fps는 쉽게 나옴
      브라우저에서 100fps 이상: https://current-exhibition.com/laboratorio31/
      900fps: https://m-niemeyer.github.io/radsplat/
      전통적인 엔진에는 30년치 연구개발이 쌓여 있으니, 도구와 최적화가 따라잡는 데 시간이 걸릴 것임
      다만 논문들이 어디서 나오는지 보면 Apple과 Meta가 많고, 두 회사가 밀고 있는 메타버스/공간 컴퓨팅 시대를 구동할 기술로 보임
      iPhone 영상 같은 매우 낮은 제작비 콘텐츠를 3D 환경으로 옮길 수 있는 능력은 전통적 방식의 많은 연구개발을 밀어낼 것임
    • 사진측량은 반사 표면 같은 특정 재질에서 어려움을 겪음
      얇은 구조물이나 머리카락 같은 미세한 디테일을 캡처하기도 매우 어려움. 3DGS는 그런 부분에 강함
      현재 약점을 개선하는 연구도 진행 중이고, 전통적인 그래픽스 파이프라인에서 쓸 수 있는 메시 추출 방법도 포함됨
    • 실제 세계를 사실적인 3D로 재구성하는 현실감 면에서는 현재 견줄 만한 것이 거의 없음
      사진측량은 표면 데이터가 깔끔할 때만 잘 작동하지만, 가우시안 스플랫은 털, 식생, 입자, 거친 표면 같은 반(半)체적 데이터에 강함
      광택·반사 표면, 세분화 표면 성질이 강한 체적, 시점 의존성이 큰 재질에도 잘 맞음
    • 무엇에 대한 막다른 길인지가 중요함
      완전한 3D 사진에 해당하는 용도라면 꽤 멋지고, 충분히 정당한 활용 사례임
      3D 게임 엔진용이라면 기본 프리미티브를 게임 엔진이 요구하는 방식대로 역동적으로 다루기 어렵다고 봄. 시도는 계속되겠지만, 이 관점에서 가우시안은 유용한 중간 표현이라기보다 최종 렌더 포맷에 가까워 보임
      엔진에서 실용적으로 쓰려면 그 사이를 메울 다른 무언가가 발명돼야 하고, 아직 질문이 많이 남아 있음
      다른 용도는 알 수 없지만, 세상이 전부 3D 게임과 시각효과만으로 이뤄진 건 아님
  • Gauss 이름이 붙은 것들이 워낙 많고, Gaussian splatting처럼 새로도 계속 붙는 걸 보면 Gauss가 얼마나 많은 분야에 영향을 줬는지 새삼 재미있음
    직접 발명한 것은 아니지만, 그 수학에는 크게 기여한 셈임

  • 어떤 라이선스로 공개될지 기대됨
    이걸 쓰는 오픈소스 게임을 보고 싶음

    • 성능과 별개로, 게임에서 실제로 쓰려면 장면을 동적으로 만드는 일반화된 방법부터 찾아야 함
      삼각형 메시의 대안으로 유망해 보이다가 효율적으로 애니메이션할 방법이 없다는 걸 깨닫고 사라진 사례가 역사에 많음
    • 이건 기본적으로 이상한 모양의 점들로 이뤄진 매우 큰 점 구름이라 정말 어려움
      점 구름 안의 객체에는 “의자, 테이블, 사람” 같은 내재 메타데이터가 없어서 어떤 상호작용도 매우 힘듦
      불가능한 건 아니지만 지금은 실용적이지 않음
      게다가 실시간 렌더링에 그리 최적화돼 있지도 않음. 많은 점이 가지치기됐더라도, 낮은 해상도의 메시를 쓰는 편이 훨씬 효율적임
  • 이건 Cities: Skylines 같은 것보다 크게 좋아 보이지 않음
    줌인이나 줌아웃도 없고 항상 매우 제한된 프레임만 보여주는데, 내가 뭔가 놓치고 있는 걸까?

    • 다른 답글들은 실제로 생각하거나 조사하지 않고 답한 듯함
      논문은 MatrixCity를 반복해서 참조하고, 위의 다른 사람이 찾은 https://city-super.github.io/matrixcity/완전 합성 데이터라고 밝히고 있음
      내가 이해하기로는 Unreal Engine에서 추출된 것임
    • 이건 게임 렌더링이 아니라 3D 재구성
    • 사진에서 렌더링한 것이라고 생각함
    • 이건 게임 엔진이 아니라, 실제 사진을 가우시안 3D 시점으로 변환한 것임
  • pygame으로 배우는 중인데, 게임에 모션 블러를 어떻게 넣는지 궁금함
    예를 들어 pygame으로 Mario를 만들 때 Mario가 점프하면 흐릿하게 보이게 하고 싶음
    9개 픽셀의 평균을 내서 흐릿한 Mario 버전을 만들 수는 있겠지만, 다른 게임에서도 보통 그렇게 하는지 모르겠음
    많은 게임은 모션 블러 없이 매우 선명하기도 해서 실제로 쓰는지 궁금함
    영화에서는 꽤 큰 요소이고, 영화적 모션 블러를 얻으려면 25fps로 촬영해야 한다는 점도 떠오름

    • 객체의 모션 벡터를 다른 렌더 텍스처에 렌더링하면 됨
      즉 각 객체의 속도를 계산해서 색상으로 렌더링하고, 이후 후처리 단계에서 블러 효과의 세기와 방향을 정하는 데 사용함
      카메라 기준의 움직임이 필요할 수도 있음. Mario라면 아마 아닐 수 있지만, FPS에서는 카메라가 앞으로 움직일 때 화면 가장자리가 흐려지길 원할 것임
  • 관련 자료: https://city-super.github.io/octree-gs/

  • 더 큰 장면을 3D Gaussians로 렌더링하는 꽤 고급 접근이라, 코드가 나오면 빨리 테스트해보고 싶음