본문으로 건너뛰기

안동민 개발노트

본문 시작

커스텀 머티리얼과의 통합

나이아가라에서 계산한 파티클 속성을 커스텀 머티리얼에 전달해 속도에 따라 발광 강도가 달라지는 표현을 구현합니다.

이전 절에서 Sprite Renderer와 기본 머티리얼 설정을 다뤘다면, 이제 렌더링 표현력을 한 단계 올릴 차례입니다.

이번 절에서는 커스텀 머티리얼 통합을 다룹니다.

단순한 색/텍스처 적용을 넘어, 나이아가라에서 계산한 데이터를 머티리얼로 전달해 파티클 표현을 더 풍부하고 동적으로 만드는 방법을 학습합니다.

이 기능은 파티클을 2D 스프라이트 수준에 묶어 두지 않고, 빛 반응, 특수 셰이더, 주변 환경 조건에 따라 다르게 렌더링하도록 확장하는 도구입니다.

파티클 속성이 머티리얼 입력까지 도달해야 화면이 바뀐다

표현 문제는 셰이더보다 앞단에서 자주 생긴다. 계산한 속성의 이름과 타입을 고정하고, Renderer가 같은 머티리얼을 쓰는지 순서대로 좁힌다.

  1. 1
    파티클별 값을 계산

    · SIMULATE 속도, 색, 수명 또는 사용자 정의 Float를 Update 단계에서 만든다. Particles.Velocity

  2. 2
    이름과 타입을 연결

    · BIND Niagara Particle Attribute가 같은 속성을 같은 자료형으로 읽는다. Float / Vector

  3. 3
    장면에서 결과를 확인

    · RENDER Sprite Renderer의 Material, Blend, Bounds와 정렬을 함께 검증한다. Renderer Material

  4. 4
    이름 · 타입

    값 없음 이름 · 타입 기본값만 보이면 Attribute 이름과 자료형부터 대조한다.

  5. 5
    범위 · 곡선

    한 출력 범위 · 곡선 발광이나 왜곡이 튀면 머티리얼 입력 전에 값을 제한한다.

  6. 6
    Blend · Bounds

    화면 문제 Blend · Bounds 깜빡임과 잘림은 반투명 정렬, overdraw, 컬링 범위를 본다.


왜 커스텀 머티리얼과 통합해야 할까요?

Niagara 속성은 Renderer 바인딩을 거쳐 머티리얼 픽셀이 된다

Velocity, Color, Age 같은 파티클 값은 모듈 계산과 Renderer Binding을 지나 Material 입력으로 들어간다.

구간맡는 일확인할 이름문제 신호
Particle Attr원본 파티클 값 보관Particles.Color, Velocity, Age속성 이름을 잘못 읽음
Module Logic표시용 값으로 변환속도 크기, 수명 비율, Clamp값이 너무 튀거나 0으로 고정
Renderer BindingNiagara 값을 Material 슬롯에 연결Binding 이름과 타입Material에 값이 전달되지 않음
Material Param노드에서 전달 값을 읽음Dynamic Parameter, Particle Color색·알파가 변하지 않음
Pixel OutputEmissive와 Opacity로 최종 표현밝기, 투명도, 블렌드화면 결과가 의도와 다름

Particle Color 노드만 사용하면 색상과 알파 같은 기본 표현만 제어할 수 있습니다.

하지만 나이아가라는 Velocity, SpriteSize, RandomSeed, CustomFloat, CustomVector 같은 다양한 속성을 파티클별로 가지고 있습니다.

커스텀 머티리얼 통합은 이 동적 데이터를 머티리얼 그래프로 가져와 렌더링 결과에 직접 반영하는 작업입니다.

이를 통해 다음과 같은 고급 렌더링 기법을 구현할 수 있습니다.

  • 속도에 따른 밝기/색상 변화: 파티클의 속도 크기에 비례하여 발광 강도를 조절하거나 색상을 변경합니다.
  • 충돌 지점의 특수 효과: 파티클이 충돌한 지점의 UV 좌표나 노멀 정보를 머티리얼로 전달하여 충돌 이펙트를 섬세하게 제어합니다.
  • 임의의 데이터 전달: 나이아가라 스크립트에서 계산된 사용자 정의 FloatVector 값을 머티리얼로 전달하여, 셰이더 내부의 복잡한 논리(예: 특정 임계값을 넘으면 다른 텍스처 사용)를 구동합니다.
  • 노이즈나 패턴 조절: 파티클마다 다른 노이즈 시드(Seed) 값을 머티리얼로 전달하여 각 파티클의 텍스처 패턴을 미묘하게 다르게 만듭니다.

