커스텀 머티리얼과의 통합
나이아가라에서 계산한 파티클 속성을 커스텀 머티리얼에 전달해 속도에 따라 발광 강도가 달라지는 표현을 구현합니다.
이전 절에서 Sprite Renderer와 기본 머티리얼 설정을 다뤘다면, 이제 렌더링 표현력을 한 단계 올릴 차례입니다.
이번 절에서는 커스텀 머티리얼 통합을 다룹니다.
단순한 색/텍스처 적용을 넘어, 나이아가라에서 계산한 데이터를 머티리얼로 전달해 파티클 표현을 더 풍부하고 동적으로 만드는 방법을 학습합니다.
이 기능은 파티클을 2D 스프라이트 수준에 묶어 두지 않고, 빛 반응, 특수 셰이더, 주변 환경 조건에 따라 다르게 렌더링하도록 확장하는 도구입니다.
표현 문제는 셰이더보다 앞단에서 자주 생긴다. 계산한 속성의 이름과 타입을 고정하고, Renderer가 같은 머티리얼을 쓰는지 순서대로 좁힌다.
- 1파티클별 값을 계산
· SIMULATE 속도, 색, 수명 또는 사용자 정의 Float를 Update 단계에서 만든다. Particles.Velocity
- 2이름과 타입을 연결
· BIND Niagara Particle Attribute가 같은 속성을 같은 자료형으로 읽는다. Float / Vector
- 3장면에서 결과를 확인
· RENDER Sprite Renderer의 Material, Blend, Bounds와 정렬을 함께 검증한다. Renderer Material
- 4이름 · 타입
값 없음 이름 · 타입 기본값만 보이면 Attribute 이름과 자료형부터 대조한다.
- 5범위 · 곡선
한 출력 범위 · 곡선 발광이나 왜곡이 튀면 머티리얼 입력 전에 값을 제한한다.
- 6Blend · Bounds
화면 문제 Blend · Bounds 깜빡임과 잘림은 반투명 정렬, overdraw, 컬링 범위를 본다.
왜 커스텀 머티리얼과 통합해야 할까요?
Velocity, Color, Age 같은 파티클 값은 모듈 계산과 Renderer Binding을 지나 Material 입력으로 들어간다.
| 구간 | 맡는 일 | 확인할 이름 | 문제 신호 |
|---|---|---|---|
| Particle Attr | 원본 파티클 값 보관 | Particles.Color, Velocity, Age | 속성 이름을 잘못 읽음 |
| Module Logic | 표시용 값으로 변환 | 속도 크기, 수명 비율, Clamp | 값이 너무 튀거나 0으로 고정 |
| Renderer Binding | Niagara 값을 Material 슬롯에 연결 | Binding 이름과 타입 | Material에 값이 전달되지 않음 |
| Material Param | 노드에서 전달 값을 읽음 | Dynamic Parameter, Particle Color | 색·알파가 변하지 않음 |
| Pixel Output | Emissive와 Opacity로 최종 표현 | 밝기, 투명도, 블렌드 | 화면 결과가 의도와 다름 |
Particle Color 노드만 사용하면 색상과 알파 같은 기본 표현만 제어할 수 있습니다.
하지만 나이아가라는 Velocity, SpriteSize, RandomSeed, CustomFloat, CustomVector 같은 다양한 속성을 파티클별로 가지고 있습니다.
커스텀 머티리얼 통합은 이 동적 데이터를 머티리얼 그래프로 가져와 렌더링 결과에 직접 반영하는 작업입니다.
이를 통해 다음과 같은 고급 렌더링 기법을 구현할 수 있습니다.
- 속도에 따른 밝기/색상 변화: 파티클의 속도 크기에 비례하여 발광 강도를 조절하거나 색상을 변경합니다.
- 충돌 지점의 특수 효과: 파티클이 충돌한 지점의 UV 좌표나 노멀 정보를 머티리얼로 전달하여 충돌 이펙트를 섬세하게 제어합니다.
- 임의의 데이터 전달: 나이아가라 스크립트에서 계산된 사용자 정의
Float나Vector값을 머티리얼로 전달하여, 셰이더 내부의 복잡한 논리(예: 특정 임계값을 넘으면 다른 텍스처 사용)를 구동합니다. - 노이즈나 패턴 조절: 파티클마다 다른 노이즈 시드(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.MyCustomFloat나Particles.MyCustomVector와 같은 사용자 정의 속성도 가져올 수 있습니다.
출력 연결: Niagara Particle Attribute 노드는 선택된 매개변수의 값을 출력 핀으로 내보냅니다.
이 출력 핀을 머티리얼 그래프 내의 다른 연산 노드나 머티리얼의 입력(예: Emissive Color, Roughness)에 연결하여 시각적인 효과를 만듭니다.
Niagara Particle Attribute 값은 이름, 타입, 범위, 머티리얼 입력, 렌더러 슬롯이 모두 맞아야 픽셀 결과로 보인다. 화면이 안 변하면 이 순서로 끊긴 지점을 찾는다.
- 1Set
Niagara에서 속성 값을 기록한다.
- 2Name
머티리얼의 이름과 정확히 맞춘다.
- 3Type
Float, Vector, Color 타입을 변환한다.
- 4Input
Emissive, Opacity 같은 입력에 연결한다.
- 5Slot
Renderer가 해당 머티리얼을 쓰는지 본다.
| 속성 | 머티리얼 변환 | 연결 입력 | 실패 신호 |
|---|---|---|---|
| Velocity | Length 또는 Mask | Emissive, Color | 속도 변화가 밝기에 반영되지 않음 |
| NormalizedAge | Curve, Multiply | Opacity, Color | 수명 변화가 보이지 않음 |
| Custom Value | Scale, Clamp | 원하는 머티리얼 핀 | 이름 불일치 또는 타입 불일치 |
실제 예시: 파티클 속도에 따른 발광 강도 조절
파티클 속도 값이 Niagara Attribute, Dynamic Parameter, Material 입력을 거쳐 발광 강도로 변환되는 경로를 정리한다.
- 속도 계산
Particle Update에서 Velocity 길이를 계산해 Speed 값으로 만든다. attribute
- 범위 정규화
속도를 Clamp와 Normalize로 0에서 1 사이 제어값으로 바꾼다. scale
- 머티리얼 전달
Dynamic Parameter 또는 User Parameter로 Material 입력에 값을 보낸다. bind
- 발광 출력
Material은 입력값을 Emissive 강도와 색 변화에 곱해 시각 반응을 만든다. render
- 이름 일치
Niagara Parameter와 Material Parameter 이름을 맞춘다.
- 범위 조정
속도 단위를 그대로 쓰지 말고 시각 범위로 변환한다.
- GPU 여부
GPU emitter에서는 접근 가능한 attribute와 이벤트 제약을 확인한다.
파티클의 속도가 빠를수록 더 밝게 빛나도록 만들어 보겠습니다.
나이아가라 시스템 설정
이전에 만든 NS_BasicSpawn 시스템을 엽니다.
이미터에 Spawn Rate (값: 100 정도), Initialize Particle (Lifetime: 1.02.0, Sprite Size: 50 정도), 500 정도), Add Velocity (Z: 200Solve Forces and Velocity 모듈이 있는지 확인합니다.
Particle Update 섹션에 Add Velocity가 파티클을 위로 솟아오르게 하고 있는지 확인합니다.
Initialize Particle 모듈에서 Color를 흰색 (R:1, G:1, B:1, A:1)으로 설정합니다.(Scale Color 모듈이 있다면 잠시 비활성화하거나 제거합니다.)
커스텀 머티리얼 생성 및 설정
콘텐츠 브라우저에서 새 머티리얼을 만들고 M_VelocityGlow와 같이 이름을 지정합니다.
더블 클릭하여 머티리얼 에디터를 엽니다.
Details 패널에서 Blend Mode를 Additive로, Shading Model을 Unlit 으로 설정합니다.
머티리얼 그래프에 다음 노드를 추가합니다.
Particle Color노드 (파티클의 기본 색상 및 알파를 가져옴)Niagara Particle Attribute노드 (이름:Particles.Velocity)Vector Length노드 (Vector Velocity의 길이를 계산하여 속도 크기를 얻음)Multiply(Float * Float) 노드 (속도 크기에 곱하여 발광 강도를 조절)Multiply(Vector * Float) 노드 (Particle Color의RGB에 발광 강도를 곱함)
노드 연결
Particle Color의Alpha출력을 머티리얼의Opacity입력에 연결합니다.Niagara Particle Attribute(Particles.Velocity)의 출력을Vector Length노드의 입력에 연결합니다.Vector Length의 출력을 첫 번째Multiply (Float)노드의 입력에 연결합니다. 이Multiply노드의 두 번째 입력에는0.01과 같은 작은 상수를 입력하여 발광 강도를 조절합니다. (속도 값이 클 수 있으므로 작은 값으로 스케일링)Particle Color의RGB출력을 두 번째Multiply (Vector)노드의 첫 번째 입력에 연결합니다.- 첫 번째
Multiply (Float)노드의 출력을 두 번째Multiply (Vector)노드의 두 번째 입력(Float)에 연결합니다. - 두 번째
Multiply (Vector)노드의 출력을 머티리얼의Emissive Color입력에 연결합니다.
머티리얼을 저장합니다.
나이아가라 시스템에 머티리얼 적용
NS_BasicSpawn 나이아가라 시스템으로 돌아갑니다.
Sprite Renderer 모듈을 선택하고 Material 속성에 새로 만든 M_VelocityGlow 머티리얼을 할당합니다.
이제 파티클이 위로 솟아오르면서, 속도가 빠를수록 (특히 생성 직후) 더 밝게 빛나고, 정점에 가까워져 속도가 줄어들면 어두워지는 것을 확인할 수 있을 겁니다.
커스텀 머티리얼 통합은 파티클 속성을 읽고, 값을 정규화하고, Emissive에 반영하는 세 단계로 점검합니다.
- 1속성 노출
나이아가라에서 필요한 Velocity, Color, Custom 값을 머티리얼이 읽을 수 있게 정합니다.
- 2값 보정
Normalize, Clamp, Multiply로 밝기가 갑자기 튀지 않도록 범위를 맞춥니다.
- 3화면 반영
Emissive와 Opacity에 연결하고 생성 직후와 정점 근처 밝기 변화를 비교합니다.
- debug안 보일 때
debug 속성 이름, 타입, 머티리얼 인스턴스 적용 여부를 먼저 확인합니다.
- tune너무 밝을 때
tune 최댓값을 낮추고 알파 페이드와 수명 곡선을 함께 조정합니다.
고급 활용 및 고려 사항
- 사용자 정의 파티클 속성: 나이아가라 스크립트에서
Set New or Existing Parameter노드를 통해Particles.MyCustomFloat와 같은 사용자 정의 속성을 생성한 후, 이 이름을Niagara Particle Attribute노드에 정확히 입력하여 머티리얼에서 가져올 수 있습니다. - 데이터 타입 일치:
Niagara Particle Attribute노드에서 가져오는 매개변수의 데이터 타입(Float, Vector, Color 등)과 머티리얼에서 사용하는 데이터 타입이 일치해야 합니다. - 성능: 머티리얼 그래프가 복잡해지면 렌더링 성능에 영향을 줄 수 있습니다. 필요한 만큼만 복잡도를 유지하고, 최적화 기법(예: 불필요한 연산 피하기, 텍스처 압축 등)을 적용하세요.
- 버전 호환성: 언리얼 엔진 버전이 업데이트되면서
Niagara Particle Attribute노드의 이름이나 사용법이 미묘하게 변경될 수 있으므로, 항상 최신 문서를 참조하는 것이 좋습니다.
아래 다이어그램은 나이아가라 속성을 머티리얼로 전달할 때 이름, 타입, 스케일, 비용을 어디서 확인해야 하는지 정리한 것입니다.
나이아가라 속성은 스크립트, 머티리얼 그래프, 렌더러 설정을 지나며 이름과 타입, 스케일이 모두 맞아야 화면에 반영됩니다.
- 속성을 만들고 갱신
Niagara 속성을 만들고 갱신 Particles.Velocity 처럼 이미 있는 값이나 사용자 정의 값을 스크립트에서 준비합니다.
- 노드에서 정확히 읽기
Material 노드에서 정확히 읽기 Niagara Particle Attribute 노드의 이름과 데이터 타입을 입력값과 맞춥니다.
- 표현 방식으로 마감
Renderer 표현 방식으로 마감 Additive, Translucent, Unlit 설정이 의도한 알파와 발광 결과를 보존하는지 확인합니다.
커스텀 머티리얼과 통합할 때는 Niagara 속성 이름, 타입, 값 범위가 셰이더 입력과 맞는지 먼저 검증합니다.
커스텀 머티리얼은 Niagara Particle Attribute 노드로 속도를 발광 강도, 나이, 색 변화 같은 셰이더 입력으로 바꿀 때 힘을 발휘합니다.
- 1속성 준비
Niagara Speed, AgeRatio 같은 값을 스크립트에서 계산해 파티클 속성으로 남깁니다.
- 2Attribute 읽기
Material Niagara Particle Attribute 노드로 같은 이름과 타입의 값을 가져옵니다.
- 3범위 조정
Scale Clamp와 Multiply로 Emissive나 Opacity에 맞는 0-1 또는 강도 범위로 바꿉니다.
- 4렌더러 적용
Apply 머티리얼 인스턴스를 Renderer에 넣고 속도별 밝기 변화를 프리뷰합니다.
- 5타입
Float, Vector, Color 중 머티리얼 입력 타입과 맞는지 봅니다.
- 6기본값
속성이 없을 때도 검은 화면이 되지 않도록 기본값을 둡니다.
- 7범위
속도 값이 너무 커서 Emissive가 과하게 튀지 않는지 제한합니다.
커스텀 머티리얼과의 통합은 나이아가라 스크립트에서 계산한 데이터를 머티리얼로 전달해 파티클 외형을 동적으로 조절하는 방식입니다.
시각 품질을 높일 수 있지만, 머티리얼 복잡도와 렌더링 비용을 함께 확인해야 합니다.
커스텀 머티리얼 통합은 머티리얼 파라미터, 바인딩 경로, 렌더 비용, 대체 표현 기준으로 확인합니다.