
3D 가우시안 스플래팅(3DGS)을 실제 인디 게임 배경 파이프라인에 적용한 스튜디오들의 기술 스택 분석
3D 가우시안 스플래팅을 활용해 실사 배경 에셋을 리얼타임 게임 엔진에 이식하는 인디 스튜디오의 기술 스택, 최적화 워크플로우 및 파이프라인을 분석합니다.
3D 가우시안 스플래팅(3DGS)의 인디 게임 배경 파이프라인 부상
라디언스 필드(Radiance Fields) 기술에 기반한 3D 가우시안 스플래팅(3D Gaussian Splatting, 이하 3DGS)은 기존의 포토그래메트리(Photogrammetry)와 NeRF(Neural Radiance Fields)가 지닌 실시간성 및 메시 복원의 한계를 단숨에 극복하며 각광받고 있습니다. 기존 포토그래메트리는 복잡한 나뭇잎, 유리, 반사체, 미세한 와이어 구조 등을 처리할 때 대량의 메시 노이즈와 고용량 폴리곤을 유발했습니다. 반면 3DGS는 미분 가능한 수백만 개의 3D 타원체(Ellipsoids) 가우시안을 이용해 실시간 GPU 타일 래스터라이제이션(Tile-based Rasterization)으로 고품질 실사 환경을 렌더링합니다.
소규모 인디 스튜디오 및 1인 개발진에게 리얼리스틱 배경 에셋 구축은 가장 큰 비용과 시간이 소요되는 장벽입니다. 최근 여러 인디 스튜디오는 3DGS를 3D 에셋 구축 파이프라인으로 채택하여 기존에 수개월이 걸리던 대규모 배경 제작 기간을 단 며칠로 단축하고 있습니다.

3DGS 기반 실전 배경 제작 파이프라인 & 핵심 기술 스택
실제 게임 엔진 내에서 3DGS 배경 데이터가 동작하려면 단순 학습에 그치지 않고, 가우시안 데이터의 경량화와 물리 충돌 처리, 실시간 엔진 연동 파이프라인이 유기적으로 결합되어야 합니다. 선도적인 인디 개발팀들이 구축한 기술 스택은 다음과 같은 4단계 프로세스로 구성됩니다.
1단계: 에셋 캡처 및 데이터 전처리 (COLMAP & Nerfstudio / Luma AI)
배경으로 구현하려는 대상을 다각도에서 촬영(100~500장 내외)합니다. 이후 카메라 위치와 포즈를 추정하는 SFM(Structure from Motion) 단계로 COLMAP 알고리즘을 사용합니다. 학습 단계에서는 open-source 기반의 Nerfstudio나 Post-shot, 또는 빠른 클라우드 연산을 제공하는 Luma AI 플랫폼을 사용하여 몇 분 내에 3DGS 모델(.ply 형식)을 학습시킵니다.
2단계: 가우시안 데이터 편집 및 경량화 (SuperSplat & SOG)
학습 직후의 .ply 파일은 수백만 개의 가우시안 점 정보(위치, 색상, 불투명도, 회전, 크기, 구면 조화 함수 계수 등)를 포함하고 있어 파일 용량이 수백 메가바이트에서 수 기가바이트에 달합니다.
스튜디오들은 PlayCanvas에서 개발한 open-source 에디터인 SuperSplat이나 자체 파이프라인 툴을 활용하여 배경에 불필요한 노이즈 스플랫(Floating Artifacts)을 삭제하고, 렌더링 범위를 크롭(Bounding Box Crop)합니다. 또한 위치 및 구면 조화 함수(Spherical Harmonics) 데이터를 8비트/16비트 수량화(Quantization) 및 클러스터링하여 VRAM 사용량을 70% 이상 절감합니다.

