가우시안 스플래팅 (Gaussian Splatting): 3D 장면을 표현하는 새로운 패러다임

안녕하세요! 오늘은 최근 컴퓨터 그래픽스와 3D 비주얼라이제이션(시각화) 분야에서 뜨거운 관심을 받고 있는 ‘Gaussian Splatting(가우시안 스플래팅)’이라는 기술을 소개해보려고 합니다. 처음 들어보면 조금 낯설고, 심지어 어렵게 들릴 수도 있지만, 걱정하지 마세요! “3D 장면을 작은 구름(블롭)들의 집합으로 표현한다”는 아주 직관적인 아이디어를 바탕으로 차근차근 풀어가보겠습니다.

1. 왜 Gaussian Splatting이 등장했을까?

기존의 3D 장면 표현 방식에는 다양한 기술들이 있었어요. 예를 들어, 전통적으로 3D 오브젝트는 '메시(mesh)'라는 다각형(주로 삼각형)들의 집합으로 표현되었습니다. 하지만 다음과 같은 문제들이 있었습니다:

  • 데이터 양 증가: 고해상도의 3D 모델을 위해서는 어마어마하게 많은 폴리곤(삼각형)이 필요했습니다.
  • 복잡한 파이프라인: 정확한 텍스처 매핑, 조명 계산, 섀도우 처리 등 다양한 후처리 과정이 필요했죠.
  • 느린 렌더링 속도: 특히 실시간 렌더링이나 VR/AR 환경에서 모든 것을 매끄럽게 표현하기가 점점 어려워졌습니다.

이런 상황 속에서, 더 단순하면서도 효율적인 3D 표현 방법에 대한 요구가 커졌고, 그 대안 중 하나로 ‘Gaussian Splatting’이 등장하게 된 겁니다. 최근 딥러닝과 뉴럴 렌더링(Neural Rendering) 분야의 발전과 함께, 단순히 "점"을 이용한 표현이 아니라 점 주변에 가우시안 형태의 블롭(구름)을 할당하는 방식으로 더 부드럽고 자연스러운 3D 장면 표현이 가능해졌습니다. 그리고 이 방법은 렌더링 속도가 빠르고, 구현 난이도가 낮으며, 메모리 효율성도 좋기 때문에 점점 많은 곳에서 주목받고 있습니다.

2. Gaussian Splatting이란 무엇인가?

Gaussian Splatting(가우시안 스플래팅)을 한 마디로 정의하면, 3D 장면을 수많은 '가우시안 구름(Gaussian blob)'으로 표현하는 방식입니다. 여기서 '가우시안 구름'이라고 하면 어려워 보이지만, 쉽게 말해 3D 공간 상의 한 점을 중심으로 부드럽게 퍼져있는 구형(또는 타원형) 안개 같은 것이라고 생각하시면 돼요.

2D 상에서 이런 “봉우리가 부드럽게 퍼져있는 모양”이 3D 상에서도 비슷하게 적용됩니다. 즉, 3D 공간 내 한 점에 가우시안 형태를 씌워놓은 뒤, 이것들을 2D 화면으로 '투영'하는 식으로 이미지를 만들어내는 것이죠.

3. 'Splatting'이라는 이름의 의미

'Splatting'은 영어로 '툭툭 튀기는', '물감을 흩뿌리는' 느낌을 갖는 단어입니다. 마치 캔버스 위에 물감을 흩뿌리듯, 3D 공간에 존재하는 가우시안 블롭들을 2D 화면에 쭉- 뿌려서(투영해서) 장면을 표현한다는 이미지에서 이 이름이 나왔습니다. 닌텐도 게임 '스플래툰'을 떠올리시면, 잉크를 여기저기 뿌리면서 색을 칠하는 느낌과 비슷하다고 볼 수 있겠네요.

4. Gaussian Splatting의 기본 원리

대략적인 과정은 다음과 같습니다.

  1. 3D 점 추출:
    여러 장의 사진이나 센서 데이터(예: LiDAR, 깊이 카메라)를 이용하여 3D 공간상의 점들을 얻어냅니다. 이 단계에서는 'Structure from Motion (SfM)' 같은 기법이 자주 쓰입니다. SfM은 서로 다른 시점에서 찍은 2D 이미지들을 가지고 카메라의 위치와 3D 점들의 위치를 추정하는 기술이에요.
  2. 가우시안 블롭 생성:
    얻어진 3D 점들 각각에 대해 가우시안 형태의 블롭(구름)을 할당합니다. 각 블롭은 위치(중심점), 크기(분산), 모양(등방성 혹은 이방성), 그리고 색상 정보를 가질 수 있습니다.
  3. 2D 투영(Splatting):
    이렇게 3D 공간에 떠 있는 수많은 가우시안 블롭들을 2D 화면으로 ‘뿌려냅니다’. 블롭이 겹치면서 부드러운 색감과 형태가 만들어집니다.
  4. 최적화(Refinement):
    초기 단계에서 만들어진 이미지와 실제 촬영된 원본 이미지 사이의 차이를 줄이기 위해 블롭들의 크기, 색상, 위치 등을 점진적으로 조정합니다. 이는 결국 더 사실적인 3D 장면 표현을 가능하게 합니다.

