본문으로 건너뛰기

안동민 개발노트

본문 시작

나이아가라 이펙트 디버깅 기초

파티클 미표시·비정상 움직임·성능 저하를 모듈 스택과 Niagara Debugger·통계 명령·속성 시각화로 진단합니다.

아무리 숙련된 FX 아티스트라도 나이아가라 이펙트 제작 과정에서 예상치 못한 문제에 직면하게 됩니다.

파티클이 보이지 않거나, 이상하게 움직이거나, 성능 저하를 일으키는 등 다양한 오류가 발생할 수 있습니다.

이러한 문제를 효율적으로 찾아내고 해결하는 과정이 바로 디버깅(Debugging)입니다.

언리얼 엔진은 나이아가라 시스템을 디버깅하기 위한 강력한 내장 도구들을 제공합니다.

이 절에서는 나이아가라 이펙트를 디버깅하는 데 필요한 기본적인 접근 방식과 주요 도구 사용법에 대해 알아보겠습니다.

Niagara 디버깅은 증상을 분류한 뒤 다른 관측 경로를 탄다

보이지 않는 효과와 느린 효과는 확인할 상태가 다르다. 먼저 같은 장면에서 증상을 재현하고 가시성 경로와 성능 경로를 분리한다.

  1. 고정 조건 재현

    START 맵·카메라·발동 입력·재생 시간을 고정한다.

  2. 화면에 보이는가?

    DECIDE 가시성 문제와 성능 문제를 먼저 나눈다.

  3. NO · 보이지 않음
    생성

    NO · 보이지 않음 활성화·Spawn Rate·Lifetime. Size·Material·Renderer. Bounds·Cull Distance·좌표.

  4. 생성

    활성화·Spawn Rate·Lifetime.

  5. 표현

    Size·Material·Renderer.

  6. 공간

    Bounds·Cull Distance·좌표.

  7. YES · 느리거나 끊김
    수량

    YES · 느리거나 끊김 stat Niagara로 instance·particle 수. profilegpu로 렌더·시뮬레이션 비용. Emitter·Renderer를 꺼 병목 범위 축소.

  8. 수량

    stat Niagara로 instance·particle 수.

  9. GPU

    profilegpu로 렌더·시뮬레이션 비용.

  10. 격리

    Emitter·Renderer를 꺼 병목 범위 축소.


일반적인 문제와 점검 사항

나이아가라 문제 진단 순서

보이지 않는 이펙트나 과도한 비용은 바운드, 스폰, 머티리얼, 스케일러빌리티를 차례로 확인하면 빠르게 좁혀집니다.

  1. 1
    가시성 확인

    시스템 활성화, Auto Activate, Bounds, 카메라 컬링을 먼저 봅니다. Visible

  2. 2
    스폰 확인

    Emitter Spawn, Particle Spawn, Lifetime 값이 실제로 입자를 만들고 있는지 확인합니다. Spawn

  3. 3
    렌더 확인

    Renderer, Material, Sprite/Mesh 설정이 플랫폼에서 유효한지 봅니다. Render

  4. 4
    비용 확인

    Stat Niagara와 프로파일러로 CPU/GPU 비용을 분리합니다. Cost

  5. 5
    원인 하나

    설정 여러 개를 동시에 바꾸기보다 원인을 하나씩 확인합니다.

  6. 6
    재현 맵

    문제 이펙트만 놓은 테스트 맵에서 같은 증상이 나는지 봅니다.

  7. 7
    성능 기록

    수정 전후 비용을 숫자로 남겨 감각적 판단을 피합니다.