커스텀 머티리얼 통합의 핵심: Niagara Particle Attribute 노드

커스텀 머티리얼에서 나이아가라 파티클의 속성을 가져오는 가장 중요한 노드는 바로 Niagara Particle Attribute 노드입니다.

이 노드는 나이아가라 파티클 시스템의 특정 매개변수(Parameter) 값을 머티리얼 그래프로 가져오는 역할을 합니다.

Niagara Particle Attribute 노드

머티리얼 에디터 열기: 나이아가라 시스템에 할당된 머티리얼을 더블 클릭하여 머티리얼 에디터를 엽니다.

노드 추가: 머티리얼 그래프의 빈 공간에 마우스 우클릭하고 Niagara Particle Attribute를 검색하여 추가합니다.

매개변수 선택: 추가된 Niagara Particle Attribute 노드를 선택합니다.

디테일(Details) 패널에서 Parameter Name 속성을 찾습니다.

Parameter Name 드롭다운 메뉴를 클릭하거나 직접 입력하여, 가져오고 싶은 나이아가라 파티클 속성 매개변수의 정확한 이름을 입력합니다.

  • 예시
    • Particles.Velocity (파티클의 속도 벡터)
    • Particles.SpriteSize (파티클의 스프라이트 크기 벡터)
    • Particles.NormalizedAge (파티클의 정규화된 수명)
    • Particles.Lifetime (파티클의 총 수명)
    • Particles.Position (파티클의 월드 위치)
    • 사용자 정의 매개변수: 나이아가라 스크립트에서 Set New or Existing Parameter 노드를 통해 정의한 Particles.MyCustomFloatParticles.MyCustomVector와 같은 사용자 정의 속성도 가져올 수 있습니다.

출력 연결: Niagara Particle Attribute 노드는 선택된 매개변수의 값을 출력 핀으로 내보냅니다.

이 출력 핀을 머티리얼 그래프 내의 다른 연산 노드나 머티리얼의 입력(예: Emissive Color, Roughness)에 연결하여 시각적인 효과를 만듭니다.

머티리얼 속성 바인딩 검증표

Niagara Particle Attribute 값은 이름, 타입, 범위, 머티리얼 입력, 렌더러 슬롯이 모두 맞아야 픽셀 결과로 보인다. 화면이 안 변하면 이 순서로 끊긴 지점을 찾는다.

  1. 1
    Set

    Niagara에서 속성 값을 기록한다.

  2. 2
    Name

    머티리얼의 이름과 정확히 맞춘다.

  3. 3
    Type

    Float, Vector, Color 타입을 변환한다.

  4. 4
    Input

    Emissive, Opacity 같은 입력에 연결한다.

  5. 5
    Slot

    Renderer가 해당 머티리얼을 쓰는지 본다.

속성머티리얼 변환연결 입력실패 신호
VelocityLength 또는 MaskEmissive, Color속도 변화가 밝기에 반영되지 않음
NormalizedAgeCurve, MultiplyOpacity, Color수명 변화가 보이지 않음
Custom ValueScale, Clamp원하는 머티리얼 핀이름 불일치 또는 타입 불일치

실제 예시: 파티클 속도에 따른 발광 강도 조절

Niagara Attribute/Emissive

파티클 속도 값이 Niagara Attribute, Dynamic Parameter, Material 입력을 거쳐 발광 강도로 변환되는 경로를 정리한다.

  1. 속도 계산

    Particle Update에서 Velocity 길이를 계산해 Speed 값으로 만든다. attribute

  2. 범위 정규화

    속도를 Clamp와 Normalize로 0에서 1 사이 제어값으로 바꾼다. scale

  3. 머티리얼 전달

    Dynamic Parameter 또는 User Parameter로 Material 입력에 값을 보낸다. bind

  4. 발광 출력

    Material은 입력값을 Emissive 강도와 색 변화에 곱해 시각 반응을 만든다. render

  5. 이름 일치

    Niagara Parameter와 Material Parameter 이름을 맞춘다.

  6. 범위 조정

    속도 단위를 그대로 쓰지 말고 시각 범위로 변환한다.

  7. GPU 여부

    GPU emitter에서는 접근 가능한 attribute와 이벤트 제약을 확인한다.

