플루이드 시뮬레이션 개요

언리얼 엔진의 플루이드 시뮬레이션 개요입니다.

Choose your operating system:

Windows

macOS

Linux

언리얼 엔진 5에는 실시간으로 플루이드 이펙트를 시뮬레이션하는 툴세트가 포함되어 있습니다.

이 툴세트는 아티스트 친화적으로 디자인되었으며, 나이아가라 에디터 내에서 사용 가능한 다양한 GPU 기반 시뮬레이터, 재사용 가능한 모듈 및 강력한 데이터 구조를 포함하고 있습니다. 고급 사용자는 광범위하게 노출된 파라미터를 활용하여 필요한 만큼 시뮬레이션을 수정할 수 있습니다.

플루이드 시뮬레이션 시스템은 게임과 시네마틱에서 사용할 수 있는 실시간 환경의 복잡한 플루이드 이펙트를 생성하도록 디자인되었습니다. 시스템을 사용하여 복잡한 시뮬레이션을 다양한 사용 사례에 맞는 플립북 텍스처로 구울 수 있습니다.

플루이드 시뮬레이션의 주요 개념

개요

플루이드 시뮬레이션은 기체나 액체 같은 플루이드의 모션을 표현하는 데이터를 알고리즘 방식으로 생성하는 프로세스입니다. 이 시뮬레이션 데이터는 사용하는 알고리즘에 따라 그리드 또는 파티클로 표현될 수 있습니다.

언리얼 엔진 플루이드 시뮬레이션 시스템은 그리드를 사용하여 기체를 시뮬레이션하고, 파티클과 그리드의 조합을 사용하여 액체를 시뮬레이션합니다.

그리드

기체 시뮬레이션은 그리드로 표현됩니다. 그리드의 각 셀에는 해당 위치에서 매체의 밀도와 온도, 속도를 나타내는 데이터가 있습니다. 그리드 셀 크기가 작으면 시뮬레이션 품질이 높아지지만 품질이 높아지면 연산 비용이 증가합니다.

연기 시뮬레이션을 렌더링할 때 일반적으로 밀도 그리드를 시각화합니다. 밀도가 높은 영역은 밀도가 낮은 영역에 비해 더 불투명합니다. 불 시뮬레이션도 비슷하게 작동하며, 온도는 각 그리드 셀에 있는 불의 색을 제어합니다. 불 시뮬레이션 내에서 온도가 높을수록 부력으로 인해 기체가 더 빠르게 상승합니다.

플루이드 모션

사실적인 움직임으로 플루이드를 시뮬레이션하는 데 있어 주요 구성 요소 중 하나는 '압력 해석' 프로세스입니다. 이 기술에는 오브젝트 주변에서 플루이드가 올바르게 흐르도록 디자인된 등식 체계 해석이 수반되고, 이를 통해 사실적인 소용돌이 모션이 이루어집니다.

이 시뮬레이션은 반복작업 프로세스로 구성되며, 반복작업할수록 시뮬레이션이 더욱 정확해집니다. 하지만 반복작업이 많아질수록 연산 비용이 증가합니다. '압력 해석' 기술이 시뮬레이션에 추가된 힘에 영향을 미치고 이펙트를 약화시킬 수 있다는 점에 주의해야 합니다.

콜리전 오브젝트

플루이드가 근처의 오브젝트에 반응하도록 먼저 '바운더리 조건'을 설정해야 합니다.

시뮬레이션에 대한 바운더리 조건 설정 시 플루이드가 동일한 공간을 점유할 수 없도록 시뮬레이션 영역 내에 오브젝트가 위치한 곳에 마스크가 적용됩니다. 이러한 콜리전 오브젝트는 씬 주변으로 움직일 수 있으며 그 속도는 주변에 있는 플루이드를 이동시키는 데 사용됩니다.

일반적인 예로는 오브젝트가 고여 있는 액체에 떨어져 액체가 튀고 오브젝트 주변으로 잔물결이 발생하는 것입니다. 시스템에서는 많은 오브젝트 타입을 스태틱 메시와 지오메트리 컬렉션, 뎁스 맵과 같은 콜라이더로 사용할 수 있습니다.

액체

나이아가라 플루이드는 하이브리드 파티클 및 FLIP(Fluid-Implicit-Particle)라는 그리드 알고리즘을 사용하여 흐르는 물과 같은 액체를 시뮬레이션합니다. 이 시스템에서 플루이드의 속도는 그리드에서 해석되고, 플루이드의 모양을 나타내는 파티클로 샘플링됩니다.

액체와 기체 시뮬레이션 간에는 여러 유사성이 있으므로 콜리전 오브젝트와 플루이드 모션에 관한 이전 섹션이 액체에도 적용됩니다.

