3D Gaussian Splatting

FSA·2024년 6월 21일
0

vision

목록 보기
14/25
post-custom-banner

1. 들어가기 전에: GPT answer

  • Gaussian Splatting은 3D 장면을 2D 이미지로 렌더링할 때 사용
    • 이 기법은 각 3D 포인트를 2D 이미지 평면에 가우시안 분포로 변환하여 표현하는 방식
  • 이를 통해 부드럽고 자연스러운 이미지를 생성할 수 있음

1.2. 기본 개념

  1. 3D 포인트의 표현:
    • Gaussian Splatting에서는 3D 공간의 각 포인트를 가우시안 분포(Gaussian Distribution)로 표현
    • 3D 장면에서 각 포인트는 위치, 색상, 가우시안 분포의 크기와 형태를 정의하는 파라미터(예: 평균, 분산)로 구성
    • 이는 포인트를 단일 픽셀로 표현하는 대신, 분포로 나타내어 부드럽고 연속적인 표현을 가능하게
  2. 스플랫(Splat):
    • "스플랫"은 분포를 이미지 평면에 투영하는 과정을 의미
    • 즉, 3D 포인트의 가우시안 분포를 2D 이미지 평면에 뿌려서(splatting) 나타내는 것
    • 이 과정에서 분포들이 중첩될 수 있으며, 중첩된 부분은 합성되어 최종 이미지가 생성됩니다.
  3. 렌더링:
    • 투영된 가우시안 분포들을 합성하여 최종 이미지를 렌더링합니다. 이 과정에서 부드러운 블렌딩과 안티앨리어싱 효과가 자연스럽게 적용됩니다.

2. 들어가기 전에: Nerf

  • NeRF(Neural Radiance Fields)는 3D 신(scene)을 복원하고 렌더링하기 위한 최신 딥러닝 기술
  • NeRF는 신경망을 사용하여 복잡한 3D 장면의 고해상도 렌더링을 생성할 수 있으며, 특히 사진처럼 사실적인 이미지를 생성하는 데 뛰어납니다.

2.1. 기본 개념

    1. 신경망 기반 3D 표현:
    • NeRF는 신경망(딥러닝 모델)을 사용하여
      • input: 다수의 2D 이미지 (각 이미지에는 카메라 위치와 방향 정보가 포함)
      • 과정
        • 볼륨 샘플링:
          • 3D 공간 내의 특정 위치와 방향에 대해 샘플링을 수행
          • 예를 들어, 광선이 장면을 통과할 때의 여러 지점을 샘플링
          • 각 샘플링 지점에서 신경망을 통해 색상과 밀도를 예측
      • output: 3D 공간의 "특정 위치와 방향에 대한 빛의" 방사율(radiance, 밀도)과 색상(color)을 표현
      • 방사율(radiance)
        • 특정 방향에서 단위 면적 당 단위 입체각으로 방출되거나 반사되는 빛의 양을 의미
        • 방사율은 3D 장면에서 빛의 분포와 강도를 설명하는 데 사용되며, 물체 표면에서 관찰되는 밝기와 색상을 결정하는 데 중요한 역할
    1. 볼륨 렌더링(Volume Rendering)을 통한 합성 이미지 생성:
    • 샘플링된 데이터를 사용하여 합성 이미지를 생성
      • 이 과정은 볼륨 렌더링 방정식을 사용하여 수행
    • 각 광선의 경로를 따라 샘플링된 지점들의 색상과 밀도를 조합하여 최종 이미지를 생성
    • NeRF는 3D 장면을 볼륨 렌더링 기법을 사용하여 표현
      • 이는 장면의 각 지점에서 빛이 어떻게 방출되고 흡수되는지를 모델링

2.2. 예시

  • 예를 들어, 한 방의 여러 각도에서 찍은 사진들을 입력으로 받아, NeRF는 신경망을 통해 이 방의 3D 모델을 학습
  • 이후, NeRF는 이 3D 모델을 기반으로 새로운 각도에서 본 방의 이미지를 생성할 수 있음
  • 이 과정에서 실제 사진처럼 사실적인 이미지가 생성

3. Gaussian Splatting

  • 3D 장면을 2D 이미지로 렌더링할 때 사용

3.1. 3d gaussian

  • 각 점의 위치에 대한 확률 분포 PDF
  • Gaussian Splatting
    • 각 포인트를 3D Gaussian으로 변환하여, 각 포인트가 중심이 되는 가우시안 분포를 가지게 합니다.
    • 이렇게 하면, 각 포인트가 단일한 점이 아닌, 그 주위의 공간에 걸쳐 부드럽게 분포된 형태로 표현됩니다.

