icon
7장 : 간단한 콜리전과 물리

간단한 유체 효과 구현하기


나이아가라는 파티클에 중력이나 저항 같은 고전적인 물리 법칙을 적용하는 것을 넘어, 유체(Fluid) 와 같은 동적인 환경 상호작용을 시뮬레이션할 수 있는 기능을 제공합니다. 복잡한 유체 역학 시뮬레이션은 아니지만, 파티클이 연기처럼 흐르거나, 물속에서 움직이거나, 소용돌이에 휩쓸리는 듯한 효과를 만들 수 있습니다. 이는 폭발 후의 연기 기둥, 물속 거품, 바람에 날리는 먼지 등 자연스러운 환경 효과를 구현하는 데 매우 유용합니다.

이 절에서는 나이아가라의 내장 기능을 활용하여 파티클에 간단한 유체 효과를 적용하는 기본적인 방법에 대해 알아보겠습니다.


Grid 3D 기반의 유체 시뮬레이션

나이아가라에서 간단한 유체 효과를 구현하는 한 가지 방법은 Collision 모듈의 Fluid 응답과 그리드 기반 시뮬레이션을 활용하는 것입니다. 이는 파티클이 특정 영역 내에서 유체와 유사한 움직임을 보이도록 할 때 사용됩니다.

Collision 모듈의 Fluid 응답

이전 절에서 다룬 Collision 모듈에는 파티클이 충돌했을 때의 응답 방식 중 Fluid 옵션이 있습니다. 이는 파티클이 유체 표면에 닿았을 때 멈추거나 튕기는 대신, 유체 속으로 들어가 유체의 흐름에 영향을 받거나 유체의 특성에 따라 움직이는 것을 모방합니다.

  • 설정

    Particle Update 섹션에 Collision 모듈을 추가합니다.

    Collision 모듈의 Collision ModeDistance Field 또는 Trace로 설정합니다. (유체 표면과 충돌을 감지하기 위함)

    가장 중요한 설정으로, Collision 모듈의 Responses 섹션에서 Restitution이나 Friction 대신 Fluid 옵션을 활성화합니다.

    • Fluid Density Scale: 유체의 밀도에 대한 파티클의 상대적인 밀도를 조절합니다. 값이 낮으면 파티클이 더 쉽게 뜨거나 움직이고, 높으면 더 가라앉거나 저항을 더 받습니다.
    • Fluid Resistace: 유체가 파티클의 움직임에 얼마나 저항하는지를 조절합니다.
  • 활용: 파티클이 물 표면에 닿아 물속으로 가라앉는 듯한 효과나, 유체 경계면에서 움직임이 변화하는 효과를 만들 때 사용됩니다.

Force 필드를 활용한 유체 흐름

더욱 직접적으로 유체와 유사한 흐름을 만들 때는 파티클에 힘(Force)을 가하는 필드를 활용합니다. 이는 공간의 특정 영역에서 파티클에 일정한 힘을 가하여 마치 바람이나 물살에 휩쓸리는 듯한 효과를 줍니다.

Vector Field Force (방향성 흐름)

Vector Field Force 모듈은 미리 정의된 벡터 필드(Vector Field) 데이터를 참조하여 파티클에 힘을 가합니다. 벡터 필드는 공간의 각 지점에서 힘의 방향과 크기를 정의하는 3D 데이터입니다.

  • 설정

    Particle Update 섹션에 Vector Field Force 모듈을 추가합니다.

    Vector Field 속성에 원하는 Vector Field 에셋을 할당합니다. 언리얼 엔진은 기본적으로 몇 가지 Vector Field 에셋(예: VF_Turbulence)을 제공하며, 외부 툴(Houdini, FumeFX 등)에서 커스텀 벡터 필드를 제작하여 임포트할 수도 있습니다.

    Intensity를 조절하여 벡터 필드가 파티클에 미치는 힘의 강도를 제어합니다.

  • 활용: 폭발 후의 회오리치는 연기, 물속 소용돌이, 특정 방향으로 흐르는 바람 효과 등 복잡하고 방향성 있는 유체 흐름을 모방할 때 사용됩니다.

Noise Force (불규칙한 흐름/터뷸런스)

Noise Force 모듈은 노이즈 함수를 기반으로 파티클에 불규칙하고 역동적인 힘을 가합니다. 이는 연기나 액체의 터뷸런스(Turbulence), 즉 난류 효과를 표현하는 데 매우 효과적입니다.

  • 설정

    Particle Update 섹션에 Noise Force 모듈을 추가합니다.

    Noise Strength (노이즈 강도): 노이즈가 파티클에 가하는 힘의 크기를 조절합니다.

    Noise Frequency (노이즈 주파수): 노이즈 패턴의 반복 빈도(세부 정도)를 조절합니다. 주파수가 높으면 더 작고 빠른 변화가 생깁니다.

    Noise Speed (노이즈 속도): 노이즈 패턴이 시간에 따라 얼마나 빠르게 변하는지를 조절합니다. 이 값이 높으면 연기가 빠르게 휘저어지는 것처럼 보입니다.

  • 활용: 연기나 구름의 불규칙한 움직임, 물속에서 발생하는 미세한 흐름, 먼지 폭풍의 난류 등 자연스러운 불규칙성을 가진 유체 효과를 표현하는 데 광범위하게 사용됩니다.

