icon
9장 : 기본 파티클 이펙트 제작

발자국, 물튀김과 같은 이펙트


이전 절에서는 불꽃, 연기, 폭발과 같은 비교적 독립적인 파티클 이펙트 제작의 기본 원리를 살펴보았습니다. 이제는 게임 월드나 플레이어의 행동과 더욱 밀접하게 연관되는, 즉 게임플레이 요소에 반응하는 섬세한 파티클 이펙트를 만드는 방법에 대해 알아보겠습니다. 대표적인 예시가 바로 발자국(Footstep) 효과와 물 튀김(Water Splash) 효과입니다.

이러한 이펙트들은 단순히 시각적인 정보를 제공하는 것을 넘어, 플레이어가 걷는 지면의 재질(흙, 물, 눈 등)이나 오브젝트의 상호작용(물 속으로 떨어지는 물체)에 따라 동적으로 변화해야 하므로, 나이아가라 시스템과 블루프린트의 긴밀한 연동이 필수적입니다.


발자국 이펙트 제작

발자국 이펙트는 캐릭터가 지면을 밟을 때 발생하는 먼지, 흙먼지, 눈 발자국, 물 튀김 등 다양한 형태를 가집니다. 핵심은 캐릭터의 발이 지면에 닿는 정확한 시점과 위치에 파티클을 스폰하는 것입니다.

발자국 이펙트 나이아가라 시스템

먼저, 발자국 이펙트에 사용될 나이아가라 시스템을 만듭니다.

새 나이아가라 시스템 생성: New system from selected emitters > Fountain 템플릿을 사용하여 NS_FootstepDust와 같은 이름으로 생성합니다.

Emitter Update

  • Spawn Rate 모듈을 제거합니다. (블루프린트에서 버스트 스폰할 것이므로)
  • 사용자 변수 노출: Parameters 패널User 섹션에서 + 버튼을 클릭하고 Add User Parameter > Float를 선택하여 User.ImpactForce (발을 딛는 힘의 정도)를 만듭니다. (기본값 1.0)
  • + 버튼을 클릭하고 Add User Parameter > Vector를 선택하여 User.GroundNormal (지면의 노멀 방향)을 만듭니다. (기본값 (0,0,1))

Initialize Particle 모듈

  • Lifetime: 0.5 ~ 1.0 (짧게 설정)
  • Sprite Size: 5.0 ~ 15.0 (작은 먼지 효과에 적합)
  • Color: 지면 재질에 맞는 색상 (예: 흙먼지는 갈색, 눈은 흰색)

Add Velocity 모듈

  • VelocityCone 또는 Sphere 형태로 설정하고, Cone AxisUser.GroundNormal 로 연결하여 파티클이 지면에서 위로 퍼지도록 합니다.
  • SpeedRadius 입력에 Get Parameter (User.ImpactForce) 노드를 연결하여 발을 딛는 힘에 따라 파티클이 퍼지는 속도를 조절합니다.

Particle Update 섹션

  • Add Gravity Force: 약하게 적용하여 먼지가 천천히 가라앉도록 합니다.
  • Drag: 강하게 적용하여 먼지가 빠르게 감속하고 사라지도록 합니다.
  • Noise Force: 약하게 적용하여 먼지의 흐름에 미세한 불규칙성을 줍니다.
  • Collision: Collision 모듈을 추가하고 Kill On Collision을 활성화하여 먼지가 지면에 닿으면 즉시 사라지도록 합니다. Restitution0.0, Friction1.0으로 설정합니다.

Spawn Burst Instantaneous 모듈 추가

  • Emitter Update 섹션에서 Spawn Burst Instantaneous 모듈을 추가합니다.
  • Spawn Count 입력에 Get Parameter (User.ImpactForce) 노드를 연결하고 원하는 계수를 곱하여 발을 딛는 힘에 따라 먼지 파티클 수가 조절되도록 합니다.

렌더링 설정

  • Sprite Renderer를 사용하고, 먼지/연기 텍스처를 가진 Translucent 머티리얼을 할당합니다.
  • Soft Particle을 활성화합니다.

시스템을 저장합니다.

캐릭터 블루프린트 설정합니다

