| 파티클 시스템 Particle System | |
|---|---|
| 분야 | 컴퓨터 그래픽스 × 게임 개발 |
| 등장 | 1982년, 영화 스타트렉 2의 제네시스 효과 |
| 기본 단위 | 파티클(입자) |
| 주 표현 대상 | 연기, 불, 비, 눈, 폭발, 마법 효과 |
| 관련 기법 | 베를레 적분, SPH |
1. 개요[편집]
파티클 시스템(Particle System)은 수많은 작은 입자(파티클)의 집합을 이용해 정형화된 표면 메쉬로는 표현하기 힘든 흐릿하고 유동적인 현상 — 연기, 불, 비, 폭발, 마법 이펙트 등 — 을 근사하는 컴퓨터 그래픽스 기법이다. 각 입자는 위치·속도·수명 같은 소수의 속성만 갖는 아주 단순한 존재지만, 수천에서 수백만 개가 모이면 인간의 눈에는 하나의 연속적인 자연 현상으로 보인다.1
핵심 아이디어는 “복잡한 형태를 하나의 큰 메쉬로 모델링하지 말고, 단순한 점들을 잔뜩 뿌린 뒤 각자 물리적으로 움직이게 놔두자”는 것이다. 개별 입자는 멍청하지만 집단은 똑똑해 보인다는, 창발(emergence)의 그래픽스 버전이라고 보면 된다.
2. 역사[편집]
파티클 시스템의 공식적인 시조는 1982년 윌리엄 리브스(William Reeves)다. 그는 영화 스타트렉 2: 칸의 분노에서 죽은 행성을 되살리는 “제네시스 이펙트”의 불길을 표현하기 위해 이 기법을 고안했고, 1983년 논문으로 정리했다.2 당시로서는 표면 기반 렌더링이 그래픽스의 상식이었기에, “형태가 정의되지 않은 물체를 점으로 표현한다”는 발상은 상당히 파격적이었다.
이후 파티클 시스템은 게임 엔진의 필수 요소로 자리 잡았다. 오늘날 언리얼 엔진의 Niagara, 유니티의 VFX Graph 같은 노드 기반 저작 도구가 표준이 되었으며, 아티스트가 코드 한 줄 없이 GPU 파티클을 수백만 개씩 다룰 수 있는 시대가 되었다.
3. 파티클의 생애주기[편집]
모든 파티클은 이미터(emitter)에서 태어나 정해진 수명을 살고 소멸한다. 이 흐름을 파티클 라이프사이클이라 부른다.
- 생성(Emission): 이미터가 매 프레임 일정 개수(spawn rate)의 파티클을 뿌린다. 이미터는 점·선·구·원뿔·메쉬 표면 등 다양한 형상을 가질 수 있으며, 이 형상이 분출 패턴을 결정한다.
- 초기화: 생성 시점에 위치, 초기 속도, 색상, 크기, 수명 등이 부여된다. 자연스러움을 위해 이 값들에는 대개 난수 요동(jitter)을 준다. 모든 입자가 똑같이 움직이면 그건 자연이 아니라 열병식이다.
- 갱신(Update): 매 프레임 힘(중력, 항력, 바람)을 적분해 속도와 위치를 갱신한다. 가장 단순하게는 명시적 오일러법을 쓰지만, 안정성이 중요하면 베를레 적분을 쓰기도 한다.
- 소멸(Death): 수명이 다하거나, 화면 밖으로 나가거나, 특정 조건을 만족하면 제거된다. 소멸 직전 크기·투명도를 서서히 줄이는(fade-out) 것이 자연스러움의 핵심.
각 입자의 위치 갱신은 결국 뉴턴 운동방정식의 이산 적분이다. 시간 간격 에 대해 가장 단순한 세미-임플리시트 오일러 형태는 다음과 같다.
4. 렌더링: 스프라이트와 빌보드[편집]
파티클은 대개 실체가 없는 점이라 그 자체로는 화면에 아무것도 안 나온다. 그래서 각 입자 위치에 텍스처를 입힌 작은 사각형(quad)을 그리는데, 이 사각형이 항상 카메라를 정면으로 바라보도록 회전시키는 기법이 빌보딩(billboarding)이다. 카메라가 어디서 보든 연기 텍스처가 옆으로 납작해 보이지 않게 하는 것이 목적.3
- 스프라이트 빌보드: 가장 흔한 방식. 반투명 텍스처(불꽃, 연기 퍼프)를 카메라 정면으로 세운다.
- 스트레치 빌보드: 속도 방향으로 늘여서 빗줄기나 스파크의 궤적을 표현.
- 메쉬 파티클: 사각형 대신 실제 3D 메쉬를 뿌린다. 파편, 바위, 잎사귀처럼 입체감이 필요한 경우.
렌더링에서 골치 아픈 것은 반투명 정렬(alpha blending) 문제다. 반투명 입자들은 뒤에서 앞으로 정렬해 그려야 올바르게 겹치는데, 수십만 개를 매 프레임 정렬하는 비용이 만만치 않다. 그래서 가산 블렌딩(additive blending)으로 정렬 자체를 회피하는 꼼수가 불·빛 표현에 널리 쓰인다.
5. GPU 파티클[편집]
파티클 수가 수만 개를 넘어가면 CPU로 하나씩 갱신하는 것은 무리다. 현대 엔진은 파티클의 속성을 GPU 버퍼에 올려두고 컴퓨트 셰이더(compute shader)로 병렬 갱신하는 GPU 파티클을 쓴다. 각 입자의 갱신이 서로 독립적이라 GPU의 대규모 병렬성과 궁합이 완벽하다.4
GPU 파티클의 대가는 CPU가 개별 입자의 상태를 쉽게 못 읽는다는 점이다. 그래서 파티클끼리, 혹은 파티클과 씬(scene)의 상호작용은 까다로워진다. 이를 해결하려고 깊이 버퍼를 이용한 화면 공간 충돌(screen-space collision)이나 부호화 거리장(SDF) 기반 충돌 판정 같은 근사 기법이 동원된다.
6. 힘장과 충돌[편집]
파티클을 그럴듯하게 만드는 것은 결국 물리다. 대표적으로 다음과 같은 외력(힘장, force field)을 적용한다.
| 힘장 | 효과 | 표현 예시 |
|---|---|---|
| 중력 | 아래로 가속 | 낙하하는 잔해, 분수 |
| 항력(drag) | 속도에 비례해 감속 | 공기 저항받는 연기 |
| 소용돌이(vortex) | 회전 유동 | 회오리, 마법진 |
| 난기류(turbulence) | 노이즈 기반 요동 | 불규칙한 연기 |
충돌은 입자를 평면·구·강체 동역학 물체와 부딪히게 하는 처리다. 입자 하나하나에 정밀한 충돌 감지를 돌리면 비싸므로, 대개 단순 평면 반사나 근사 콜라이더로 처리한다. 참고로 파티클이 서로 밀어내며 유체처럼 굴게 하려면 그건 이미 파티클 시스템의 영역을 넘어 SPH나 FLIP-PIC 유체 같은 본격 입자 기반 유체 시뮬레이션의 세계로 넘어간다.
7. 현상별 표현 노하우[편집]
- 불(fire): 아래에서 위로 상승, 가산 블렌딩, 수명에 따라 노랑→주황→빨강→검정으로 색 변화. 상승 난기류를 살짝 섞으면 훨씬 그럴듯해진다.
- 연기(smoke): 느리게 상승하며 크기가 팽창하고 투명도가 서서히 사라진다. 소프트 파티클(soft particle) 기법으로 지형과 만나는 경계를 부드럽게 처리한다.
- 비(rain): 스트레치 빌보드로 빗줄기를 세로로 늘이고, 바닥 충돌 지점에 튀김(splash) 서브 이미터를 붙인다.
- 눈(snow): 낮은 낙하 속도 + 좌우 흔들림 노이즈. 비와 달리 난기류 비중을 크게.
이런 노하우는 물리적 엄밀함보다 “보기에 그럴듯한가”가 지배하는 영역이다. 게임 VFX는 사실성보다 가독성과 성능이 우선인 실시간 렌더링의 세계이기 때문이다.
8. 관련 문서[편집]
9. Footnotes[편집]
-
이 원리는 통계역학과 묘하게 닮았다. 개별 분자의 운동은 예측 불가능하지만 아보가드로수만큼 모이면 온도·압력이라는 매끄러운 거시량이 나온다. 파티클 시스템은 그 거시적 인상만 눈속임으로 빌려온 셈이다. ↩
-
Reeves, W. T. (1983). “Particle Systems — A Technique for Modeling a Class of Fuzzy Objects”. ACM Transactions on Graphics. 픽사의 전신인 루카스필름 컴퓨터 그래픽스 부서에서 나온 논문이라는 점이 유서 깊다. ↩
-
빌보드가 카메라를 못 따라가서 옆에서 보면 연기가 종잇장처럼 얇게 보이는 버그는 신입 그래픽스 프로그래머의 통과의례다. “종이 연기 버그”라고 부른다. ↩
-
GPU 입장에서 파티클 갱신은 이상적인 워크로드다. 분기(branch)가 적고, 메모리 접근이 규칙적이며, 입자끼리 의존성이 없다. GPU 설계자가 꿈에 그리던 문제라고 봐도 무방하다. ↩