2P by neo 6달전 | favorite | 댓글 1개
  • 실시간으로 불과 연기 같은 유체를 시뮬레이션하는 데 관련된 수학, 알고리듬, 방법에 대한 노트와 소스코드(깃헙)

1. 유체 시뮬레이션

  • 불을 시뮬레이션하기 전에 유체를 시뮬레이션해야 함
  • 유체가 비압축성이고 비粘性이라고 가정하면 문제가 크게 단순화됨

1.1 기본 유체 역학

  • 공간의 DDD 영역에 유체가 채워져 있고, 시간 ttt에 대해 유체의 속도가 u(x,t)임
  • 2D 속도장 u를 N×N 그리드로 표현할 수 있음
  • 염료 한 방울을 유체에 떨어뜨리면 어떻게 될까?
  • 염료의 밀도를 나타내는 스칼라장 ψ(x,t)를 정의하고, 유체의 속도에 의해 이동하는 것을 advection이라 함
  • advection을 계산하기 위한 Naive Method는 각 그리드 포인트를 이동시키고 가장 가까운 그리드 포인트를 업데이트하는 것이지만, 병렬화하기 어렵고 불안정함

Advection에 대한 편미분 방정식

  • advection을 안정적으로 파생하기 위해 명시적인 PDE 표현식이 필요함
  • 고정된 공간 영역 WWW 내의 염료 총 질량은 ∫WψdV이고, 시간에 따른 질량 변화는 ddt∫Wψ(x,t)dV임
  • 질량 보존 법칙에 따라 ddt∫WψdV=−∫Sψu⋅ndA가 됨
  • 발산 정리를 적용하면 ∫W[∂ψ∂t+∇⋅(ψu)]dV=0이고, 단위 부분 영역 W=dV에 대해 ∂ψ∂t+∇⋅(ψu)=0이 됨
  • 이것은 우리가 풀어야 할 명시적인 PDE를 제공함

Advection에 대한 안정적인 방법

  • eqn. (1)을 자세히 보면, 우측 항이 −u 방향의 방향 미분임
  • Semi-Lagrangian advection이라고 불리는 이 방법은 1999년에 Jos Stam에 의해 발명됨
  • 각 그리드 포인트를 한 번만 업데이트하기 때문에 병렬화가 매우 쉽고, 무조건 안정적임

1.2 나비에-스토크스 방정식

  • 우리는 유체의 스칼라 속성이 시간에 따라 어떻게 진화하는지에 대한 모델을 찾았지만, 유체 흐름 자체는 어떻게 될까?
  • 나비에-스토크스 방정식은 유체 내의 어떤 지점에서 속도장 u가 시간에 따라 어떻게 변하는지 정의함
  • 우리는 유체가 비粘性이라고 가정했으므로 μ=0이고, 외부 힘도 일단 무시할 수 있음
  • 따라서 우리는 자기-유도(self-advection)와 압력(pressure) 두 가지 항만 남게 됨
  • 각 타임스텝에서 이 항들을 수치적으로 계산하고 더하면 유체를 시뮬레이션할 수 있음

압력 해결

  • 새로운 속도장이 비압축성 제약을 따르는지 알 수 없으므로 압력 항 p가 이를 수정해야 함
  • 이를 위해 푸아송 방정식을 풀어야 함
  • 푸아송 방정식을 풀기 위해 우리는 Jacobi 방법과 같은 반복적인 알고리즘을 사용할 수 있음
  • Jacobi 방법은 GPU에서 병렬로 실행될 수 있어 구현이 매우 간단함

요약: 나비에 스토크스 시뮬레이션

  • 나비에-스토크스의 수학은 조금 복잡할 수 있지만, 방정식을 풀어 유체를 시뮬레이션하는 것은 몇 가지 주요 업데이트 절차로 요약됨

1.3 와도성 제한(Vorticity Confinement)

  • 그리드를 사용하여 속도장을 저장하는 것은 매우 편리하지만, 그리드 포인트 사이의 값을 보간할 때 원치 않는 수치적 스무딩이 발생함
  • 이로 인해 유동의 난류 소용돌이가 소멸되어 일반적으로 지나치게 부드럽고 "지루한" 유체 흐름이 됨
  • 와도성 제한은 이러한 소실된 와도성을 증폭시키는 과정임
  • 와도성 제한은 헬리콥터 블레이드의 매우 복잡한 유동장을 해결하기 위해 고안됨
  • 와도성은 u의 컬을 취하여 각 지점에서 계산되며, 와도성을 증폭시키기 위해 각 지점에서 원형 흐름을 추가함

Curl-Noise Turbulence

  • Curl noise는 와도성 제한과 유사한 방법으로, 속도장의 와도성을 측정하고 증폭하는 대신, 노이즈 함수를 사용하여 스칼라 와도성장을 처음부터 만듦
  • 빠르게 움직이고 매우 난류인 유체들은 와도성 제한과 curl noise의 혜택을 가장 많이 받음

2. 불 시뮬레이션

  • 불과 연기를 시뮬레이션하기 위해서는 연료와 온도를 나타내는 채널을 추가하고, 연료의 연소를 모델링하여 열을 생성해야 함
  • 또한 열이 많은 유체의 부분이 열 부력 모델에 따라 상승하는 것을 처리하고, 불꽃을 올바르게 렌더링해야 함