3.2. 3D 모델을 표현하는 방법들

3.2.1. discrete scene

  • 가장 일반적인 방법은 Mesh와 Point입니다.
  • GPU/CUDA기반의 rasterization(=3D를 2D 이미지화)에 최적화 되어 있습니다.

3.2.2. continuous scene

  • 최근 Neural Radiance Fields (NeRF) 기법들은 3D 장면(Scene)을 최적화하기 좋은 연속적인 방식으로 표현하고 있습니다.
  • NeRF의 접근 방식과 그로 인해 발생하는 문제를 이해하기 쉽게 설명해 보겠습니다.

3.2.2.1. NeRF의 기법

    1. 연속적인 장면 표현 (Continuous Scene Representation):
    • 기존 방법: 메쉬(Mesh)나 포인트 클라우드(Point Cloud)와 같은 전통적인 3D 모델 표현 방식은 이산적(discrete)인 데이터를 사용합니다.
    • NeRF:
      • NeRF는 장면을 신경망(Neural Network)을 사용하여 연속적인 함수로 표현
      • 이 함수는 3D 공간의 어떤 점에서도 해당 점의 색상과 밀도를 예측할 수 있습니다.
      • 결과적으로, NeRF는 장면을 연속적인(continuous) 데이터로 다룹니다.
    1. 장면 최적화:
    • NeRF는 다양한 각도에서 촬영된 2D 이미지를 사용하여 장면의 3D 표현을 학습
    • 학습 과정에서, 신경망은 주어진 3D 좌표와 방향에 대해 색상과 밀도를 출력하도록 최적화됨

3.2.3. 3D gaussian

  • 이 논문에서 제안하는 3D 모델을 표현하는 방법

3.3. 여러 3D 모델 -> rasterization

3.3.1. rasterization이란?

  • 래스터라이제이션(Rasterization)은 3D 모델을 2D 이미지로 변환하는 과정
    • 주로 GPU를 사용하여 효율적으로 수행
  • 래스터라이제이션 과정은 다음 단계로 구성됩니다:
      1. 모델 변환: 3D 모델의 정점을 여러 좌표계로 변환합니다.
      1. 클리핑: 가시 영역 밖의 정점을 제거합니다.
      1. 뷰포트 변환: 정규화된 좌표를 실제 화면의 픽셀 좌표로 변환
      1. 래스터화: 3D 모델의 삼각형을 화면의 픽셀 그리드에 맞게 분할
      1. 프래그먼트 처리: 각 픽셀의 최종 색상과 속성을 계산
      1. 출력: 최종 이미지를 화면에 렌더링

3.3.1.1. 모델 변환 (Model Transformation)

  • 3D 모델의 각 점(정점, vertices)을 월드 좌표계에서 화면 좌표계로 변환하는 과정
  • 각 정점의 위치는 여러 변환 행렬을 거치며 변환됩니다:
  • 모델 변환 (Model Transformation):
    • 로컬 좌표계를 월드 좌표계로 변환합니다.
  • 뷰 변환 (View Transformation):
    • 월드 좌표계를 뷰 좌표계(카메라의 위치와 방향을 기준으로 한 좌표계)로 변환합니다.
  • 투영 변환 (Projection Transformation):
    • 뷰 좌표계를 클립 좌표계(화면의 가시 범위 내로 정규화된 좌표계)로 변환합니다.
    • 이때 원근 투영(Perspective Projection) 또는 정투영(Orthographic Projection)을 사용할 수 있습니다.

3.3.1.2. 클리핑 (Clipping)

  • 가시 부피(프러스텀, Frustum) 밖에 있는 정점을 제거하는 과정
3.3.1.3. 과정
  • 클립 좌표계에서, 화면의 가시 영역(near, far, left, right, top, bottom)에 속하지 않는 정점들을 제거
  • 클리핑은 각 삼각형의 정점에 대해 수행되며, 필요한 경우 삼각형을 나누어 가시 영역에 맞게 조정

3.3.1.3. 뷰포트 변환 (Viewport Transformation)

  • 클립 좌표계의 정규화된 장치 좌표(Normalized Device Coordinates, NDC)를 실제 화면의 픽셀 좌표로 변환하는 과정
  • 과정
    • NDC는 -1에서 1 사이의 값으로 표현됩니다.
    • 뷰포트 변환은 이 정규화된 좌표를 실제 화면의 해상도에 맞게 변환하여, 최종적으로 픽셀 단위의 화면 좌표를 생성

3.3.1.4. 래스터화 (Rasterization)

  • 3D 모델의 정점을 화면의 각 픽셀에 대응시키는 과정
  • 과정
    • 각 삼각형을 화면의 픽셀 그리드에 맞게 분할
    • 삼각형 내부의 각 픽셀에 대해 색상, 깊이 등의 값을 계산

