본문 바로가기

렌더러 모듈의 역할과 기본 사용법

Sprite·Mesh·Ribbon·Light Renderer가 파티클 데이터를 화면 형태로 바꾸는 방식과 효과별 선택 기준을 익힙니다.

파티클을 만들고 움직임을 주었다면, 이제 그 파티클이 화면에 어떤 모습으로 보일지 정해야 합니다. 이 일을 하는 것이 렌더러(Renderer)입니다. 렌더러는 이미터의 Render 그룹에 들어가며, 시뮬레이션이 계산한 입자의 데이터를 읽어 화면에 그릴 형태로 바꿉니다. 그래서 렌더러가 없으면 아무리 많은 파티클을 만들고 멋진 움직임을 주어도 화면에는 아무것도 보이지 않습니다. 이 글에서는 나이아가라의 주요 렌더러가 각각 입자를 어떻게 그리는지 살펴보고, 효과에 맞는 렌더러를 고르는 기준과 표시 문제를 찾는 순서를 정리합니다.


같은 입자를 여러 방식으로 그린다

어떤 렌더러를 쓰느냐에 따라 같은 입자가 평평한 이미지로 보이기도 하고, 3D 모델로 보이기도 하고, 이어진 띠로 보이기도 합니다. 나이아가라는 여러 종류의 렌더러를 제공하며, 각 렌더러는 특정한 종류의 표현에 맞춰져 있습니다. 그래서 효과의 성격에 맞는 렌더러를 고르고 설정하는 일이 결과물의 모습을 크게 좌우합니다.

하나의 이미터는 렌더러를 여러 개 가질 수 있습니다. 이때 켜져 있고 필요한 바인딩이 연결된 렌더러들이 같은 입자 데이터를 각자의 방식으로 씁니다. 바인딩(binding)은 렌더러가 위치나 색, 크기 같은 값을 입자의 어느 속성에서 읽을지 정한 연결입니다. 예외적으로 Light Renderer는 입자의 표면을 그리는 대신 주변을 비추는 조명을 만듭니다.

예를 들어 살아 있는 입자 3개에 Sprite Renderer와 Light Renderer를 함께 쓴다고 해 봅시다. 두 렌더러가 켜져 있고 필요한 바인딩이 모두 연결되어 있다면, 같은 3개의 상태로 스프라이트도 그리고 조명도 만듭니다. 렌더러가 둘이라고 시뮬레이션하는 입자가 6개로 늘어나는 것은 아닙니다. 그래서 Sprite Renderer만 끄면 스프라이트는 사라지지만, 다른 설정이 같다면 입자의 시뮬레이션과 Light Renderer의 조명은 그대로 남을 수 있습니다.

렌더러를 고를 때는 보이는 모양만 보지 말고, 어떤 데이터로 그리는지와 어떤 설정이 비용을 키우는지도 함께 확인합니다. 주요 렌더러를 하나씩 살펴보겠습니다.


Sprite Renderer

Sprite Renderer는 가장 흔히 쓰는 렌더러로, 파티클을 2D 이미지인 스프라이트로 그립니다. 불꽃의 한 조각, 연기 덩어리, 비의 빗방울, 피격 때 튀는 혈흔처럼 캐주얼한 효과부터 사실적인 효과까지 대부분의 경우에 씁니다. 주요 설정은 다음과 같습니다.

  • Material: 스프라이트에 쓸 머티리얼을 지정합니다. 머티리얼이 입자의 색과 투명도, 질감을 정하며, 보통 Additive나 Translucent 블렌드 모드를 쓰는 파티클용 머티리얼을 씁니다.
  • Sub Image Size: 여러 장의 그림을 격자로 모은 스프라이트 시트의 열과 행 수를 지정합니다. 이 시트로 애니메이션을 만들려면 SubUV Animation 같은 모듈이 쓰는 SubImageIndex와 렌더러의 바인딩, 머티리얼의 UV 처리가 함께 맞아야 합니다.
  • Facing Mode와 Alignment: Facing Mode는 스프라이트의 면이 어느 쪽을 바라볼지를, Alignment는 면 안에서 스프라이트가 속도나 사용자 벡터 같은 방향에 맞춰 어떻게 정렬될지를 정합니다. 카메라를 바라보게 하는 설정도 나이아가라에서는 Facing Mode에서 고릅니다. PSA Facing Camera는 캐스케이드에서 쓰던 이름이므로 나이아가라 설정과 섞어 쓰지 않습니다.

Mesh Renderer