유체 효과를 위한 렌더링 고려 사항

유체와 유사한 파티클 효과를 만들 때는 렌더링 설정도 중요합니다.

  • Translucent 블렌드 모드: 연기, 안개, 물방울 등 대부분의 유체 효과는 반투명한 특성을 가지므로, 머티리얼의 Blend ModeTranslucent로 설정하는 것이 가장 일반적입니다.
  • Soft Particle: 파티클이 다른 오브젝트와 교차할 때 경계가 부드럽게 보이도록 Sprite RendererSoft Particle 옵션을 활성화하는 것이 좋습니다. 이는 파티클이 벽이나 바닥에 닿았을 때 부자연스럽게 잘리는 것을 방지합니다.
  • 볼류메트릭 렌더링 (고급): 나이아가라 렌더러는 아니지만, 언리얼 엔진의 Volumetric CloudVolumetric Fog와 같은 볼류메트릭 시스템과 나이아가라 파티클을 함께 사용하면 훨씬 더 사실적인 구름이나 안개 효과를 만들 수 있습니다.

직접 해보기: 간단한 연기 기둥 만들기

중력과 노이즈 힘을 받아 하늘로 피어오르는 연기 기둥 효과를 만들어 보겠습니다.

새 나이아가라 시스템 생성: New system from selected emitters (기본 스폰, 중력 포함) 템플릿을 사용하여 NS_SimpleSmoke라는 이름의 시스템을 만듭니다.

Initialize Particle 설정

  • Lifetime: 3.0 ~ 5.0 (Random Float) (연기가 서서히 사라지도록)
  • Sprite Size: 50.0 ~ 100.0 (Random Float) (연기가 퍼지면서 커지도록)
  • Color: 어두운 회색 (R:0.1, G:0.1, B:0.1, A:1)

Add Velocity 설정

  • Velocity Z 값을 50.0 ~ 100.0 (Random Float) 정도로 설정하여 연기가 위로 천천히 솟아오르게 합니다.
  • XYRandom Range Float를 사용하여 -10.0 ~ 10.0 정도로 미세한 무작위 수평 속도를 추가합니다.

Add Gravity Force 확인: Particle Update 섹션에 Add Gravity Force 모듈이 있는지 확인하고, 필요하다면 Gravity 값을 낮게 설정하여 연기가 아주 천천히 떨어지도록 하거나 (예: Z: -200.0), 아예 제거하여 중력 영향을 받지 않게 할 수도 있습니다.

Drag 모듈 추가

  • Particle Update 섹션에 Drag 모듈을 추가합니다.
  • Drag 값을 0.5 정도로 설정하여 연기가 서서히 감속하도록 합니다.

Noise Force 모듈 추가

  • Particle Update 섹션에 Noise Force 모듈을 추가합니다.
  • Noise Strength: 500.0 ~ 1000.0 (Random Float) (연기가 휘저어지는 강도)
  • Noise Frequency: 0.1 ~ 0.3 (Random Float) (연기 패턴의 크기)
  • Noise Speed: 0.5 ~ 1.0 (Random Float) (연기 변화 속도)

렌더링 설정 (Sprite Renderer)

  • Sprite Renderer를 선택합니다.
  • Material: 연기 텍스처를 포함하고 Translucent 블렌드 모드로 설정된 머티리얼을 할당합니다. (엔진 기본 M_Smoke_SubUV 등을 사용하거나, 직접 만듭니다.)
  • Soft Particle 옵션을 활성화합니다.

파티클 색상 및 알파 변화 (Scale Color)

  • Particle Update 섹션에 Scale Color 모듈을 추가합니다.
  • Scale FactorColor From Curve로 설정하고, Particles.NormalizedAge를 입력으로 사용하여 수명에 따라 연기의 색상이 검은색에서 회색으로 변하고, 알파(투명도)는 1.0에서 0.0으로 점차 사라지도록 커브를 조절합니다.

이제 뷰포트에서 연기가 중력과 노이즈 힘에 의해 불규칙하게 휘저어지며 위로 솟아오르다가 서서히 사라지는 것을 확인할 수 있을 겁니다.


나이아가라에서 간단한 유체 효과를 구현하는 것은 Drag, Noise Force, Vector Field Force와 같은 힘 모듈들을 적절히 조합하고, 렌더링 설정을 최적화하는 데 있습니다. 이를 통해 여러분은 폭발의 여파, 환경적인 안개, 물속의 움직임 등 다양한 유체 기반의 시각 효과를 만들어내어 게임 씬의 몰입도를 한층 높일 수 있을 것입니다.