3.3.1.5. 프래그먼트 처리 (Fragment Processing)

  • 각 픽셀에 대해 최종 색상과 기타 속성을 계산하는 과정
과정
  • 프래그먼트 셰이더(Fragment Shader): 각 픽셀에 대한 색상, 텍스처, 라이팅 효과 등을 계산하는 프로그램
  • 깊이 테스트(Depth Test): 각 프래그먼트의 깊이를 비교하여, 가장 가까운 프래그먼트만 화면에 표시합니다. 이는 Z-버퍼(Z-buffer)를 사용하여 수행
  • 블렌딩(Blending):
    • 투명한 객체가 있는 경우, 여러 프래그먼트의 색상을 혼합하여 최종 색상을 결정
알파 블렌딩
  • 픽셀의 투명도(Transparency)를 처리하는 기술
  • 이 기법은 주로 여러 레이어의 이미지를 합성하거나, 투명한 객체를 렌더링할 때 사용
  • 알파 블렌딩은 각 픽셀의 색상과 알파 값(Alpha Value)을 사용하여 최종 색상을 계산
  • 알파 값:
    • 각 픽셀의 투명도를 나타내는 값
    • 보통 0에서 1 사이의 범위를 가지며, 0은 완전히 투명함을, 1은 완전히 불투명함을 의미
    • 예:
      • RGBA (Red, Green, Blue, Alpha) 색상 모델에서,
      • 알파 값: 픽셀의 투명도를 정의
  • 알파 블렌딩은 두 픽셀을 합성할 때 사용
    • 이때 두 픽셀은 전경(Foreground) 픽셀과 배경(Background) 픽셀로 나뉘며,
    • 각 픽셀의 색상과 알파 값을 사용하여 최종 색상을 계산
  1. 전경 및 배경 픽셀의 색상 및 알파 값 가져오기:
  • 전경 픽셀: 렌더링 중인 객체의 픽셀 색상과 알파 값
  • 배경 픽셀: 이미 화면에 렌더링된 픽셀의 색상과 알파 값
  • 활용 사례
  1. 투명한 객체 렌더링:
    • 유리, 물, 안경 등 투명한 객체를 사실적으로 렌더링하기 위해 알파 블렌딩을 사용
  2. 레이어 합성:
    • 여러 레이어의 이미지를 하나로 합성할 때, 각 레이어의 투명도를 고려하여 자연스러운 이미지를 생성
  3. 반투명 효과:
    • UI 요소나 게임 그래픽에서 반투명 효과를 사용하여, 배경을 살짝 보이게 하면서 전경 요소를 강조
  • 알파 블렌딩은 이러한 다양한 그래픽 효과를 가능하게 하며, 이를 통해 현실감 있고 복잡한 장면을 효과적으로 렌더링할 수 있음

3.3.1.6. 출력 (Output)

  • 최종적으로 각 픽셀에 대해 계산된 색상을 화면에 렌더링하는 과정
  • 모든 프래그먼트 처리가 완료된 후, 각 픽셀의 최종 색상이 프레임 버퍼(Frame Buffer)에 저장
  • 프레임 버퍼의 내용이 화면에 표시되어 최종 이미지를 생성

3.3.2. continuous scene 에 대한 rasterization

    1. 확률적 샘플링:
    • 기존 방법:
      • 전통적인 메쉬나 포인트 클라우드에서는 명확한 지점들이 있기 때문에, 해당 지점들을 기반으로 이미지를 렌더링
    • NeRF:
      • NeRF는 연속적인 함수로 장면을 표현하기 때문에, 3D 공간의 많은 지점을 샘플링하여 이 샘플들을 기반으로 이미지를 생성
      • 이 샘플링 과정이 확률적(stochastic)으로 이루어지기 때문에, 매번 약간씩 다른 지점들이 샘플링될 수 있음
    1. 연산량 증가:
    • 확률적 샘플링은 많은 지점을 샘플링하고 각 지점에 대해 신경망을 통과시키는 많은 연산이 필요
    • 예를 들어, 한 장의 이미지를 렌더링할 때 수천에서 수백만 개의 샘플을 처리해야 힘
  1. 노이즈 형성:
  • 확률적 샘플링의 특성상, 샘플링 과정에서 일정한 노이즈가 발생할 수 있습니다.
    • 이는 최종 렌더링된 이미지에 불규칙한 잡음처럼 나타날 수 있습니다.
  • 샘플링 지점들이 랜덤하게 선택되므로, 동일한 장면을 여러 번 렌더링할 때 각 렌더링 결과가 조금씩 다를 수 있습니다. 이는 특히 조명이나 색상에서 미세한 차이로 나타날 수 있습니다.