Mesh Renderer는 파티클을 3D 메시로 그립니다. 작은 돌멩이가 튀는 효과나 폭발 때 튀는 파편, 건물이 부서질 때 생기는 잔해, 아이템이 떨어질 때의 작은 3D 모델처럼 모양이 복잡한 물체를 파티클처럼 다룰 때 쓸모가 있습니다.

  • Particle Mesh: 파티클로 그릴 스태틱 메시(Static Mesh)를 지정합니다.
  • 머티리얼: 기본으로는 메시에 지정된 머티리얼을 쓰며, Override Materials로 파티클용 머티리얼로 바꿀 수 있습니다.
  • 크기: 렌더러의 Scale 바인딩이 입자의 크기 속성을 읽어 메시의 크기를 정합니다. Initialize Particle의 Mesh Scale이 이 속성의 초기값을 정하므로, 초기 크기는 보통 그 입력으로 조절합니다.

Ribbon Renderer

Ribbon Renderer는 같은 Ribbon ID에 속하는 파티클들을 연결 순서에 따라 이어 띠로 그립니다. 붓으로 점들을 이어 선을 긋는 것과 비슷해서, 마법 주문의 궤적이나 물줄기, 에너지의 흐름처럼 이어짐과 흐름이 중요한 효과에 알맞습니다. 레이저의 궤적이나 지팡이에서 뿜어 나오는 에너지, 타이어 자국, 비행운도 리본으로 표현할 수 있습니다.

리본을 쓸 때 흔히 하는 오해는 입자 하나가 지나간 길이 저절로 띠로 그려진다는 생각입니다. 리본은 지금 살아 있는 여러 입자를 잇는 것이므로, 궤적을 만들려면 움직이는 발생 지점에서 계속 새 입자를 남겨야 합니다.

NIAGARA · CH2-3

Ribbon은 같은 그룹의 입자를 연결합니다

Ribbon ID와 연결 순서를 지정한 설명용 예시입니다. 번호는 같은 그룹에서의 순서이며, 한 입자의 과거 위치를 자동으로 저장해 그린 선이 아닙니다.

Ribbon ID · 그룹 A

그룹 A의 세 입자 연결같은 Ribbon ID의 현재 입자1,2,3을 지정한 순서로 연결합니다. 다른 ID의 그룹과는 연결하지 않습니다.123
그룹 A의 세 입자 연결같은ID의세입자를1→2→3순서로연결하며다른그룹에향하는연결은없다.123

이 그룹의 연결 순서는 1 → 2 → 3입니다. 번호는 같은 그룹의 입자 순서를 나타냅니다.

Ribbon ID · 그룹 B

그룹 B의 세 입자 연결같은 Ribbon ID의 현재 입자1,2,3을 지정한 순서로 연결합니다. 다른 ID의 그룹과는 연결하지 않습니다.123
그룹 B의 세 입자 연결같은ID의세입자를1→2→3순서로연결하며다른그룹에향하는연결은없다.123

이 그룹의 연결 순서는 1 → 2 → 3입니다. 번호는 같은 그룹의 입자 순서를 나타냅니다.

그룹 사이를 연결하지 않습니다

각 점은 현재 존재하는 서로 다른 입자입니다. 같은 ID 안에서 지정한 순서로 연결하며 그룹 A와 B 사이를 연결하지 않습니다.

궤적을 만들려면

이동하는 발생 지점에 새 입자를 남기고 그룹/순서·수명을 관리합니다. 입자 하나를 이동시키기만 해도 그 과거 궤적이 자동 생성되는 것은 아닙니다.

바인딩을 확인합니다

Ribbon ID·Link Order·Position·Width 등 렌더러가 읽는 속성과 실제 작성 값을 맞춥니다. 그룹이나 순서가 뒤섞이면 예상과 다른 띠가 생길 수 있습니다.

점과 선은 연결 관계를 단순화한 예시입니다. 실제 Ribbon의 너비·테셀레이션·머티리얼·시점에 따른 픽셀 결과나 Niagara ID의 내부 저장 형식을 나타내지 않습니다.

위 그림은 Ribbon ID와 연결 순서로 띠가 만들어지는 방식을 설명용으로 보여 줍니다. 그룹 A에는 같은 Ribbon ID를 가진 입자 1, 2, 3이 있고, 리본은 이들을 지정한 순서 1 → 2 → 3으로 잇습니다. 그룹 B에도 입자 세 개가 같은 방식으로 이어지지만, 그룹 A와 B 사이에는 연결선이 없습니다. 각 점은 지금 존재하는 서로 다른 입자이며, 입자 하나의 과거 위치를 저장해 그린 선이 아닙니다.