디버깅을 시작하기 전에, 가장 흔히 발생하는 문제들을 파악하고 기본적인 점검을 수행하는 것이 시간을 절약하는 데 도움이 됩니다.

  • 파티클이 전혀 보이지 않을 때
    • Niagara System 컴포넌트가 활성화(Active)되어 있는가?: 블루프린트나 레벨 시퀀서에서 Activate 노드가 호출되었는지, 또는 기본적으로 Auto Activate가 켜져 있는지 확인합니다.
    • Spawn Rate 또는 Spawn Burst가 0으로 설정되어 있지 않은가?: 이미터에서 파티클이 스폰되도록 설정되어 있는지 확인합니다.
    • Lifetime이 너무 짧지 않은가?: 파티클이 생성되자마자 너무 빨리 사라져서 보이지 않는 경우가 있습니다.
    • Sprite Size (스프라이트 크기) 또는 Mesh Scale (메시 스케일)이 0으로 설정되어 있지 않은가?: 파티클이 너무 작게 생성되어 보이지 않을 수 있습니다.
    • 머티리얼에 문제가 없는가?: 머티리얼이 올바르게 할당되었는지, 블렌드 모드, 셰이딩 모델, 투명도 설정이 올바른지 확인합니다. 특히 Translucent 머티리얼은 정렬 문제로 보이지 않을 수 있습니다.
    • 카메라 Cull Distance 설정에 의해 컬링되고 있지 않은가?: 카메라와 파티클 시스템 간의 거리가 너무 멀어 렌더링에서 제외되는 경우입니다.
    • 이미터가 활성화(Active)되어 있는가?: 이미터 속성의 Emitter State에서 Active가 켜져 있는지 확인합니다.
    • Light Renderer만 사용하고 다른 렌더러가 없는가?: 라이트 렌더러는 실제 파티클을 렌더링하지 않습니다.
  • 파티클이 이상하게 움직이거나 형태가 이상할 때
    • Initial Velocity (초기 속도) 설정이 올바른가?: 파티클이 의도한 방향으로 발사되는지 확인합니다.
    • 각종 Force (힘) 모듈의 강도가 적절한가?: Gravity, Drag, Noise Force 등의 Strength가 너무 강하거나 약하게 설정되어 있는지 확인합니다.
    • Normalized Age (정규화된 수명) 커브가 올바른가?: Scale Color, Scale Sprite Size 등 시간에 따른 변화를 제어하는 커브가 의도한 대로 동작하는지 확인합니다.
    • Collision (충돌) 모듈 설정이 올바른가?: Restitution, Friction, Collision Mode 등이 파티클의 충돌 반응에 영향을 미칩니다.
    • 데이터 인터페이스(Data Interface)의 소스 액터/컴포넌트가 올바르게 참조되었는가?: Niagara Data Interface Actor 등을 통해 외부 데이터를 가져올 때, 참조 대상이 유효한지 확인합니다.
  • 성능 저하가 발생할 때
    • Spawn RateMax Particles가 너무 높지 않은가?: 파티클 수가 과도하게 많을 때 발생합니다.
    • 복잡한 머티리얼 또는 Translucent 오버드로우: Translucent 머티리얼이 많이 겹쳐질수록 성능에 큰 부담을 줍니다.
    • Light Renderer 또는 Shadows (그림자) 사용: 동적 라이트 생성은 매우 비용이 높습니다.
    • 복잡한 모듈 스크립트: 나이아가라 스크립트 내에서 비용이 높은 연산(예: 룩업 테이블, 다수의 Sine/Cosine 등)이 과도하게 사용되는지 확인합니다.
    • Collision 모듈의 복잡도: Trace 모드나 복잡한 지오메트리에 대한 충돌 검사는 비용이 높습니다.
이펙트 디버깅 체크 루프

나이아가라 디버깅은 보이는지, 움직이는지, 비싼지, 의도한 값을 받는지를 순서대로 좁혀 가는 과정입니다.

  1. 1
    안 보임

    Auto Activate, Spawn Rate, Renderer, Material을 먼저 봅니다.

  2. 2
    이상 동작

    Velocity, Force, Collision, Curve 입력을 나눠 확인합니다.

  3. 3
    성능 저하

    Max Particles, 오버드로우, 동적 라이트를 줄입니다.

  4. 4
    데이터 문제

    Data Interface와 User Parameter 연결을 추적합니다.

  5. 5
    나이아가라 디버깅 순서

    한 번에 여러 값을 바꾸지 말고 의심 지점을 하나씩 고립합니다. Debug Draw와 Debug Text는 문제 재현 단계에서만 켭니다. stat Niagara와 GPU 프로파일러 결과를 함께 봐야 원인을 좁힐 수 있습니다.

  6. 6
    디버깅 도구

    Niagara Debugger 상태 stat Niagara 비용 Debug Draw 위치 Profiler 병목


나이아가라 디버거 활용

언리얼 엔진의 나이아가라 디버거(Niagara Debugger)는 이펙트의 실시간 상태를 모니터링하고 성능 병목을 식별하는 데 가장 강력한 도구입니다.

디버거 열기
  • 언리얼 에디터 메뉴에서 Window > Developer Tools > Niagara Debugger를 선택합니다.
활성 시스템 선택
  • Niagara Debugger 창에서 현재 레벨에 활성화된 나이아가라 시스템 목록을 볼 수 있습니다. 디버깅하고자 하는 시스템을 선택합니다.