주요 나이아가라 개념

모든 플루이드 시뮬레이터는 나이아가라 에디터에서 액세스할 수 있고, 다양한 나이아가라 기능을 사용합니다.

| 참고 나이아가라 VFX 시스템에 대해 자세히 알아보려면 문서를 확인하세요. |

그리드 데이터 인터페이스

그리드 2D 컬렉션(Grid 2D Collection)그리드 3D 컬렉션(Grid 3D Collection) 은 각각 2D 및 3D 그리드의 명명된 어트리뷰트를 저장하는 데이터 인터페이스입니다. 플루이드를 해석할 때 필요한 모든 연산에 사용됩니다.

시뮬레이션 스테이지

기체 시뮬레이션 알고리즘의 각 단계에서 언리얼 엔진 플루이드 시뮬레이션 시스템을 사용하면 다음 단계로 넘어가기 전에 모든 그리드 셀이 처리됩니다. 이를 위해 시스템에서는 나이아가라 내에 있는 시뮬레이션 스테이지(Simulation Stage) 를 사용합니다.

각 시뮬레이션 스테이지에서 모든 파티클(또는 반복작업 인터페이스(Iteration Interface) 에서 정의하는 그리드 셀)을 반복작업한 이후에 다음 스테이지를 진행합니다. 반복작업 인터페이스가 그리드 3D 컬렉션(Grid3D Collection) (또는 2D)으로 설정된 경우 네임스페이스 Emitter.. 을 사용하여 어트리뷰트를 읽고 쓸 수 있습니다.

아래 스크린샷은 스택에서 Emitter.SimGrid.Velocity 를 설정하는 방법에 관한 예시입니다.

그리드 3D 컴퓨트 그레이디언트

퍼포먼스 최적화를 위해 시뮬레이션 스테이지의 수를 제한할 수도 있습니다. 스테이지의 반복작업(Iteration) 어트리뷰트를 수정하여 다음 스테이지를 진행하기 전에 시뮬레이션 스테이지를 몇 차례 실행할 수 있습니다.

재사용 가능한 모듈

많은 플루이드 행동이 모듈에서 정의되며, 나이아가라 시스템 스택에서 이동할 수 있습니다. 일부 모듈은 2D와 3D, 기체, 액체 시뮬레이터에서 사용되며, 보통 매우 일반적으로 작성됩니다. 고급 사용자는 다양한 모듈을 수정하거나 대체하여 코어 플루이드 솔버 행동을 수정할 수 있습니다.

사용자 파라미터

Grid3D_Flip_Pool 과 같은 일부 시스템은 사용자 파라미터를 사용하여 액터 자체의 아웃라이너에 기능을 노출합니다. 물 높이와 콜리전 속도 배수, 시뮬레이션 해상도와 같은 다양한 플루이드 프로퍼티를 수정할 수 있습니다.

시뮬레이터 타입

2D 기체

2차원 공간에서만 흐름이 발생하는 기체 시뮬레이션입니다. 이러한 시뮬레이션은 일반적으로 3D 시뮬레이션보다 빠르고 게임과 실시간 사용에 매우 적합합니다. 하지만 3D 시뮬레이션을 가능하게 하는 복잡한 난기류가 부족한 편입니다.

3D 오브젝트는 2D 시뮬레이션과 상호작용할 수 있다는 점을 알아두시기 바랍니다. 이러한 타입의 시뮬레이션은 항상 카메라를 향하고 3D 행동을 모방하도록 설정할 수 있습니다. 일반적으로 횃불이나 깊이가 필요한 기타 화염 이펙트를 생성할 때 사용됩니다.

3D 기체

가장 일반적인 타입의 기체 시뮬레이션입니다. 2D 기체와 비교했을 때 3D 기체는 더 많은 메모리와 GPU 비용을 사용하여 깊이와 더 복잡한 흐름을 시뮬레이션합니다.

이 시뮬레이터 타입은 실시간 애플리케이션의 히어로 이펙트와 시네마틱에 가장 적합합니다. 결과를 텍스처로 구워 실시간 퍼포먼스를 높일 수 있습니다.

2D 플립

2D 플립은 3D 파티클을 샘플링하고, 압력이 해석되며 FLIP 알고리즘이 적용되는 2D 시뮬레이션 도메인을 생성하여 파티클을 업데이트합니다. 일반적으로 도메인은 카메라와 정렬되어 2D 플루이드 포스 사용에도 불구하고 복잡한 3D 모양의 흐름을 허용합니다. 물이 튀는 이펙트를 시뮬레이션하는 데는 유용하지만 고인 물에는 사용할 수 없습니다.

섈로 워터

