💧 유체 시뮬레이션(Fluid Simulation)
컴퓨터 그래픽스에서 유체 시뮬레이션은 실제 물리 법칙을 기반으로 물, 연기, 기체 등의 유체 움직임을 시각적으로 자연스럽게 표현하는 기술이다.
이 과정은 주로 나비에-스토크스(Navier–Stokes) 방정식을 통해 유체의 운동을 수치적으로 계산하여 이루어진다.
이때, 대표적인 두 가지 방법이 있다:
1. 입자 기반 방법 (Lagrangian Particle Method)
2. 그리드 기반 방법 (Eulerian Grid Method)
1️⃣ 입자 기반 방법 (Lagrangian)
- 대표적인 예: SPH (Smoothed Particle Hydrodynamics)
- 유체를 연속적인 공간으로 보지 않고 다수의 입자(Particle)로 표현
- 속도, 압력, 밀도 등 물리량을 각 입자에 저장
- 입자 간의 거리, 커널 함수 등을 통해 상호작용을 계산
- Advection(이류) 과정이 입자의 위치 갱신만으로 간단히 처리되어 구현이 직관적임
✅ 장점
- 표면 변화 표현이 유연하고 자연스러움
- 물방울, 파편, 유동 경계 등에서 강력함
⚠️ 단점
- 비압축성(Incompressibility) 유체를 표현하는 데 어려움이 있음
-> 압력 보정이나 제약 조건을 추가해야 안정적인 시뮬레이션 가능
2️⃣ 그리드 기반 방법 (Eulerian Grid)
- 속도, 압력, 밀도, 유체의 위치 등의 유체 정보를 각 격자에 저장하여 계산한다.
✅ 장점
- 비압축성 조건(Incompressibility Condition)을 적용하기 유리
-> 유체의 발산이 0이 되도록 하는 수식의 이산화(Discretization)가 수학적으로 간단함 - 고정된 구조 덕분에 선형 시스템 해법(예: 압력 푸아송 방정식) 적용이 효율적
⚠️ 단점
- 유체의 움직임(Advection)을 표현할 때 고정된 격자 위에서의 보간 계산이 필요하며,
이 과정에서 수치 확산(Numerical Diffusion) 이나 해상도 제한 등의 문제가 발생할 수 있음 - 자유 표면(free surface)이나 복잡한 경계 처리에 상대적으로 불리함
📘 용어 설명: 비압축성 유체 (Incompressible Fluid)
비압축성 유체란, 압력이나 속도의 변화에 따라 체적이 변하지 않는 유체를 말한다.
즉, 시간에 따라 밀도의 변화가 무시될 수 있을 정도로 매우 작거나 없는 유체이다.
대표적으로 물, 기름 등이 이에 해당하며, 시뮬레이션에서는 다음과 같은 조건으로 표현된다:
여기서 $( \nabla \cdot u )$는 유체 속도장의 발산(divergence)을 의미하며,
이 값이 0이면 질량 보존(밀도 일정)이 만족된다는 것을 뜻한다.
이러한 두 가지 방법의 장단점을 상호 보완하기 위해, 입자 기반 시뮬레이션과 그리드 기반 시뮬레이션을 혼합한 하이브리드 유체 시뮬레이션 기법이 나타났다:
1. PIC (Particle-In-Cell)
2. FLIP (Fluid-Implicit Particle)
3️⃣ PIC (Particle-In-Cell)
PIC (Particle-In-Cell) 방식은 입자 기반 시뮬레이션과 그리드 기반 시뮬레이션을 혼합한 하이브리드 유체 시뮬레이션 기법이다.
Advection(이류)은 입자(Particle)로 처리하고, 압력 계산과 보정 등 나머지 연산은 고정된 그리드(Grid)에서 수행한다.
✅ PIC 계산 과정
- 입자 시뮬레이션 진행
- 입자들의 위치와 속도를 기반으로 물리적 이동(advection)을 계산
- 입자의 속도를 그리드로 전달 (Particle-to-Grid)
- 입자의 속도를 주변 그리드 셀에 보간(Interpolation)하여 전파
- 비압축성 압력 계산
- 그리드 위의 속도를 바탕으로 발산 제로 조건을 만족하는 압력을 계산 (e.g. 푸아송 방정식 해석)
- 압력 기반 속도 보정
- 계산된 압력을 이용해 그리드의 속도를 업데이트 (압력 기울기만큼 감산)
- 그리드의 속도를 입자로 전달 (Grid-to-Particle)
- 보정된 그리드 속도를 보간하여 입자에 다시 반영
⚠️ PIC 방식의 문제점: 속도 보간으로 인한 점성(Viscosity) 증가
- Grid-to-Particle 보간 과정에서, 동일한 그리드 셀 안의 입자들이 유사한 속도를 얻게 되는 경향이 있음
- 이는 속도의 미세한 차이(세부 유동 구조)가 사라지며, 마치 점성이 있는 유체처럼 흐름이 뭉뚱그려지는 현상을 유발
- 결과적으로 유체가 부드럽게 퍼지거나 뭉쳐 흐르는 현상이 발생

4️⃣ FLIP (Fluid-Implicit Particle)
FLIP(Fluid-Implicit Particle)은 PIC 방식의 단점인 점성 증가 현상(Viscous Damping)을 보완하기 위해 제안된 기법이다.
기본적인 연산 구조는 PIC와 유사하지만, 그리드에서 입자로 속도를 다시 보간하는 방식이 다르다.
✅ FLIP PIC 계산 과정

- 입자 시뮬레이션 및 위치 이동
- 입자의 위치를 이용해 이동(advection) 처리
- 입자 속도를 그리드에 보간 (P → G)
- 기존 PIC와 동일
- 그리드에서 압력 계산 및 속도 보정
- 압력 기반으로 비압축성 속도 계산
- 속도 변화량 계산
- 그리드에서: $\Delta v = v_{new} - v_{old}$
- 입자 속도 갱신 (G → P)
- PIC: 입자 속도를 v_grid_new로 덮어씀
- FLIP: 입자 속도를 기존 값에 $\Delta v$만큼 더함
- $v_{particle}^{new} = v_{particle}^{old} + \Delta v$
즉, 그리드의 속도를 그대로 보간하는 것이 아닌, 비압축성 압력 계산 전후의 속도 변화량을 보간하여 전달한다.
✅ FLIP의 장점
- 세밀한 유체 흐름 유지
→ 입자 간 속도 차이가 유지되어, 거친 물결, 난류, 분사 효과 등에 매우 효과적 - 점성 증가 문제 해결
→ 속도 덮어쓰기 대신 변화량 반영으로 자연스러운 유동성 유지
⚠️ FLIP의 단점
- 불안정하거나 과도한 에너지 발생 가능성→ 입자 간 속도 차이가 커지며, 노이즈나 진동 현상이 발생할 수 있음
→ 보통 PIC과 FLIP을 혼합(PIC-FLIP 혼합 방식)하여 안정성과 품질을 조절
💻 구현
전체 프레임워크는 다음과 같은 과정으로 이루어졌다:

또한, 앞서 설명한 기법 중 FLIP 기법과 PIC 기법을 혼합해서 구현했으며, OpenGL을 활용하여 시각화했다.
이때, 그리드 해상도는 32x32로 설정, 압력 계산을 위한 수치해석 기법은 Conjugate Gradient Method을 사용했다.
📈 결과
참고 자료
SPH:
FLIP:
Animating sand as a fluid - Yongning Zhu, Robert Bridson
https://matthias-research.github.io/pages/tenMinutePhysics/index.html