캐릭터 블루프린트에서 발이 지면에 닿는 애니메이션 프레임에 맞춰 파티클을 스폰합니다. 이는 애니메이션 노티파이(Animation Notify) 를 활용하는 것이 일반적입니다.

캐릭터 애니메이션 시퀀스/몽타주 열기: 캐릭터의 걷기/달리기 애니메이션 시퀀스 또는 애니메이션 몽타주를 엽니다.

애니메이션 노티파이 추가

  • Notify 트랙을 추가하거나 기존 트랙을 사용합니다.
  • 발이 지면에 닿는 정확한 프레임에서 우클릭하고 Add Notify > PlayParticleEffect (기본 제공 노티파이) 또는 New Notify > Sound, Blueprint 등 원하는 유형의 커스텀 노티파이를 추가합니다.
  • PlayParticleEffect를 사용할 경우 Niagara System 속성에 위에서 만든 NS_FootstepDust를 할당합니다. Location, Rotation, Socket Name 등을 설정합니다. (발 소켓에 부착)
  • 추천: 보다 정밀한 제어를 위해 New Notify > Blueprint Notify 를 생성합니다. (예: BP_AnimNotify_Footstep)
    • 새로 만든 블루프린트 노티파이(BP_AnimNotify_Footstep)를 열고 Received_Notify 이벤트를 오버라이드합니다.
    • 이 이벤트에서 라인 트레이스 바이 채널(Line Trace By Channel) 노드를 사용하여 발 아래 지면의 정보를 가져옵니다. (Start: 발 소켓 위치, End: 발 소켓 아래로 조금 내려간 위치)
    • 라인 트레이스 결과(Hit Result)에서 Impact Point (충돌 지점)와 Impact Normal (충돌 표면 노멀)을 가져옵니다.
    • Spawn System at Location 노드를 사용하여 NS_FootstepDust를 스폰합니다.
    • Location 핀에 Impact Point를 연결합니다.
    • Rotation 핀에 Make Rot From Z 노드를 연결하고 Impact NormalZ 입력에 연결합니다.
    • Parameters 핀을 활성화하고 Make Niagara System Spawn Info 노드를 추가합니다.
    • User.ImpactForce 변수에 캐릭터의 속도(예: Get Velocity 노드의 Vector Length 결과)를 연결하여 속도에 따라 먼지 강도를 조절합니다.
    • User.GroundNormal 변수에 Impact Normal을 연결합니다.

블루프린트와 애니메이션을 저장하고 게임을 플레이하여 캐릭터가 걸을 때마다 발밑에서 먼지가 발생하는지 확인합니다.


물 튀김 이펙트 제작

물 튀김 이펙트는 물방울이 튀는 표면의 특성(예: 깊이, 물체의 속도)에 따라 다르게 나타납니다. CollisionFluid 응답을 활용하여 물속으로 들어가는 오브젝트에 대한 반응을 만들 수 있습니다.

물 튀김 이펙트 나이아가라 시스템

새 나이아가라 시스템 생성: New system from selected emitters > Fountain 템플릿을 사용하여 NS_WaterSplash와 같은 이름으로 생성합니다.

Emitter Update

  • Spawn Rate 모듈을 제거합니다.
  • 사용자 변수 노출
    • User.SplashIntensity (Float, 물 튀김 강도)
    • User.SurfaceNormal (Vector, 물 표면의 노멀)

Initialize Particle 모듈

  • Lifetime: 0.5 ~ 1.5 (짧게)
  • Sprite Size: 5.0 ~ 20.0 (물방울 크기)
  • Color: 물색 (하늘색, 파란색)
  • Initial Velocity: Add Velocity 모듈에서 Cone 형태로 User.SurfaceNormal 방향으로 퍼지게 합니다. SpeedUser.SplashIntensity에 비례하게 설정합니다.

Particle Update 섹션

  • Add Gravity Force: 강하게 적용하여 물방울이 빠르게 떨어지도록 합니다.
  • Drag: 약하게 적용하여 물방울이 공기 저항으로 인해 너무 빨리 멈추지 않도록 합니다.
  • Collision: Collision 모듈을 추가합니다.
    • Collision Mode: Distance Field 또는 Trace
    • Kill On Collision: 활성화 (물방울이 표면에 닿으면 사라짐)
    • Restitution: 0.0 (튕기지 않음)
    • Friction: 1.0 (닿으면 바로 멈춤)

