VFX Graph로 설계하는 필살기 연출: 타이밍, 궤적, 충돌을 분리하자

VFX Graph로 설계하는 필살기 연출: 타이밍, 궤적, 충돌을 분리하자

Unity VFX Graph에서 필살기 연출을 만들 때 필요한 구성 요소를 타이밍과 역할별로 나누어 설계하는 방법을 정리합니다. C# 이벤트 연동과 성능 점검 기준까지 실용적으로 다룹니다.

필살기는 한 개의 이펙트가 아니다

화려한 필살기 연출은 큰 폭발 하나를 재생해서 만들기보다 플레이어가 공격을 인지하는 순서에 맞춰 여러 효과를 쌓아 만드는 편이 안정적이다. 준비 동작에서는 에너지가 모이고 발동 순간에는 화면의 시선이 기술 중심으로 이동하며 명중 시에는 강한 대비와 짧은 충격이 남아야 한다.

VFX Graph는 많은 파티클을 GPU에서 처리하므로 잔상, 불꽃, 광선, 충격파처럼 개체 수가 많은 효과에 적합하다. 반면 애니메이션 재생, 피해 판정, 카메라 제어처럼 게임 규칙과 밀접한 일은 C#과 Animator, 게임플레이 코드가 맡는 것이 좋다.

필살기 준비 단계에서 캐릭터 주변으로 에너지가 수렴하는 VFX Graph 예시

연출을 네 단계로 나누기

필살기를 하나의 그래프에 전부 넣으면 수정 범위가 커지고 재사용도 어려워진다. 보통은 아래처럼 역할이 분명한 효과 단위로 나누는 것이 좋다.

flowchart LR
  A[예고
  에너지 수렴] --> B[발동
  섬광과 추진]
  B --> C[비행 또는 타격
  궤적과 잔상]
  C --> D[명중
  폭발과 충격파]
  D --> E[잔류
  연기와 불꽃]
  • 예고: 바닥 마법진, 몸 주변의 입자, 조명 변화로 공격 직전임을 알린다.
  • 발동: 짧은 섬광과 고속 입자로 에너지가 방출되는 순간을 강조한다.
  • 비행 또는 타격: 투사체 본체, 트레일, 왜곡 효과로 이동 방향과 속도를 읽히게 한다.
  • 명중과 잔류: 폭발은 짧고 강하게, 연기나 불티는 길고 약하게 남긴다.

특히 명중 효과는 첫 프레임의 반응이 중요하다. 큰 스프라이트를 오래 보이게 하기보다 아주 짧은 플래시, 빠르게 퍼지는 링, 뒤늦게 떨어지는 파편을 조합하면 타격감과 공간감을 함께 만들 수 있다.

VFX Graph 구성 원칙

그래프는 효과 단위로 분리한다

UltimateCharge, UltimateProjectile, UltimateImpact처럼 기능별로 VFX Graph Asset을 나눈다. 예를 들어 충전 효과는 캐릭터의 손 위치를 계속 따라가야 하지만 명중 효과는 충돌 지점에서 한 번만 재생하면 된다. 두 요구를 하나의 그래프에 넣으면 노출 파라미터와 조건 분기가 불필요하게 늘어난다.

각 그래프에는 다음처럼 최소한의 파라미터만 노출한다.

효과권장 파라미터용도
충전FollowPosition, Intensity, Color손 위치 추적과 차지 단계 표현
투사체StartPosition, Direction, Speed발사 위치와 진행 방향 설정
명중ImpactPosition, ImpactNormal, Scale충돌 지점과 표면 방향 반영

ColorIntensity처럼 연출자가 자주 조정할 값은 노출하되 내부 난수 범위나 개별 블록의 세부 값까지 모두 공개할 필요는 없다. 파라미터가 너무 많으면 프리팹마다 의도를 파악하기 어려워진다.

위치 공간을 먼저 결정한다

VFX Graph의 시뮬레이션 공간은 연출의 안정성에 직접 영향을 준다.

  • 캐릭터의 손 주변에서 계속 맴도는 충전 입자는 Local Space가 자연스럽다.
  • 세계에 남아 퍼지는 폭발, 연기, 충격파는 대체로 World Space가 적합하다.
  • 빠르게 이동하는 투사체의 트레일은 투사체 이동과 함께 보일지 지나간 위치에 남을지를 먼저 결정한 뒤 공간을 선택한다.

예를 들어 월드 공간 폭발을 캐릭터 자식 오브젝트에 붙여 재생하면 캐릭터가 이동할 때 폭발도 함께 끌려갈 수 있다. 충돌 지점에 남아야 하는 효과라면 재생 시점에 위치만 전달하고 그래프 자체는 월드 기준으로 시뮬레이션하는 편이 안전하다.

명중 지점의 법선 방향에 맞춰 충격파와 파편이 퍼지는 필살기 타격 이펙트 예시

충돌 지점과 방향을 이벤트로 전달하기