주요 디버깅 기능
  • Overview (개요): 선택한 시스템의 총 파티클 수, 이미터 수, 활성 상태 등을 한눈에 보여줍니다.
  • Emitters (이미터): 각 이미터별로 현재 파티클 수, GPU/CPU 사용 시간, 스폰율 등 상세 정보를 표시합니다. 특정 이미터가 성능 문제를 일으키는지 파악하는 데 유용합니다.
    • Debug Draw: 각 이미터의 파티클에 대한 디버그 드로잉(바운딩 박스, 파티클 인덱스 등)을 활성화하여 시각적으로 문제를 파악합니다.
    • Debug Text: 파티클에 대한 텍스트 오버레이(ID, Lifetime 등)를 표시합니다.
  • Modules (모듈): 각 이미터 내의 모듈별 CPU/GPU 사용 시간을 보여줍니다. 어떤 모듈이 가장 많은 연산 비용을 소모하는지 파악하여 최적화할 수 있습니다.
  • Parameters (파라미터): 시스템 및 이미터의 현재 파라미터 값들을 실시간으로 보여줍니다. 블루프린트에서 전달된 사용자 변수 값이 제대로 적용되는지 확인할 수 있습니다.
  • Data Interfaces (데이터 인터페이스): 사용 중인 데이터 인터페이스의 상태와 참조 정보를 보여줍니다.
  • Playback Controls (재생 제어)
    • Pause / Play: 이펙트 재생을 일시정지하거나 다시 시작합니다.
    • Step Forward / Step Backward: 한 프레임씩 이동하며 파티클의 변화를 세밀하게 관찰합니다.
    • Slow Motion / Fast Forward: 이펙트 재생 속도를 조절하여 미세한 움직임을 분석합니다.
    • Reset: 이펙트를 초기 상태로 재설정합니다.
디버거 패널은 원인을 질문 단위로 나눈다

같은 이펙트라도 안 보이는 문제, 값 전달 문제, 성능 문제는 확인할 패널이 다릅니다. 먼저 증상을 고정하고, 그 증상에 답하는 패널만 열어 원인을 좁힙니다.

  1. Overview 활성 상태
    Overview

    활성 상태 선택한 시스템이 실제로 돌고 있는가? 총 파티클 수, 이미터 수, 활성 상태를 먼저 확인합니다.

  2. Emitters 스폰/비용
    Emitters

    스폰/비용 어느 이미터가 파티클과 시간을 만들고 있는가? 파티클 수, CPU/GPU 시간, 스폰율을 이미터별로 봅니다.

  3. Modules 연산 지점
    Modules

    연산 지점 비싼 계산이 어느 모듈에 몰려 있는가? Force, Collision, 커브, 스크립트 연산 비용을 분리합니다.

  4. Parameters 값 전달
    Parameters

    값 전달 블루프린트의 User 변수가 들어왔는가? 색, 크기, 위치, 속도 같은 현재 값을 실시간으로 대조합니다.

  5. Data Interfaces 참조
    Data Interfaces

    참조 외부 액터나 컴포넌트 참조가 유효한가? Actor, Mesh, Curve 같은 입력 소스가 끊겼는지 확인합니다.

  6. Playback 재현
    Playback

    재현 값이 틀어지는 프레임을 붙잡았는가? Pause, Step, Slow Motion, Reset으로 변화 순간을 고정합니다.


통계 명령어 (Stat Commands) 활용

콘솔 명령어를 사용하여 나이아가라 시스템의 전반적인 성능 통계를 빠르게 확인할 수 있습니다.

콘솔 열기: 게임 플레이 중 ~ 키를 눌러 개발자 콘솔을 엽니다.

stat Niagara
  • stat Niagara를 입력하면 화면에 모든 활성화된 나이아가라 시스템의 CPU 및 GPU 사용 시간, 총 파티클 수 등의 요약 정보가 오버레이로 표시됩니다.
  • 어떤 나이아가라 시스템이 가장 많은 자원을 소모하는지 빠르게 식별할 수 있습니다.
stat GPU
  • GPU 렌더링에 대한 자세한 통계를 보여줍니다. Translucency (반투명), Post Processing (후처리) 등의 항목을 통해 GPU 병목 현상의 원인을 파악할 수 있습니다.
stat InitViews
  • 카메라 컬링, 스크린 스페이스 앰비언트 오클루전(SSAO) 등 뷰 초기화 단계의 성능을 분석합니다.
profilegpu
  • 현재 화면을 렌더링하는 데 사용된 모든 GPU 작업에 대한 자세한 타임라인을 보여줍니다. GPU 오버드로우나 특정 렌더링 단계의 문제점을 파악하는 데 매우 유용합니다.

나이아가라 에디터 내 디버깅 기능

