[Graphics] 그래픽스 수학

[유체 역학] Navier-Stokes equation과 volticity적용

doyyy_0 2025. 2. 25. 12:12

유체 시뮬레이션을 적용하기 위해서는 크게 Sourcing => Diffuse => Projection => Advection로 진행할 수 있습니다.

이를 이해하기 위해서는 Chorin's Projection Method와 Volticity(소용돌이)를 이해해야합니다.

 

Navier-Stokes equation은 비압축성 유체의 운동을 기술하는 편미분 방정식(PDE) 으로, 아래와 같은 비압축성(ρ=constant) 형태가 일반적으로 사용됩니다.

 

하지만 속도와 압력이 강하게 결합되어 있어 풀기가 어렵습니다. 따라서 Chorin의 Projection Method가 이 문제를 해결해줍니다.

 

Chorin Projection Method는 크게 보면 두가지로 나뉘어져 있습니다. 

 

1)

2)

 

1)

첫번째 단계는 중간속도를 구하는 과정입니다. u*로 중간속도를 표현하고 두번째 단계로 넘어가서 중간속도를 이용해 최종속도를 구하는 것이죠. u*를 첫번째 단계에서 구할 때는 압력을 고려하지 않고 중간속도를 구합니다.

또한 Diffuse에 해당하는 단계로, 약간 유체가 퍼지는 느낌을 표현할 수 있습니다. 속도로 표현할 수 있죠. Implicit integration으로 표현해야 값이 폭발하는 위험성을 감소시킬 수 있는데 다음 제 블로그 링크를 통해 이해할 수 있습니다.

https://pdy0930.tistory.com/90

 

2) 두번째 단계는 Projection단계로 결과적으로 속도를 구하는 단계입니다. Δt/ ρ는 어차피 곱해졌다가 다시 나눠지므로 1로 생각합니다. 2)의 식을 보면 u(n+1)은 다음 속도이고, u*은 첫번째 단계에서 구한 중간속도입니다. 여기서 압력P를 편미분하여 구하는데 압력 P는 Laplacian을 통해 구할 수 있습니다.

 

이를 통해 P를 구하고, 2)의 식에 Gradient를 통해 구하면 Projection의 최종 속도를 구할 수 있습니다. 참고로 Divergence란 벡터장에서 퍼지는지 모여서 없어지는지를 구하는 방식입니다. 우리는 비압축성 유체를 구하는 것이므로 ∇⋅u는 항상 0입니다. 양옆 위아래 나가고 들어오는 값의 합이 0이되어야 하기 때문입니다.

 

이제 DiffuseProjection을 해결했으니 SourcingAdvection을 해결하면 됩니다. Advection은 대류현상이라는 뜻으로 속도의 이동을 가져오면 됩니다.  다음 https://developer.nvidia.com/gpugems/gpugems/part-vi-beyond-triangles/chapter-38-fast-fluid-dynamics-simulation-gpu 의 Equation13을 보면 현재 위치에서의 속도 * dt만큼 뺀 값의 위치에서 속도를 가져오는 방식으로 Advection을 구하고 있습니다. 즉, 현재위치의 속도만큼의 차이인 옆 픽셀의 값을 가져오는 것이죠.

 

이제 Sourcing단계를 해결하면 됩니다. 단지 색깔을 입혀주는 과정은 그냥 시작 시 밀도를 갱신해주는 방향으로 넣어주면 됩니다. 여기서 Volticity를 적용해야 하는데요. Volticity소용돌이란 뜻으로 우리가 구름이나 다른 연기를 보면 끝에 회오리모양의 패턴이 있는 것을 볼 수 있는데 그것을 뜻합니다.

 

Volticity는 다음의 3 단계에 따라 구할 수 있습니다.

1. ω = ∇ x u 

=>  ω는 volticity값이며, 여기서 x는 외적과 비슷한데 정확한 풀이는 벡터장 회전이라는 curl연산입니다. 

https://ko.wikipedia.org/wiki/%ED%9A%8C%EC%A0%84_(%EB%B2%A1%ED%84%B0)

 

2. N = η / | η|    ( η  = ∇ | ω | )

=> η는 eta라고 불리며 volticity의 절댓값을 gradient한 것입니다. N은 eta를 normalize한 값이죠

 

3. F = εh *( N x ω ) 여기서 x는 외적입니다. εh는 임의의 작은 양수라는 뜻인데, 프로그램에 맞게 값을 적당히 조정해서 넣으라는 뜻입니다.

 

최종적으로 F*dt를 속도에 더하면 소용돌이 치는 모습을 표현할 수 있습니다.

 

참고자료 : 

Projection Method : https://en.wikipedia.org/wiki/Projection_method_(fluid_dynamics)#References

 

Projection method (fluid dynamics) - Wikipedia

From Wikipedia, the free encyclopedia Method for numerically solving time-dependent incompressible fluid-flow problems In computational fluid dynamics, the projection method, also called Chorin's projection method, is an effective means of numerically solv

en.wikipedia.org

 

 

Gradiant, Laplacian,Divergence를 구하는 방법 : 

https://developer.nvidia.com/gpugems/gpugems/part-vi-beyond-triangles/chapter-38-fast-fluid-dynamics-simulation-gpu

 

Chapter 38. Fast Fluid Dynamics Simulation on the GPU

Mark J. Harris University of North Carolina at Chapel Hill This chapter describes a method for fast, stable fluid simulation that runs entirely on the GPU. It introduces fluid dynamics and the associated mathematics, and it describes in detail the techniqu

developer.nvidia.com

 

Volticity구현 논문 : 

https://web.stanford.edu/class/cs237d/smoke.pdf 

 

강의 출처 : 홍정모 그래픽스 새싹코스 Part4

https://www.honglab.ai/courses