2.1 기본 연소 모델

  • 화학적으로, 불은 연료 물질의 산화 반응으로 인해 발생하며, 열과 빛을 방출함
  • 연료의 밀도를 나타내는 스칼라장 ρ와 온도를 나타내는 스칼라장 T를 정의함
  • 연료가 연소되어 시스템에 온도를 추가하며, 온도는 뜨거운 곳에서 차가운 곳으로 확산됨
  • 열 대류는 이 두 과정의 결합으로 정의되며, 우리는 이미 이를 모델링하는 수학적 모델을 가지고 있음 - advection!

GN⁺의 의견:

  1. 이 글은 실시간으로 불과 연기와 같은 유체를 시뮬레이션하는 복잡한 과정을 설명하고 있으며, 이는 컴퓨터 그래픽스와 게임 개발에 매우 중요한 주제임.
  2. 최근 GPU의 발전으로 복잡한 유체 시뮬레이션을 실시간으로 처리할 수 있게 되었고, 이는 시각적으로 매력적인 게임과 영화 특수 효과를 만드는 데 기여함.
  3. 이 글은 나비에-스토크스 방정식과 와도성 제한과 같은 고급 수학적 개념을 다루고 있어, 이 분야에 관심 있는 초급 소프트웨어 엔지니어에게 유익한 정보를 제공함.
Hacker News 의견
  • CFD(전산 유체 역학) 박사 학위를 받은 한 사람으로서, 와류 구속 방법이나 컬-노이즈 난류에 대해 접해본 적이 없음을 인정함. 매일 새로운 것을 배운다는 것을 실감함.
    • 산업 분야의 CFD에서는 높은 레이놀즈 수를 다루기 때문에, 수치 방법의 인위적 소산을 상쇄하기 위해 노이즈를 적용하는 것은 바람직하지 않음. 실제로 많은 사람들이 높은 레이놀즈 수 시뮬레이션을 안정화하기 위해 인위적 소산을 원함. 컴퓨터 그래픽스 분야의 요구사항은 물리학적 정확성보다는 올바르게 보이는 것에 더 중점을 둠.
  • 게임용 불과 연기 시뮬레이션과 GPU에서의 유체 시뮬레이션에 대한 언급이 있음. 게임에서 이러한 효과가 실행되어야 한다면, GPU가 이미 바쁘지 않은가 하는 의문이 있음. CFD 문제를 해결하고 동시에 렌더링하는 것은 많은 작업으로 보임.
    • 이러한 시뮬레이션을 iGPU에서 실행할 수 있으며, dGPU는 더 많은 렌더링 관련 작업을 수행할 수 있는지, 아니면 iGPU가 너무 약해서 CPU로 전환하는 것이 나은지에 대한 의문이 있음.
  • "10 Minute Physics"라는 다른 사람이 이러한 주제를 설명하는 것이 매우 좋음.
  • 수학 전공자에서 소프트웨어 엔지니어로 전환한 사람이 CFD 시뮬레이션에 관심이 있으며, 벡터 미적분학이나 편미분 방정식을 오랫동안 다루지 않아 수학이 많이 녹슬었음에도 불구하고 이 분야에 대해 배우고 싶어하는 의견이 있음.
  • 간단한 유체 시뮬레이션을 구현하는 비디오를 최근에 보았으며 매우 흥미로웠음.
  • EmberGen은 소비자 GPU에서 실시간으로 불과 연기 시뮬레이션을 수행하는 놀라운 소프트웨어로, 노드 기반 워크플로를 지원하여 새로운 효과를 쉽게 만들 수 있음.
    • 워크플로우가 몇 시간 걸리던 작업이 몇 분 만에 완성될 수 있도록 개선됨.
    • EmberGen이 해커뉴스에서 큰 주목을 받지 못한 것에 대해 약간 실망함을 표현함. (EmberGen/JangaFX와 관련 없는 만족스러운 고객의 의견)
  • 기사의 주된 내용은 아니지만, 시뮬레이션을 선택할 때 예술적 통제를 포기하고 종종 압도적인 양의 컨트롤을 통해 고통스러운 협상을 해야 한다는 서론이 다소 잘못되었다는 의견이 있음.
    • 발록과 같은 핵심 장면에서는 시뮬레이션을 결정하지 않고 모든 프레임에 대한 완전한 통제를 선호할 것임.
    • 톨킨 판타지 예시로, 강이 많은 굽이를 돌고, 몇몇 바위가 있으며, 가끔 물고기가 뛰어오르는 풍경 장면은 시뮬레이션에 더 적합함.
  • 64GB의 RAM을 가지고 있음에도 불구하고, 해당 페이지가 탭을 완전히 종료시키는 문제를 겪음.
  • 컴퓨터 그래픽스 폭발이 왜 형편없는지에 대한 좋은 설명을 제공하는 비디오 링크가 있음.
  • distill.pub 템플릿과 페이지 빌딩 시스템의 출력물에 매우 인상을 받았으며, 2021년에 중단되어 더 이상 유지되지 않는 것이 아쉬움.