나이아가라 시스템 에디터 자체에서도 여러 디버깅 기능을 제공합니다.

  • Debug 메뉴
    • 에디터 상단의 Debug 메뉴를 클릭하면 다양한 디버그 드로잉 옵션이 있습니다. (예: Draw Bounding Box, Draw Particle IDs, Draw Particle Normals)
    • Show Emitter Execution Order: 이미터가 실행되는 순서를 시각적으로 보여줍니다.
    • Show Module Execution Order: 모듈 실행 순서를 보여주어 논리 오류를 파악하는 데 도움이 됩니다.
  • 프리뷰 뷰포트 제어
    • 프리뷰 뷰포트의 재생 컨트롤을 통해 시스템을 일시정지하거나, 한 프레임씩 이동하거나, 속도를 조절하여 파티클의 움직임을 면밀히 관찰할 수 있습니다.
  • 파라미터 값 실시간 확인
    • Parameters 패널에서 각 파라미터의 현재 값을 확인할 수 있습니다. 특히 Read-Only로 표시된 내부 파라미터(Particles.Position, Particles.Velocity 등)의 변화를 주시하면 파티클의 상태를 이해하는 데 도움이 됩니다.
한 프레임을 고정한 뒤 화면·값·실행 순서를 같은 시점에서 비교한다

움직이는 결과만 보면 원인이 계속 바뀐다. 먼저 재현 시점을 멈추고, 공간 상태와 파라미터, 모듈 실행 순서를 한 프레임의 증거로 묶는다.

  1. 현상을 표시한다

    Debug 에서 Bounds, Particle ID, Normal을 켜 공간 이상을 드러낸다.

  2. 문제 프레임을 고정한다

    프리뷰를 일시정지하고 한 프레임씩 이동해 처음 어긋나는 시점을 찾는다.

  3. 값의 변화를 대조한다

    Particles.Position 과 Velocity 를 보며 화면 변화와 값이 함께 틀어지는지 확인한다.

  4. 실행 책임을 좁힌다

    Emitter·Module Execution Order에서 잘못된 값이 기록되는 앞 단계로 거슬러 간다.


문제가 보일 때마다 모든 도구를 한꺼번에 켜기보다, 증상별로 먼저 확인할 패널을 좁히면 디버깅 시간이 크게 줄어듭니다.

증상별 첫 디버깅 도구

문제가 보이면 증상을 먼저 분류하고, 가장 좁은 도구부터 켜서 원인을 줄여 나갑니다.

  1. 보이지 않음

    활성 상태, Spawn Rate, Renderer, Bounds, Cull Distance를 차례로 확인합니다. Niagara Debugger

  2. 움직임 이상

    Velocity, Force, Collision, Solve 순서와 Normalized Age 커브를 비교합니다. Preview Step

  3. 성능 저하

    파티클 수, GPU 시간, 오버드로우, 복잡한 머티리얼을 먼저 좁힙니다. stat Niagara

  4. 외부 값 불일치

    User Parameter와 Data Interface 참조가 런타임에 실제로 들어오는지 봅니다. Parameters

나이아가라 이펙트 디버깅은 증상 재현, 파라미터 확인, 렌더링 비용 측정 순서로 진행합니다.

디버거와 통계 도구를 함께 사용하면 복잡한 이펙트도 원인을 단계적으로 좁힐 수 있습니다.

디버깅 원인 분리 흐름

디버깅은 값을 더 넣는 일이 아니라 원인 범위를 줄이는 일입니다. 보이지 않음, 이상 움직임, 성능 저하를 별도로 나눕니다.

  1. 1
    표시 문제

    Spawn, Bounds, Renderer, Material 순서로 화면 출력 경로를 봅니다.

  2. 2
    움직임 문제

    Initialize와 Update 중 어느 단계에서 값이 바뀌는지 분리합니다.

  3. 3
    타이밍 문제

    Loop, Delay, Lifetime, Emitter State를 같은 타임라인에서 봅니다.

  4. 4
    성능 문제

    Spawn Rate, 입자 수, 머티리얼 비용, GPU 시뮬레이션을 차례로 줄입니다.

  5. 5
    첫 질문

    문제가 모든 카메라와 모든 재생에서 반복되는지 확인합니다.

  6. 6
    값 변화 기록

    수정 전 값과 수정 후 결과를 짧게 남깁니다.

  7. 7
    종료 기준

    원인을 하나의 모듈이나 설정 묶음으로 설명할 수 있습니다.

나이아가라 이펙트 디버깅은 데이터 입력, 이미터 책임, 렌더 비용, 재현 기준으로 점검합니다.