5. Gaussian Splatting의 장점

  • 경량화: 복잡한 장면을 메시 대신 점과 가우시안 형태로 표현하므로, 데이터가 상대적으로 가벼울 수 있습니다.
  • 렌더링 속도: 메시 기반 렌더링 대비 빠른 렌더링이 가능하며, 실시간성도 어느 정도 확보할 수 있어 VR, AR 환경에서 주목받고 있습니다.
  • 부드러움: 점 하나하나를 가우시안 분포로 표현하기 때문에, 딱딱한 폴리곤 느낌이 아니라 안개처럼 부드럽고 자연스러운 표현이 가능합니다.

6. 어디에 활용될까?

  • 비디오 게임 및 실시간 그래픽: 게임 엔진에서 복잡한 장면을 빠르게 렌더링하기 위해 사용할 수 있습니다.
  • VR/AR: 실감 나는 가상 세계를 구현하는데 유용합니다.
  • 영화 특수효과: 고품질의 VFX 장면을 더 효율적으로 제작할 수 있습니다.
  • 도시·건축 시각화: 대규모 3D 도시나 건축물 모델을 경량화해 웹 상에서 빠르게 보여줄 때도 활용될 수 있습니다.

7. 더 배우고 싶다면?

Gaussian Splatting은 아직 활발히 연구되고 있는 분야로, 최신 논문과 코드 레포지토리를 참고하는 것이 좋습니다. 뉴럴 렌더링(Neural Rendering), 뉴럴 라디언스 필드(NeRF), SfM, MVS(Multi-View Stereo) 등의 개념과 함께 공부하면 더 깊게 이해할 수 있어요.

8. 파이썬으로 간단히 실험해보기

아래는 완전한 구현은 아니지만, 2D 상에서 점을 가우시안 형태로 표현하고 이를 합성하는 간단한 파이썬 코드 예시입니다. 실제 3D Gaussian Splatting은 더 복잡한 최적화와 3D-2D 프로젝션 과정이 필요하지만, 개념을 맛보기로 느껴보세요.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal

# 이미지 해상도
width, height = 200, 200

# 무작위로 2D 점 10개 생성
num_points = 10
points = np.random.rand(num_points, 2) * [width, height]

# 각 점 주변에 가우시안 분포를 생성하기 위한 공분산 행렬
# 여기서는 단순히 동일한 공분산 사용
cov = [[20, 0],
       [0, 20]]

# 배경 이미지 초기화 (검은색)
image = np.zeros((height, width))

# 각 점마다 가우시안 값을 image에 더하기
x = np.linspace(0, width-1, width)
y = np.linspace(0, height-1, height)
X, Y = np.meshgrid(x, y)
pos = np.dstack((X, Y))

for px, py in points:
    rv = multivariate_normal([px, py], cov)
    z = rv.pdf(pos)
    image += z

# 값 정규화 (0~1 범위)
image = image / np.max(image)

plt.imshow(image, cmap='hot', origin='lower')
plt.scatter(points[:,0], points[:,1], c='blue', marker='x')
plt.title("2D Gaussian Splatting Example")
plt.show()

위 코드를 실행해보시면, 2D 평면에 찍힌 점들이 가우시안 형태로 퍼져나가며 서로 겹치는 부드러운 패턴을 볼 수 있습니다. 이 개념을 3D로 확장하고, 시점 변환(3D→2D 투영)과 색상, 깊이 정보 등을 함께 최적화하면, 그것이 곧 Gaussian Splatting의 핵심 원리입니다.

마치며

Gaussian Splatting은 3D 장면 표현의 새로운 패러다임을 제시하는 기술입니다. 복잡한 메시를 다루던 기존의 방식에서 벗어나, 수많은 가우시안 블롭을 이용해 더 부드럽고 효율적인 장면 표현을 가능하게 합니다. 최근 VR, AR, 게임, 영화 제작 등 다양한 분야에서 관심을 받고 있으며, 뉴럴 렌더링과 결합되면서 미래지향적인 3D 그래픽스 렌더링 기법으로 주목받고 있습니다.

처음엔 낯설게 보일 수 있지만, 기본적인 아이디어는 간단합니다: 3D를 작은 구름들로 표현하고, 이를 2D로 뿌려낸 뒤, 차이를 최소화하는 방향으로 조정하는 것. 앞으로 더 깊은 수학적 내용이나 뉴럴 렌더링 분야를 공부한다면, 훨씬 더 재미있고 발전된 Gaussian Splatting 기법을 만나게 될 거예요.

궁금하신 점이나 의견이 있다면 댓글로 남겨주세요. 모두 함께 이 흥미로운 기술의 발전을 지켜봐요!

반응형