그림 아래의 설명은 두 가지를 짚습니다. 궤적을 만들려면 이동하는 발생 지점에 새 입자를 남기고 그룹과 순서, 수명을 관리해야 하며, 입자 하나를 움직이기만 해서는 지나온 궤적이 생기지 않습니다. 또 렌더러가 읽는 Ribbon ID, Link Order, Position, Width 같은 바인딩과 실제로 그 속성에 쓰는 값을 맞춰야 합니다. 그룹이나 순서가 뒤섞이면 예상과 다른 띠가 생깁니다. 이 그림의 점과 선은 연결 관계를 단순하게 나타낸 것이라, 실제 리본의 너비나 테셀레이션, 머티리얼, 보는 각도에 따른 픽셀 결과를 나타내지는 않습니다.

리본의 주요 설정은 다음과 같습니다.

  • Material: 리본에 쓸 머티리얼을 지정합니다.
  • 너비: 리본의 두께는 Ribbon Width 바인딩이 읽는 입자 속성으로 정합니다. 렌더러에 고정된 너비 값을 넣는 방식이 아니라, 입자마다 쓴 너비 속성을 읽는 방식입니다.
  • 테셀레이션(Tessellation): 띠를 얼마나 잘게 나누어 부드럽게 그릴지 정합니다. Tessellation 범주의 Mode와 Max Tessellation Factor 같은 값을 높일수록 곡선이 부드러워지지만 그려야 할 면이 늘어 비용도 커질 수 있습니다.

Light Renderer

Light Renderer는 파티클마다 주변 환경을 비추는 빛을 만듭니다. 입자를 밝게 그리는 데서 그치지 않고 주변 물체에 실제로 조명을 주어야 할 때 씁니다. 타오르는 불꽃이 주변을 밝히는 효과나 폭발 순간의 섬광, 번개처럼 빛을 내는 효과에 다른 렌더러와 함께 더해 쓰는 경우가 많습니다.

  • Light Rendering Enabled Binding: 입자마다 조명을 켤지를 읽을 속성을 지정합니다.
  • Color Binding과 Color Add: 입자의 색과 더해 줄 색 성분으로 조명의 색과 밝기를 조절합니다. Alpha Scales Brightness를 켜면 입자 색의 알파도 밝기에 곱해집니다.
  • Radius Binding과 Radius Scale: 입자의 반경 속성과 그 배율로 조명이 닿는 범위를 조절합니다.

렌더러를 더하고 다루는 방법

렌더러는 이미터의 Render 그룹에 추가합니다. Render 그룹의 + 버튼을 누르고 원하는 렌더러를 검색해 고르면 됩니다.

효과의 품질은 렌더러만큼이나 머티리얼에 크게 좌우됩니다. 파티클용 머티리얼은 보통 반투명(Translucent)이나 덧셈(Additive) 블렌드 모드를 쓰고, 특정 부분을 잘라 내야 할 때는 마스크(Masked) 모드를 씁니다. 머티리얼은 기본 머티리얼 설정과 적용에서 자세히 다룹니다.

한 이미터에 렌더러를 여러 개 두어 복합적인 효과를 만들 수 있습니다. 예를 들어 Sprite Renderer로 불꽃 이미지를 그리면서 Light Renderer로 빛도 함께 낼 수 있고, 이 경우 Render 그룹에는 렌더러가 두 개 놓입니다.

그리는 순서도 알아 둘 것이 있습니다. 한 렌더러 안에서 입자들을 어떤 순서로 그릴지는 Sort Mode로 정하고, 같은 종류의 머티리얼을 쓰는 렌더러끼리의 순서는 Sort Order Hint 같은 설정으로 조절합니다. Render 목록에서 렌더러를 불투명한 것과 투명한 것 순서로 끌어다 놓는 것만으로는 엔진의 렌더링 패스 전체 순서를 바꿀 수 없습니다.


표시 문제와 비용 나누어 보기

화면 결과가 이상할 때는 증상에 따라 먼저 확인할 곳이 다릅니다.

증상먼저 확인할 것
살아 있는 입자가 보이지 않음렌더러가 켜져 있는지, 머티리얼, 크기와 알파, 위치와 바운드
색이나 알파 입력이 반영되지 않음렌더러의 바인딩과 머티리얼이 Particle Color를 쓰는지
반투명 입자의 앞뒤가 튐Sort Mode와 Facing Mode, Alignment를 나누어 확인
리본 연결이 뒤섞임Ribbon ID와 연결 순서, 입자 사이 간격