2D 플립과 달리 섈로 워터는 물이 튀는 이펙트가 많지 않은 고인 물을 시뮬레이션하는 데 유용합니다. 보트를 물에 띄우는 모습이나 물을 따라 움직이는 오브젝트와의 간단한 상호작용을 시뮬레이션하는 데 유용합니다.

3D 플립

3D 플립 시뮬레이션은 해변의 파도, 강, 그리고 복잡한 오브젝트 상호작용 같은 다양한 이펙트를 시뮬레이션할 수 있는 강력한 액체 시뮬레이션입니다. 이러한 복잡한 시뮬레이션은 연산 비용이 많이 들 수 있습니다.

시뮬레이션 제어하기

| 참고 자세한 내용은 플루이드 시뮬레이션 참조 가이드를 확인하세요. |

나이아가라 플루이드 시뮬레이션에는 다양한 파라미터, 모듈, 사전 환경설정된 시스템이 포함되어 나이아가라 에디터에서 시뮬레이션이 생성되는 방법을 제어합니다. 이 가이드는 가장 일반적인 사항을 요약합니다.

퀄리티

셀 최대 축 수(Num Cells Max Axis) 파라미터는 월드 스페이스에 있는 시뮬레이션 도메인의 가장 큰 축을 따라 최대 셀 수를 제어합니다.

압력 반복작업(Pressure Iterations) 파라미터는 시뮬레이션의 반복작업 수를 설명합니다. 숫자가 클수록 흐름이 더 정확합니다. 액체의 경우 이 값이 대체로 높습니다.

소싱

Grid3D_Gas_ParticleSource 시스템은 일반적으로 기체 시뮬레이션에 사용되며, 파티클은 주로 시뮬레이션 그리드에 값을 표시하는 데 사용됩니다.

포스

플루이드 시뮬레이션을 제어하는 포스를 생성하는 데 사용할 수 있는 몇 가지 나이아가라 모듈이 있습니다. FLIP 시뮬레이션의 경우 파티클 업데이트(Particle Update) 를 사용하여 플루이드 행동을 수정할 수 있습니다.

콜리전

3D 시뮬레이션의 경우 Grid3D_ComputeBoundary 모듈에 모든 콜리전 옵션이 포함되어 있습니다. 모듈은 3D 기체나 액체, 그리고 스태틱 메시 디스턴스 필드(Static Mesh Distance Field)와 피직스 에셋(Physics Asset), 지오메트리 컬렉션(Geometry Collection), 깊이 버퍼(Depth Buffer), 랜드스케이프(Landscape) 같은 오브젝트 사이의 콜리전을 환경설정할 수 있습니다.

렌더링

기체

라이트 굽기

구워진 라이트를 사용하는 기체 시뮬레이션은 그리드에 섀도를 구워 셀프 섀도잉을 달성합니다. 이후 데이터는 렌더링을 위해 머티리얼로 전달됩니다.

3D 기체 시뮬레이션에서 컴퓨트 라이팅 시뮬레이션 스테이지(Compute Lighting Simulation Stage)에 있는 다양한 파라미터를 살펴보세요. 이러한 파라미터는 그리드 3D 굽기 디렉셔널 라이트(Grid 3D Bake Directional Light)그리드 3D 굽기 포인트 라이트(Grid 3D Bake Point Light) 모듈 내에서 수정할 수 있습니다.

레이 마칭 셰이더

레이 마칭 셰이더를 사용하는 기체 시뮬레이션의 경우 시스템에서 플루이드 바운딩 박스를 렌더링하고 NiagaraFluidsContent 폴더에 있는 M_RayMarch_Fire 와 같은 레이 마칭 셰이더를 사용합니다.

커스텀 HLSL 레이 마치 볼륨(Raymarch Volume) 은 셰이더가 휘도와 스캐터링, 지정된 레이 스텝에 대한 라이트의 소멸 계산 방법을 정의합니다. 머티리얼 인스턴스 내에 있는 Step Size Mult 파라미터에서 퀄리티를 제어합니다.

액체

표면화

액체는 표면에서 가장 잘 표현되지만 점으로 시뮬레이트됩니다. 시스템은 FLIP 이미터의 채우기 래스터라이제이션 그리드 시뮬레이션 스테이지(Fill Rasterization Grid Simulation Stage)에 있는 부호화된 디스턴스 필드로 파티클을 변환합니다.

구체 트레이싱

시스템은 구체 트레이싱을 사용하여 시뮬레이션되는 액체 표면에 대해 부호화된 디스턴스 필드까지의 거리를 기반으로 레이 마칭 스텝 크기를 조정합니다.

M_WaterSDF 머티리얼은 싱글 레이어 워터(Single Layer Water) 셰이딩 모델과 함께 이 기법을 사용하여 플루이드 표면을 시뮬레이션합니다.