발자국, 물튀김과 같은 이펙트
이전 절에서는 불꽃, 연기, 폭발과 같은 비교적 독립적인 파티클 이펙트 제작의 기본 원리를 살펴보았습니다. 이제는 게임 월드나 플레이어의 행동과 더욱 밀접하게 연관되는, 즉 게임플레이 요소에 반응하는 섬세한 파티클 이펙트를 만드는 방법에 대해 알아보겠습니다. 대표적인 예시가 바로 발자국(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
모듈
Velocity
를Cone
또는Sphere
형태로 설정하고,Cone Axis
를User.GroundNormal
로 연결하여 파티클이 지면에서 위로 퍼지도록 합니다.Speed
나Radius
입력에Get Parameter
(User.ImpactForce) 노드를 연결하여 발을 딛는 힘에 따라 파티클이 퍼지는 속도를 조절합니다.
Particle Update
섹션
Add Gravity Force
: 약하게 적용하여 먼지가 천천히 가라앉도록 합니다.Drag
: 강하게 적용하여 먼지가 빠르게 감속하고 사라지도록 합니다.Noise Force
: 약하게 적용하여 먼지의 흐름에 미세한 불규칙성을 줍니다.Collision
:Collision
모듈을 추가하고Kill On Collision
을 활성화하여 먼지가 지면에 닿으면 즉시 사라지도록 합니다.Restitution
은0.0
,Friction
은1.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 Normal
을Z
입력에 연결합니다.Parameters
핀을 활성화하고Make Niagara System Spawn Info
노드를 추가합니다.User.ImpactForce
변수에 캐릭터의 속도(예:Get Velocity
노드의Vector Length
결과)를 연결하여 속도에 따라 먼지 강도를 조절합니다.User.GroundNormal
변수에Impact Normal
을 연결합니다.
- 새로 만든 블루프린트 노티파이(
블루프린트와 애니메이션을 저장하고 게임을 플레이하여 캐릭터가 걸을 때마다 발밑에서 먼지가 발생하는지 확인합니다.
물 튀김 이펙트 제작
물 튀김 이펙트는 물방울이 튀는 표면의 특성(예: 깊이, 물체의 속도)에 따라 다르게 나타납니다. Collision
과 Fluid
응답을 활용하여 물속으로 들어가는 오브젝트에 대한 반응을 만들 수 있습니다.
물 튀김 이펙트 나이아가라 시스템
새 나이아가라 시스템 생성: 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
방향으로 퍼지게 합니다.Speed
를User.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
을 호출하는 대신 이미 생성된 컴포넌트를 재활용하는 것이 성능에 유리합니다.
발자국이나 물 튀김과 같은 게임플레이 반응형 이펙트들은 나이아가라와 블루프린트의 연동을 통해 생동감 있는 게임 월드를 만드는 핵심 요소입니다. 캐릭터의 행동, 환경과의 상호작용에 따라 동적으로 변화하는 이러한 효과들은 플레이어에게 더욱 깊은 몰입감을 선사할 것입니다. 이 섹션의 지식들을 바탕으로 다양한 재질의 발자국 효과나 여러 종류의 물 튀김 효과를 구현해 보세요.