Spawn Burst Instantaneous 모듈 추가

  • Spawn Count 입력에 Get Parameter (User.SplashIntensity) 노드를 연결하고 적절한 계수를 곱하여 강도에 따라 물방울 수가 조절되도록 합니다.

렌더링 설정

  • Sprite Renderer
  • Material: 물방울 텍스처를 가진 Translucent 또는 Additive 블렌드 모드, Unlit 셰이딩 모델을 사용합니다.

시스템을 저장합니다.

블루프린트에서 물 튀김 스폰

물속으로 들어가는 오브젝트(예: 던진 돌, 캐릭터 점프)의 On Component Hit 또는 On Component Begin Overlap 이벤트에서 Spawn System at Location 또는 Spawn System Attached를 사용합니다.

물체가 떨어지는 물의 Blocking Volume 또는 Static Mesh 컴포넌트를 준비합니다.

물체 블루프린트 (예: BP_ThrowableRock)를 엽니다.

물체의 Collision Component를 선택하고 On Component Hit 이벤트를 추가합니다.

Event Hit 노드에서 실행 핀을 연결하여 다음 노드를 추가합니다.

  • Hit 이벤트의 Hit Component가 물을 나타내는 컴포넌트인지 Cast To 또는 Equal 노드로 확인합니다.
  • 조건이 참일 경우 Spawn System at Location 노드를 사용합니다.
  • Niagara System: NS_WaterSplash 할당.
  • Location: Hit Location (충돌 지점)
  • Rotation: Make Rot From Z 노드에 Hit Normal을 연결하여 물 표면에 수직으로 스폰.
  • Parameters 핀 활성화
    • Make Niagara System Spawn Info 노드를 추가합니다.
    • User.SplashIntensity (Float)에 Hit 이벤트의 Normal Impulse 또는 Hit 이벤트의 Velocity (물체가 충돌한 속도)의 Vector Length 값을 연결합니다. (Map Range Clamped로 적절히 스케일링)
    • User.SurfaceNormal (Vector)에 Hit Normal을 연결합니다.

블루프린트를 컴파일하고 저장한 뒤 게임을 플레이하여 물체가 물에 닿을 때 물 튀김이 발생하는지 확인합니다.


성능 최적화 (발자국/물 튀김)

이러한 이펙트들은 자주 발생할 수 있으므로, 최적화가 더욱 중요합니다.

  • 짧은 Lifetime: 파티클의 수명을 최대한 짧게 유지하여 동시에 활성화되는 파티클 수를 줄입니다.
  • 낮은 Spawn Count: 시각적 품질을 해치지 않는 선에서 Spawn Burst의 수를 최소화합니다.
  • 간단한 머티리얼: Unlit & Translucent 또는 Additive 블렌드 모드의 간단한 텍스처 머티리얼을 사용합니다.
  • Collision 최소화: Collision 모듈의 복잡한 설정을 피하고, Max Collisions를 1로 설정하여 한 번 충돌 후 바로 사라지게 하는 등 불필요한 계산을 줄입니다.
  • 오브젝트 풀링: 매우 자주 발생하는 효과(예: 발자국)의 경우, 블루프린트에서 나이아가라 컴포넌트 풀링 시스템을 구현하여 매번 Spawn System at Location을 호출하는 대신 이미 생성된 컴포넌트를 재활용하는 것이 성능에 유리합니다.

발자국이나 물 튀김과 같은 게임플레이 반응형 이펙트들은 나이아가라와 블루프린트의 연동을 통해 생동감 있는 게임 월드를 만드는 핵심 요소입니다. 캐릭터의 행동, 환경과의 상호작용에 따라 동적으로 변화하는 이러한 효과들은 플레이어에게 더욱 깊은 몰입감을 선사할 것입니다. 이 섹션의 지식들을 바탕으로 다양한 재질의 발자국 효과나 여러 종류의 물 튀김 효과를 구현해 보세요.