VFX Graph에는 이벤트 이름을 만들고 코드에서 해당 이벤트를 보내는 방식으로 효과를 발동할 수 있다. 충돌 순간에 위치와 법선을 함께 전달하면 벽, 바닥, 경사면에서 같은 이펙트를 더 자연스럽게 사용할 수 있다.

using UnityEngine;
using UnityEngine.VFX;

public class UltimateImpactVfx : MonoBehaviour
{
    [SerializeField] private VisualEffect impactVfx;
    [SerializeField] private string impactEventName = "OnImpact";

    private static readonly int ImpactPosition = Shader.PropertyToID("ImpactPosition");
    private static readonly int ImpactNormal = Shader.PropertyToID("ImpactNormal");
    private static readonly int ImpactScale = Shader.PropertyToID("ImpactScale");

    public void Play(Vector3 position, Vector3 normal, float scale)
    {
        impactVfx.SetVector3(ImpactPosition, position);
        impactVfx.SetVector3(ImpactNormal, normal.normalized);
        impactVfx.SetFloat(ImpactScale, scale);
        impactVfx.SendEvent(impactEventName);
    }
}

그래프 안에서는 ImpactPosition을 Initialize 컨텍스트의 위치에 사용하고 ImpactNormal을 방향 축으로 사용한다. 메시 파편이나 원형 충격파는 법선 방향을 기준으로 회전시키고 불티는 법선 주변의 원뿔 범위로 속도를 주면 표면에서 튀는 느낌을 낼 수 있다.

이벤트는 시각 효과를 시작하는 신호일 뿐이다. 피해 적용이나 적 넉백은 VFX 이벤트에 의존하지 말고 게임플레이 코드에서 같은 충돌 결과를 기준으로 처리해야 한다. 그래야 그래픽 품질 설정에서 이펙트를 줄이더라도 게임 규칙이 달라지지 않는다.

타격감을 만드는 세 가지 대비

시간 대비

모든 효과가 같은 속도로 재생되면 강한 기술처럼 보이기 어렵다. 발동 직전에는 입자를 조금 모으고 발동 순간에는 짧은 섬광과 빠른 확산을 사용하며 이후에는 느린 연기와 잔광을 남긴다. 가장 밝고 큰 변화는 명중 프레임 주변의 짧은 구간에 집중하는 편이 좋다.

크기 대비

작은 입자가 모인 뒤 큰 충격파가 퍼지면 스케일 변화가 읽힌다. 반대로 큰 폭발만 계속 사용하면 공격 범위와 실제 충돌 지점을 구분하기 어려워진다. 중심에는 작은 고휘도 플래시를 두고 바깥에는 더 큰 링이나 왜곡을 배치해 중심을 분명하게 만든다.

색 대비

충전 단계와 발동 단계를 같은 색으로 유지해도 괜찮지만 명중 순간에는 밝기나 색온도를 짧게 바꿔 변화를 만들어야 한다. 다만 화면 전체를 순백색으로 덮는 플래시는 반복 전투에서 피로를 줄 수 있으므로 강도와 지속 시간을 제한하는 것이 좋다.

성능을 확인할 때 볼 항목

VFX Graph는 CPU 부담을 줄일 수 있지만 화면에 그리는 비용까지 자동으로 줄여 주지는 않는다. 필살기는 화면을 크게 차지하는 경우가 많아서 오버드로와 투명 파티클 비용을 먼저 점검해야 한다.

  • 파티클 최대 수와 스폰 비율에 상한을 둔다.
  • 큰 반투명 쿼드가 화면을 오래 덮지 않도록 수명과 크기를 조절한다.
  • 충격파, 왜곡, 블룸이 겹치는 구간은 실제 전투 카메라에서 확인한다.
  • 멀리 있는 이펙트는 LOD나 거리 기반 스폰 감소를 적용한다.
  • 같은 명중 효과가 연속 발생할 수 있다면 VFX 인스턴스를 재사용하거나 동시 재생 수를 제한한다.

Profiler와 Frame Debugger로 확인할 때는 평균 비용보다 최악의 장면을 우선 본다. 여러 적이 동시에 필살기를 쓰거나 카메라가 효과에 가까이 붙는 상황에서 프레임이 유지되는지가 중요하다.

마무리

필살기 연출의 핵심은 파티클 수가 아니라 정보의 순서다. 플레이어가 준비를 알아차리고 발동 방향을 읽고 명중 지점을 즉시 이해하도록 예고·발동·타격·잔류를 분리해 설계하자. VFX Graph는 그중 반복적이고 밀도 높은 시각 요소를 담당하게 하고 충돌과 피해 같은 게임 규칙은 별도의 코드에서 관리하면 수정과 최적화가 훨씬 수월해진다.

#Unity#VFX Graph#파티클#셰이더#게임 연출

계속 읽어보기

이런 글은 어떠세요?

< Back to Logs