🌊 액체 시뮬레이션에서의 파동 난류 표현
액체 시뮬레이션에서의 파동 난류 표현과 같은 세부적인 시각적 표현은 많은 연산을 요구하기 때문에 CPU 기반 시뮬레이션만으로는 성능적인 한계가 존재한다. 이를 해결하기 위해 최근에는 GPU 병렬화 기법을 활용하여 액체 시뮬레이션을 더욱 사실적으로 표현하기 위한 연구가 활발히 진행되고 있다.
따라서, 이번에는 FLIP 기법을 활용하여 액체를 시뮬레이션하고, 난류와 같은 세부 물리 현상을 GPU 병렬화 기법을 활용하여 효율적으로 처리하는 프레임워크를 제안한다.
기반 시뮬레이션의 프레임워크는 다음과 같다:

또한, 병렬화 과정은 다음 두 단계로 나눌 수 있다:
FLIP 시뮬레이션의 GPU 병렬화
파동 난류의 GPU 병렬화
🚀 FLIP 시뮬레이션의 GPU 병렬화
액체 시뮬레이션의 GPU 병렬화 과정은 다음 두 단계로 나뉜다:
초기화
시물레이션 단계
⚙️ 초기화
초기화 과정의 경우 FLIP 입자의 초기화를 호스트 메모리에서 진행한 뒤, 이를 디바이스 메모리로 복사하여 난류 입자의 초기화를 진행한다.
⏱️ 시뮬레이션 단계

시뮬레이션 단계의 경우 입자 기반으로 계산되는 외력과 이류 과정은 각 FLIP 입자 단위로 스레드를 할당하며, 그리드 기반으로 계산되는 비압축성 액체에 대한 압력 계산 과정은 그리드 단위로 스레드를 할당한다.
🧵 파동 난류의 GPU 병렬화
파동 난류의 병렬 처리 부분은 다음 두 단계로 나뉜다:
난류 입자의 삽입/삭제 과정
파동 시뮬레이션
➕ 난류 입자의 삽입/삭제 과정
난류 입자의 초기화 및 표면 유지 과정은 매 프레임 난류 입자의 개수가 달라지는 삽입/삭제 과정이 발생한다. 이를 효율적으로 설계하기 위해 GPU 기반의 정렬과 배타적 스캔(Exclusive scan) 등의 연산을 거쳐 메모리 최적화를 진행한다.

🌐 파동 시뮬레이션
난류 입자에 의한 파동 시뮬레이션은 각 입자마다 파동의 높이가 계산되는 과정으로, 각 입자마다 스레드를 할당하여 연산을 수행하고, 최종적인 파동 난류 표현을 진행한다.

💻 구현
구현된 전체 프레임워크는 아래와 같다:

또한, 각 단계를 구체적으로 표현한 흐름은 다음과 같다:

또한, 이는 다음과 같은 환경에서 구현되었다:
AMD Ryzen Threadripper PRO 7975WX 32-Core CPU, NVIDIA RTX 6000 Ada Generation GPU.
FLIP 시뮬레이션의 압력 계산을 위한 수치적 행렬해법은 GPU 기반 선조건 적용 켤레 기울기법(Preconditioned conjugate gradient)을 사용하였다.
액체 시뮬레이션의 경우 시뮬레이션 결과가 입자로 나타나기 때문에 입자를 메시(Mesh) 형태로 만드는 표면 복원(Surface reconstruction) 과정을 위해 Lorensen 등이 제안한 마칭 큐브 (Marching cube) 기법을 활용한다.
이때, 입자의 밀도를 기반으로 레벨셋을 계산한다.
📈 결과
물의 움직임이 활발한 장면과 정적인 장면을 통해 액체 시뮬레이션의 세부적인 특징을 확인했으며, 기존의 FLIP 기반 액체 시뮬레이션과 비교했을 때 물 표면에 나타나는 파동 난류 특징이 확연하게 표현됐다.

추가로, CPU와 GPU에서 frame/sec로 성능 측정을 진행하여 비교한 결과, CPU 대비 약 30~70배 향상하였다. 장면의 복잡도가 증가할수록 높은 성능 향상을 보였으며, 결과적으로 GPU를 활용한 최적화를 통해 시뮬레이션 시나리오마다 수십 배에 달하는 성능 향상을 이뤄냈다.

참고 자료:
1) Y. Zhu and R. Bridson, “Animating sand as a fluid,” ACM Trans. Graph, vol. 24, no. 3, pp. 965–972, July, 2005.
2) O. Mercier, C. Beauchemin, N. Thuerey, T. Kim, and D. Nowrouzezahrai, “Surface turbulence for particle-based liquid simulations,” ACM Trans. on Graphics, vol. 34, no. 6, pp. 1-10, November, 2015.
3) S. Green, “Particle Simulation using CUDA,” NVIDIA Corporation, pp. 1-12, May, 2010.