파티클의 속도가 빠를수록 더 밝게 빛나도록 만들어 보겠습니다.

나이아가라 시스템 설정

이전에 만든 NS_BasicSpawn 시스템을 엽니다.

이미터에 Spawn Rate (값: 100 정도), Initialize Particle (Lifetime: 1.02.0, Sprite Size: 50 정도), Add Velocity (Z: 200500 정도), Solve Forces and Velocity 모듈이 있는지 확인합니다.

Particle Update 섹션에 Add Velocity가 파티클을 위로 솟아오르게 하고 있는지 확인합니다.

Initialize Particle 모듈에서 Color를 흰색 (R:1, G:1, B:1, A:1)으로 설정합니다.

(Scale Color 모듈이 있다면 잠시 비활성화하거나 제거합니다.)

커스텀 머티리얼 생성 및 설정

콘텐츠 브라우저에서 새 머티리얼을 만들고 M_VelocityGlow와 같이 이름을 지정합니다.

더블 클릭하여 머티리얼 에디터를 엽니다.

Details 패널에서 Blend ModeAdditive로, Shading ModelUnlit 으로 설정합니다.

머티리얼 그래프에 다음 노드를 추가합니다.

  • Particle Color 노드 (파티클의 기본 색상 및 알파를 가져옴)
  • Niagara Particle Attribute 노드 (이름: Particles.Velocity)
  • Vector Length 노드 (Vector Velocity의 길이를 계산하여 속도 크기를 얻음)
  • Multiply (Float * Float) 노드 (속도 크기에 곱하여 발광 강도를 조절)
  • Multiply (Vector * Float) 노드 (Particle ColorRGB에 발광 강도를 곱함)

노드 연결

  • Particle ColorAlpha 출력을 머티리얼의 Opacity 입력에 연결합니다.
  • Niagara Particle Attribute (Particles.Velocity)의 출력을 Vector Length 노드의 입력에 연결합니다.
  • Vector Length의 출력을 첫 번째 Multiply (Float) 노드의 입력에 연결합니다. 이 Multiply 노드의 두 번째 입력에는 0.01과 같은 작은 상수를 입력하여 발광 강도를 조절합니다. (속도 값이 클 수 있으므로 작은 값으로 스케일링)
  • Particle ColorRGB 출력을 두 번째 Multiply (Vector) 노드의 첫 번째 입력에 연결합니다.
  • 첫 번째 Multiply (Float) 노드의 출력을 두 번째 Multiply (Vector) 노드의 두 번째 입력(Float)에 연결합니다.
  • 두 번째 Multiply (Vector) 노드의 출력을 머티리얼의 Emissive Color입력에 연결합니다.

머티리얼을 저장합니다.

나이아가라 시스템에 머티리얼 적용

NS_BasicSpawn 나이아가라 시스템으로 돌아갑니다.

Sprite Renderer 모듈을 선택하고 Material 속성에 새로 만든 M_VelocityGlow 머티리얼을 할당합니다.

이제 파티클이 위로 솟아오르면서, 속도가 빠를수록 (특히 생성 직후) 더 밝게 빛나고, 정점에 가까워져 속도가 줄어들면 어두워지는 것을 확인할 수 있을 겁니다.

속도 기반 발광 연결 흐름

커스텀 머티리얼 통합은 파티클 속성을 읽고, 값을 정규화하고, Emissive에 반영하는 세 단계로 점검합니다.

  1. 1
    속성 노출

    나이아가라에서 필요한 Velocity, Color, Custom 값을 머티리얼이 읽을 수 있게 정합니다.

  2. 2
    값 보정

    Normalize, Clamp, Multiply로 밝기가 갑자기 튀지 않도록 범위를 맞춥니다.

  3. 3
    화면 반영

    Emissive와 Opacity에 연결하고 생성 직후와 정점 근처 밝기 변화를 비교합니다.

  4. debug
    안 보일 때

    debug 속성 이름, 타입, 머티리얼 인스턴스 적용 여부를 먼저 확인합니다.

  5. tune
    너무 밝을 때

    tune 최댓값을 낮추고 알파 페이드와 수명 곡선을 함께 조정합니다.