비용이 드는 곳도 표현마다 다릅니다. 스프라이트는 반투명이 덮는 화면 면적과 오버드로우를, 메시는 인스턴스와 삼각형의 수, 머티리얼 슬롯을, 리본은 세그먼트 수와 테셀레이션을, 라이트는 조명의 개수와 반경을 비교합니다. 렌더러를 하나 더할 때는 화면에서 얼마나 좋아졌는지와 비용이 얼마나 늘었는지를 함께 측정합니다.


정리

  • 렌더러는 Render 그룹에서 시뮬레이션된 입자의 속성을 읽어 화면에 그리며, 렌더러가 없으면 입자가 보이지 않습니다.
  • 한 이미터에 렌더러를 여러 개 두어도 시뮬레이션하는 입자가 늘지 않으며, 각 렌더러가 같은 데이터를 자기 방식으로 씁니다.
  • Sprite는 2D 이미지, Mesh는 3D 메시, Ribbon은 같은 Ribbon ID의 입자를 순서대로 이은 띠, Light는 주변을 비추는 조명을 만듭니다.
  • 리본은 입자 하나의 지나온 길을 그리지 않으므로, 궤적을 만들려면 발생 지점에서 새 입자를 계속 남겨야 합니다.
  • 입자 사이의 그리는 순서는 Sort Mode로, 렌더러 사이의 순서는 Sort Order Hint로 조절하며, 비용은 표현마다 다른 항목으로 비교합니다.

연습 문제

1. 두 그룹의 리본 연결

그림의 그룹 A와 B에는 각각 입자가 3개 있고, 각 그룹을 1 → 2 → 3 순서의 열린 띠로 잇습니다. 그룹 A에는 1과 2, 2와 3을 잇는 기본 연결이 2개 있고 그룹 B도 같습니다. 두 그룹을 합치면 기본 연결은 몇 개일까요? A의 마지막 입자와 B의 첫 입자도 잇게 될까요?

해설 보기

열린 띠에서 입자가 n개이면 기본 연결은 n − 1개이므로, 두 그룹을 합치면 (3 - 1) + (3 - 1) = 4개입니다. Ribbon ID가 다른 그룹 사이는 잇지 않으므로, A의 마지막 입자와 B의 첫 입자 사이에는 연결이 생기지 않습니다.

이 수는 예시에서 입자 사이를 잇는 기본 연결의 수이며, 실제 렌더링에서 테셀레이션으로 만들어지는 세부 선분이나 삼각형의 수와 같다는 뜻은 아닙니다.

2. 스프라이트를 끈 뒤에 남은 빛

입자 10개를 Sprite Renderer와 Light Renderer로 함께 그리다가 Sprite Renderer만 껐습니다. 화면에는 무엇이 남고, 시뮬레이션하는 입자 수는 어떻게 될까요?

해설 보기

스프라이트는 사라지지만, 다른 설정이 같다면 Light Renderer가 만드는 조명은 남습니다. 두 렌더러는 같은 입자 10개의 데이터를 각자의 방식으로 쓰고 있었기 때문입니다.

시뮬레이션하는 입자 수는 10개 그대로입니다. 렌더러를 켜거나 끄는 것은 그리는 방식을 바꿀 뿐, 입자를 만들거나 없애지 않습니다.

3. 궤적이 생기지 않는 리본

움직이는 투사체를 따라 꼬리를 만들려고, 입자 하나를 투사체와 함께 움직이게 하고 Ribbon Renderer를 붙였습니다. 그런데 꼬리가 전혀 보이지 않습니다. 무엇이 잘못되었을까요?

해설 보기

리본은 지금 살아 있는 여러 입자를 Ribbon ID와 연결 순서에 따라 잇는 렌더러입니다. 입자가 하나뿐이면 이을 상대가 없으므로 띠가 생기지 않고, 그 입자의 지나온 위치가 저절로 저장되지도 않습니다.

꼬리를 만들려면 투사체가 움직이는 동안 발생 지점에서 새 입자를 계속 만들어 같은 Ribbon ID로 묶고, 수명으로 꼬리의 길이를 조절합니다. 이때 Ribbon ID와 Link Order 바인딩이 실제로 쓰는 속성과 맞는지도 확인합니다.

쓰는 버전에서 각 렌더러의 속성과 바인딩은 Epic의 나이아가라 렌더러 레퍼런스에서 확인할 수 있습니다.

다음 글 시스템과 이미터 속성에서는 시스템 전체와 이미터 하나에 각각 적용되는 속성을 구분하고, 반복과 지속 시간, 좌표 공간 같은 설정을 살펴봅니다.