3.4. 3D gaussian 으로 3d 모델을 표현하는 이유

3.4.1. 3D Gaussian 방법의 소개

  • 논문에서는 3D 모델을 표현하기 위해, 3D Gaussian이라는 새로운 표현 방법을 제시
  1. 미분가능한 볼륨 표현 (Differentiable Volumetric Representation):
  • 3D Gaussian은 연속적인 함수로 표현되며, 이 함수는 미분가능하다는 특징
  • 이는 최적화 과정에서 유리
  • 즉, 기계 학습이나 신경망 훈련 시, 그래디언트(Gradient)를 계산하여 모델을 학습할 수 있다는 의미
  1. 명시적 표현 (Explicit Representation):
  • 3D Gaussian은 3d model을 명시적으로 표현할 수 있음
  • 이는 신경망을 통해 간접적으로 표현하는 방식과 대비
    • NeRF와 같은 기법은 신경망 내부의 복잡한 구조에 의해 암묵적으로 표현(Implicit Representation).
  • 반면, 3D Gaussian은 직접적으로 데이터 구조를 통해 표현
  1. 효율적인 2D 투영과 알파 블렌딩 (Efficient 2D Projection and Alpha Blending):
  • 3D Gaussian 방법은 2D 이미지로 투영하고, 알파 블렌딩(투명도 계산)을 효율적으로 수행할 수 있습니다.
  • 이는 기존 래스터라이제이션 과정의 일부 단계로, 빠른 렌더링을 가능하게 합니다.

3.4.2. 기존 NeRF와 3D Gaussian Splatting의 비교

  • 아래 과정들은, 3d 데이터들을 -> 2d image로 투사하는 과정을 설명하는 것 같다.

3.4.2.1. 기존 NeRF 방식

  1. 레이 투사 (Ray Casting):
  • 각 이미지의 픽셀마다 광선(ray)을 투사
  • 즉, 화면의 각 픽셀에서 광선을 쏘아 3D 공간의 여러 점을 샘플링
  1. 샘플링된 점의 색상과 밀도 계산:
  • 각 샘플링된 점에서 색상(color)과 볼륨 밀도(volume density)를 계산
  • 이 계산은 신경망을 통해 이루어짐
  1. 합산하여 이미지 렌더링:
  • 광선 위의 모든 샘플링된 점들의 색상과 밀도를 합산하여 최종 이미지를 렌더링
  • 이 과정은 많은 연산을 필요로 합니다.

3.4.2.2. 3D Gaussian Splatting 방식

  1. 타일 분할:
    • 이미지를 14x14 픽셀로 구성된 작은 타일(Tile)로 나눕니다.
    • 이렇게 하면 전체 이미지를 작은 구역으로 나누어 처리할 수 있습니다.
  2. 깊이 순서로 정렬:
    • 각 타일 내의 3D Gaussian들을 깊이(Depth) 순서로 정렬
    • 이는 가장 앞에 있는 객체부터 뒤에 있는 객체 순으로 정렬하는 것
  3. 알파 블렌딩:
    • 정렬된 순서에 따라, 앞에서부터 뒤로 순차적으로 알파 블렌딩을 수행하여 이미지를 렌더링
    • 알파 블렌딩은 각 객체의 투명도를 고려하여 색상을 합산하는 과정

3.4.3. 효율성 비교

  • 기존 NeRF 방식:
    • 각 픽셀마다 많은 점을 샘플링하고, 각 점에 대해 복잡한 계산을 수행해야 하므로 연산량이 많음
  • 3D Gaussian Splatting 방식:
    • 타일로 분할하고, 각 타일 내에서 Gaussian을 정렬하여 알파 블렌딩을 수행하므로, 필요한 연산량이 상대적으로 적음

3.4.4. 요약

  • 3D Gaussian 방법:
    • 미분가능하고 명시적으로 표현되며,
    • 효율적인 2D 투영과 알파 블렌딩을 통해 빠른 렌더링이 가능
  • 기존 NeRF:
    • 각 픽셀마다 많은 샘플링과 계산이 필요하여 연산량이 많고, 노이즈가 발생할 수 있음
  • 3D Gaussian Splatting:
    • 타일로 나누어 처리하고,
    • 알파 블렌딩을 통해 효율적으로 렌더링하여 연산량이 적고,
    • 빠르게 이미지를 생성할 수 있음

profile
모든 의사 결정 과정을 지나칠 정도로 모두 기록하고, 나중에 스스로 피드백 하는 것
post-custom-banner

0개의 댓글