고급 활용 및 고려 사항

  • 사용자 정의 파티클 속성: 나이아가라 스크립트에서 Set New or Existing Parameter 노드를 통해 Particles.MyCustomFloat와 같은 사용자 정의 속성을 생성한 후, 이 이름을 Niagara Particle Attribute 노드에 정확히 입력하여 머티리얼에서 가져올 수 있습니다.
  • 데이터 타입 일치: Niagara Particle Attribute 노드에서 가져오는 매개변수의 데이터 타입(Float, Vector, Color 등)과 머티리얼에서 사용하는 데이터 타입이 일치해야 합니다.
  • 성능: 머티리얼 그래프가 복잡해지면 렌더링 성능에 영향을 줄 수 있습니다. 필요한 만큼만 복잡도를 유지하고, 최적화 기법(예: 불필요한 연산 피하기, 텍스처 압축 등)을 적용하세요.
  • 버전 호환성: 언리얼 엔진 버전이 업데이트되면서 Niagara Particle Attribute 노드의 이름이나 사용법이 미묘하게 변경될 수 있으므로, 항상 최신 문서를 참조하는 것이 좋습니다.

아래 다이어그램은 나이아가라 속성을 머티리얼로 전달할 때 이름, 타입, 스케일, 비용을 어디서 확인해야 하는지 정리한 것입니다.

머티리얼 결과가 이상하면 전달 경로를 세 군데로 나눕니다

나이아가라 속성은 스크립트, 머티리얼 그래프, 렌더러 설정을 지나며 이름과 타입, 스케일이 모두 맞아야 화면에 반영됩니다.

  1. 속성을 만들고 갱신

    Niagara 속성을 만들고 갱신 Particles.Velocity 처럼 이미 있는 값이나 사용자 정의 값을 스크립트에서 준비합니다.

  2. 노드에서 정확히 읽기

    Material 노드에서 정확히 읽기 Niagara Particle Attribute 노드의 이름과 데이터 타입을 입력값과 맞춥니다.

  3. 표현 방식으로 마감

    Renderer 표현 방식으로 마감 Additive, Translucent, Unlit 설정이 의도한 알파와 발광 결과를 보존하는지 확인합니다.

커스텀 머티리얼과 통합할 때는 Niagara 속성 이름, 타입, 값 범위가 셰이더 입력과 맞는지 먼저 검증합니다.

Niagara 속성을 머티리얼로 넘기는 흐름

커스텀 머티리얼은 Niagara Particle Attribute 노드로 속도를 발광 강도, 나이, 색 변화 같은 셰이더 입력으로 바꿀 때 힘을 발휘합니다.

  1. 1
    속성 준비

    Niagara Speed, AgeRatio 같은 값을 스크립트에서 계산해 파티클 속성으로 남깁니다.

  2. 2
    Attribute 읽기

    Material Niagara Particle Attribute 노드로 같은 이름과 타입의 값을 가져옵니다.

  3. 3
    범위 조정

    Scale Clamp와 Multiply로 Emissive나 Opacity에 맞는 0-1 또는 강도 범위로 바꿉니다.

  4. 4
    렌더러 적용

    Apply 머티리얼 인스턴스를 Renderer에 넣고 속도별 밝기 변화를 프리뷰합니다.

  5. 5
    타입

    Float, Vector, Color 중 머티리얼 입력 타입과 맞는지 봅니다.

  6. 6
    기본값

    속성이 없을 때도 검은 화면이 되지 않도록 기본값을 둡니다.

  7. 7
    범위

    속도 값이 너무 커서 Emissive가 과하게 튀지 않는지 제한합니다.


커스텀 머티리얼과의 통합은 나이아가라 스크립트에서 계산한 데이터를 머티리얼로 전달해 파티클 외형을 동적으로 조절하는 방식입니다.

시각 품질을 높일 수 있지만, 머티리얼 복잡도와 렌더링 비용을 함께 확인해야 합니다.

커스텀 머티리얼 통합은 머티리얼 파라미터, 바인딩 경로, 렌더 비용, 대체 표현 기준으로 확인합니다.