[ Fluid Simulation ] 01. 유체 시뮬레이션 (Fluid Simulation)

2025. 5. 17. 13:50·물리 기반 시뮬레이션/Fluid Simulation

💧 유체 시뮬레이션(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)

비압축성 유체란, 압력이나 속도의 변화에 따라 체적이 변하지 않는 유체를 말한다.
즉, 시간에 따라 밀도의 변화가 무시될 수 있을 정도로 매우 작거나 없는 유체이다.
대표적으로 물, 기름 등이 이에 해당하며, 시뮬레이션에서는 다음과 같은 조건으로 표현된다:

$ \large \nabla \cdot u = 0 $

여기서 $( \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 계산 과정

  1. 입자 시뮬레이션 진행
    • 입자들의 위치와 속도를 기반으로 물리적 이동(advection)을 계산
  2. 입자의 속도를 그리드로 전달 (Particle-to-Grid)
    • 입자의 속도를 주변 그리드 셀에 보간(Interpolation)하여 전파
  3. 비압축성 압력 계산
    • 그리드 위의 속도를 바탕으로 발산 제로 조건을 만족하는 압력을 계산 (e.g. 푸아송 방정식 해석)
  4. 압력 기반 속도 보정
    • 계산된 압력을 이용해 그리드의 속도를 업데이트 (압력 기울기만큼 감산)
  5. 그리드의 속도를 입자로 전달 (Grid-to-Particle)
    • 보정된 그리드 속도를 보간하여 입자에 다시 반영

 

⚠️ PIC 방식의 문제점: 속도 보간으로 인한 점성(Viscosity) 증가

  • Grid-to-Particle 보간 과정에서, 동일한 그리드 셀 안의 입자들이 유사한 속도를 얻게 되는 경향이 있음
  • 이는 속도의 미세한 차이(세부 유동 구조)가 사라지며, 마치 점성이 있는 유체처럼 흐름이 뭉뚱그려지는 현상을 유발
  • 결과적으로 유체가 부드럽게 퍼지거나 뭉쳐 흐르는 현상이 발생


4️⃣ FLIP (Fluid-Implicit Particle)

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

 

✅ FLIP PIC 계산 과정

  1. 입자 시뮬레이션 및 위치 이동
    • 입자의 위치를 이용해 이동(advection) 처리
  2. 입자 속도를 그리드에 보간 (P → G)
    • 기존 PIC와 동일
  3. 그리드에서 압력 계산 및 속도 보정
    • 압력 기반으로 비압축성 속도 계산
  4. 속도 변화량 계산
    • 그리드에서: $\Delta v = v_{new} - v_{old}$
  5. 입자 속도 갱신 (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:

Particle-Based Fluid Simulation for Interactive Applications - Matthias Müller, David Charypar and Markus Gross


FLIP:

Animating sand as a fluid - Yongning Zhu, Robert Bridson

https://matthias-research.github.io/pages/tenMinutePhysics/index.html

 

'물리 기반 시뮬레이션 > Fluid Simulation' 카테고리의 다른 글

[ Fluid Simulation ] 05. 화면 공간 유체 렌더링을 위한 좁은 범위 필터 (Narrow-Range Filter for Screen-Space Fluid Rendering)  (0) 2025.05.29
[ Fluid Simulation ] 04. 유체의 화면 공간 렌더링 기법 (Screen-Space Fluid Rendering)  (0) 2025.05.27
[ Fluid Simulation ] 03. 액체 시뮬레이션에서 파동 난류를 표현하기 위한 GPU 병렬화 (GPU Framework for Simulating Wave Turbulence in Fluid Simulation)  (0) 2025.05.24
[ Fluid Simulation ] 02. 파동 난류 표현 (Wave Turbulence)  (0) 2025.05.23
'물리 기반 시뮬레이션/Fluid Simulation' 카테고리의 다른 글
  • [ Fluid Simulation ] 05. 화면 공간 유체 렌더링을 위한 좁은 범위 필터 (Narrow-Range Filter for Screen-Space Fluid Rendering)
  • [ Fluid Simulation ] 04. 유체의 화면 공간 렌더링 기법 (Screen-Space Fluid Rendering)
  • [ Fluid Simulation ] 03. 액체 시뮬레이션에서 파동 난류를 표현하기 위한 GPU 병렬화 (GPU Framework for Simulating Wave Turbulence in Fluid Simulation)
  • [ Fluid Simulation ] 02. 파동 난류 표현 (Wave Turbulence)
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어
        • C
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    narrow range filter screen-space fluid rendering
    position based dynamics
    명령어
    파동 난류
    액체 시뮬레이션
    컴퓨터 구조
    물리 기반 시뮬레이션
    시스템 프로그래밍
    fluid implicit particle
    입자 기반 방법
    screen space fluid rendering
    정수 승격
    wave simulation
    그리드 기반 방법
    surface turbulence
    fluid simulation
    C언어
    유체 시뮬레이션
    jump table
    상수
    Flip
    RAM
    cloth simulation
    collision
    OpenGL
    screen-space rendering
    pbd
    bilateral blur
    실수
    GLSL
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
[ Fluid Simulation ] 01. 유체 시뮬레이션 (Fluid Simulation)
글쓰기
상단으로

티스토리툴바