3단계: 실시간 게임 엔진 연동 (Unity & Unreal Engine)
경량화된 가우시안 데이터는 엔진 전용 플러그인을 통해 실시간 렌더링 파이프라인으로 탑재됩니다.
- Unity 스택: Aras Pranckevičius가 공개한 open-source
Unity GaussianSplatting패키지가 널리 사용됩니다. Compute Shader 기반으로 타원체 가우시안을 빠른 뎁스 정렬(Depth Sorting) 후 커스텀 래스터라이저로 드로우합니다. - Unreal Engine 5 스택: Luma AI UE Plugin이나 3DGS Plugin for Unreal을 적용합니다. UE5에서는 기존 Nanite 및 Lumen과의 광원 상호작용 한계를 보완하기 위한 커스텀 셰이더 파이프라인을 결합합니다.
4단계: 시각적 표현과 물리 충돌(Physics Proxy)의 분리 설계
3DGS는 정점 메시가 아닌 공중에 떠 있는 3D 타원체 렌더링 기술이므로 기본적으로 메시 콜리전(Mesh Collision)이 존재하지 않습니다. 스튜디오들은 하이브리드 구조를 적용합니다. 시각적 요소는 3DGS로 렌더링하고, 플레이어의 이동 영역과 광선 투과(Raycast)를 판정하는 충돌체는 Poisson Surface Reconstruction 등을 이용해 제작한 간이 콜리전 메시(Low-poly Collision Proxy Mesh)로 생성하여 씌우는 방식을 사용합니다.
flowchart LR
A[현장 캡처: DSLR / Drone] --> B[COLMAP / SfM 포즈 추정]
B --> C[3DGS 학습: Nerfstudio / Post-shot]
C --> D[편집 및 압축: SuperSplat & SOG]
D --> E1[비주얼 렌더링: Compute Shader]
D --> E2[물리 충돌: Low-Poly Proxy Mesh]
E1 --> F[실시간 인디 게임 배경 통합]
E2 --> F
엔진 내 스플랫 제어 및 최적화 C# 스크립트 예제
유니티 환경에서 수백만 개의 가우시안 스플랫을 렌더링할 때, 카메라와의 거리에 따라 스플랫의 스케일을 제어하고 VRAM 대역폭 부담을 줄이기 위한 C# 매니저 스크립트 예시입니다.
using UnityEngine;
namespace GaussianPipeline
{
/// <summary>
/// 카메라 거리에 따른 가우시안 스플랫 렌더링 스케일 및 동적 컬링 제어기
/// </summary>
[ExecuteInEditMode]
public class GaussianSplatLODController : MonoBehaviour
{
[Header("Render Settings")]
[SerializeField] private Material splatMaterial;
[SerializeField] private float maxRenderDistance = 40.0f;
[SerializeField] private float minSplatScale = 0.2f;
private Transform mainCameraTransform;
private static readonly int SplatScaleMultiplierID = Shader.PropertyToID("_SplatScaleMultiplier");
private static readonly int MaxDistanceCutoffID = Shader.PropertyToID("_MaxDistanceCutoff");
private void Start()
{
if (Camera.main != null)
{
mainCameraTransform = Camera.main.transform;
}
}
private void Update()
{
if (mainCameraTransform == null || splatMaterial == null) return;
float distance = Vector3.Distance(transform.position, mainCameraTransform.position);
// 거리에 따라 스플랫 크기를 동적으로 조절하여 VRAM 밴드위치 절감 및 픽셀 오버드로(Overdraw) 완화
float scaleFactor = Mathf.Lerp(1.0f, minSplatScale, distance / maxRenderDistance);
scaleFactor = Mathf.Clamp(scaleFactor, minSplatScale, 1.0f);
splatMaterial.SetFloat(SplatScaleMultiplierID, scaleFactor);
splatMaterial.SetFloat(MaxDistanceCutoffID, maxRenderDistance);
}
}
}
3DGS 배경 파이프라인의 현재 한계 및 극복 과제
3DGS 기술은 배경 파이프라인을 혁신적으로 개선했지만, 상용 게임 상용화를 위해 해결해야 할 기술적 도전 과제들이 존재합니다.
- VRAM 점유율 및 정렬 연산 부담: 수백만 개의 스플랫을 실시간으로 알파 블렌딩하기 위해서는 매 프레임 GPU에서 Depth Sorting 연산이 필요합니다. 저사양 타겟 기기에서는 성능 병목이 발생할 수 있으므로, Chunked Spatial Partitioning(공간 분할) 기법으로 화면에 보이는 가우시안만 선별 렌더링하는 전략이 필수적입니다.
- 동적 조명(Dynamic Lighting) 상호작용: 기존 3DGS는 캡처 시점의 조명 정보가 구면 조화 함수에 고정(Baked)되어 있습니다. 최근 스튜디오들은 가우시안 속성에 법선 벡터(Normal Vector)와 거칠기(Roughness) 필드를 추정해 결합하는 Relightable 3DGS 기법이나 커스텀 셰이더를 도입해 게임 내 동적 라이트와의 결합을 시도하고 있습니다.
3D 가우시안 스플래팅은 단순한 신기술 연구를 넘어, 인디 개발 스튜디오가 적은 인원만으로도 고품질 실사 배경을 실시간 게임 엔진 내에 구현할 수 있게 돕는 실질적인 기술 스택으로 빠르게 자리잡고 있습니다.