본문 바로가기

기본 파티클 렌더링 설정

Sprite Renderer의 머티리얼·정렬·정렬 방향·크기 바인딩을 조정하고 다른 렌더러와 조합하는 기초를 익힙니다.

입자가 생성되고 살아 있는 동안 어떻게 변하는지까지 정했다면, 남은 것은 화면에 어떻게 그려지는지입니다. 렌더러 설정이 맞지 않으면 입자의 데이터가 제대로 계산되고 있어도 원하는 모습으로 보이지 않습니다. 흰 사각형만 보이거나, 엉뚱한 방향을 바라보거나, 겹친 입자가 깜빡이는 문제가 대부분 여기서 생깁니다. 렌더러 모듈의 역할과 기본 사용법에서 렌더러의 종류를 살펴봤으니, 이 글에서는 가장 많이 쓰는 Sprite Renderer의 설정을 하나씩 바꿔 보며 머티리얼과 방향, 정렬, 바인딩이 결과를 어떻게 바꾸는지 확인합니다.


렌더러가 정하는 최종 모습

렌더링은 이미터의 Render 그룹에 있는 렌더러가 맡습니다. 렌더러는 입자의 위치와 색, 크기 같은 데이터를 실제 화면의 픽셀로 바꾸므로, 입자가 점으로 보일지, 이미지로 보일지, 3D 모델로 보일지는 전적으로 렌더러가 정합니다. 그래서 효과의 목적과 스타일에 맞는 렌더러를 고르고 그 속성을 꼼꼼히 설정해야 합니다.

한 이미터에는 렌더러를 여러 개 둘 수 있습니다. 예를 들어 같은 이미터에서 Sprite Renderer로 연기를 그리면서 Light Renderer로 빛을 낼 수 있습니다.


Sprite Renderer의 주요 설정

Sprite Renderer는 입자를 2D 이미지인 스프라이트로 그리며, 불꽃, 연기, 비, 먼지처럼 캐주얼한 효과와 사실적인 효과 대부분에 알맞습니다. Render 그룹에 Sprite Renderer를 추가하고 선택하면 선택(Selection) 패널에서 다음 속성들을 설정할 수 있습니다.

Material

Material은 스프라이트에 쓸 머티리얼을 지정하는 가장 중요한 속성입니다. 머티리얼이 입자의 색과 질감, 투명도, 빛과의 상호작용을 정하고, 불투명도(Opacity)를 조절해 입자가 서서히 나타나거나 사라지는 효과도 만듭니다. 이때 머티리얼의 Usage에서 나이아가라 스프라이트(Niagara Sprites)용으로 쓸 수 있는지도 확인합니다. 에셋을 고를 수 있다고 해서 모든 머티리얼이 이 렌더러에 맞는 것은 아닙니다.

파티클용 머티리얼은 보통 다음 블렌드 모드 가운데 하나를 씁니다.

  • Translucent(반투명): 연기나 안개처럼 뒤의 배경이 비쳐 보이는 효과에 씁니다.
  • Additive(덧셈): 불꽃이나 스파크, 에너지 구슬처럼 밝게 빛나며 뒤의 색과 더해지는 효과에 씁니다. 검은 바탕에 흰 그림으로 만든 텍스처와 잘 맞습니다.
  • Masked(마스크): 나뭇잎이나 파편처럼 가장자리가 뚜렷하고 보이는 부분과 보이지 않는 부분이 분명한 효과에 씁니다.

SubUV

머티리얼이 여러 장의 그림을 가로세로로 늘어놓은 스프라이트 시트(sprite sheet)를 쓴다면, SubUV 설정으로 그 그림들을 애니메이션처럼 차례로 보여 줄 수 있습니다. Sub Image Size는 시트를 가로와 세로로 몇 칸씩 나눌지를 정하며, 4×4 시트라면 X: 4, Y: 4로 둡니다. Sub UV Blending Enabled를 켜면 프레임 사이를 부드럽게 섞어 보여 줍니다.

Facing Mode와 Alignment

Facing Mode는 스프라이트의 면이 어느 쪽을 바라볼지를 정합니다. Face Camera는 면이 늘 카메라를 향하게 할 때 씁니다. Alignment는 그 면 안에서 스프라이트를 어떻게 돌려 정렬할지를 정하며, Velocity Aligned는 입자의 속도 방향을 따라 정렬합니다. 이때 속도가 0인 입자는 따라갈 방향이 없으므로 그 경우의 결과도 확인해야 합니다. 정해진 방향을 바라보게 하고 싶다면 Custom Facing Vector와 Sprite Facing 바인딩을, 필요하면 Custom Alignment도 설정합니다. PSA로 시작하는 캐스케이드의 항목과는 섞어 쓰지 않습니다.

Sort Mode

Sort Mode는 반투명한 입자들을 어떤 순서로 그릴지 정합니다. 반투명한 물체는 그리는 순서에 따라 앞뒤가 뒤바뀌어 보이는 문제가 생길 수 있으므로 이 설정이 중요합니다. View Distance는 카메라 위치까지의 거리를, View Depth는 카메라가 바라보는 방향의 깊이를 기준으로 정렬하므로, 장면에 따라 결과와 비용을 비교해 고릅니다. Custom Ascending이나 그 반대 방향의 사용자 정의 정렬은 Custom Sorting 바인딩이 가리키는 입자 속성의 값으로 정렬하며, 프로젝트 전체의 반투명 정렬 축 설정과는 다른 항목입니다.


스프라이트 설정을 바꿔 보기

앞에서 만든 NS_BasicSpawn을 다시 엽니다. 시스템 개요(System Overview)에서 이미터의 Render 그룹에 있는 Sprite Renderer를 선택하고, 선택 패널에서 Material 속성을 찾습니다. 템플릿마다 기본 에셋이 다를 수 있으므로 지금 지정된 머티리얼과 그 블렌드 모드를 먼저 적어 둡니다.

다음으로 Material 옆의 드롭다운이나 검색 버튼을 눌러, 프로젝트에 있는 먼지나 연기용 파티클 머티리얼을 고릅니다. M_Dust_Particle이나 M_FX_Smoke_SubUV 같은 이름은 프로젝트나 콘텐츠 팩에 따라 없을 수 있으므로, 모든 프로젝트에 있는 기본 에셋이라고 가정하지 않습니다. 엔진에 들어 있는 머티리얼을 찾고 싶다면 콘텐츠 브라우저의 설정에서 엔진 콘텐츠 표시(Show Engine Content)를 켠 뒤 Particle이나 FX로 검색합니다.

머티리얼을 바꾸면 미리보기에서 입자의 모양과 느낌이 바로 달라집니다. 바꾼 머티리얼이 스프라이트 시트를 쓴다면 실제 열과 행 수에 맞게 Sub Image Size를 설정합니다. 그런데 칸 수를 넣는 것만으로는 애니메이션이 진행되지 않습니다. SubUV Animation 같은 모듈이 SubImageIndex를 시간에 따라 갱신해야 하고, 머티리얼의 SubUV 처리와 렌더러의 바인딩도 맞아야 합니다. 이 세 가지를 확인한 뒤 프레임 보간을 켜고 끄며 비교해 봅니다.

마지막으로 Facing Mode는 Face Camera로 둔 채 Alignment를 Velocity Aligned로 바꿔, 입자가 움직이는 방향을 따라 정렬되는 모습을 비교합니다. 비교가 끝나면 원래의 Facing Mode와 Alignment로 되돌립니다.


칸 수와 재생은 따로 확인한다

스프라이트 시트에서 흔히 하는 실수는 칸 수만 맞추면 애니메이션이 재생되리라 생각하는 것입니다. 4×4 시트에는 그림 칸이 4 × 4 = 16개 있습니다. 머티리얼의 SubUV 처리와 렌더러의 SubImageIndex 바인딩이 모두 정상이어도, 그 인덱스를 첫 칸의 값으로 고정해 두면 같은 칸만 계속 보입니다.

분할 설정은 한 칸이 차지하는 UV 범위를 정할 뿐이고, 애니메이션을 재생하려면 시간에 따라 읽는 인덱스가 바뀌어야 합니다. 원본 시트의 칸 배치와 머티리얼의 연결이 의심된다면, 인덱스를 손으로 한 칸씩 바꿔 가며 원하는 그림이 나오는지 먼저 확인합니다.


다른 렌더러와 함께 쓰기

한 이미터에 Sprite Renderer 말고 다른 렌더러를 더해 복합적인 효과를 만들 수 있습니다. 불꽃 효과라면 Sprite Renderer로 불꽃 이미지를 그리고, Light Renderer를 더해 입자가 주변 환경에 실제 빛을 내게 할 수 있습니다. 다만 Light Renderer는 기본 모양을 먼저 완성한 뒤에 적은 개수와 작은 반경으로 시작해 더하고, 늘어난 비용을 측정합니다.


바인딩과 증상 확인하기

렌더러의 Position, Color, Sprite Size 바인딩이 모듈에서 실제로 쓰는 속성을 읽고 있는지 확인합니다. 예를 들어 입자 색의 Alpha가 머티리얼의 Opacity에 연결되어 있지 않다면, 초기 색의 Alpha를 바꿔도 원하는 투명도가 나오지 않습니다.

증상별로 먼저 볼 곳도 정해 두면 좋습니다. 흰 사각형만 보이면 머티리얼과 텍스처를, 방향이 이상하면 Facing Mode와 Alignment, 속도를, 겹칠 때 깜빡이면 반투명 정렬을 먼저 확인합니다. 효과가 화면 가장자리에서 잘린다면 표시 범위의 문제이므로 바운드를 따로 확인합니다. 마지막으로 카메라의 거리와 각도를 바꿔 가며 결과가 어떻게 달라지는지 비교합니다.


정리

  • Sprite Renderer의 Material이 입자의 색과 질감, 투명도를 정하며, 머티리얼의 Usage와 블렌드 모드(Translucent, Additive, Masked)를 효과에 맞게 고릅니다.
  • Sub Image Size는 시트의 칸 수를 정할 뿐이고, 애니메이션은 SubImageIndex가 시간에 따라 바뀌어야 재생됩니다.
  • Facing Mode는 면이 바라볼 방향을, Alignment는 면 안의 정렬을 정하며, Velocity Aligned는 속도가 0일 때의 결과도 확인합니다.
  • Sort Mode는 반투명 입자를 그리는 순서를 정하며, View Distance와 View Depth는 기준이 다릅니다.
  • 렌더러의 바인딩이 모듈이 쓰는 속성을 읽는지 확인하고, 흰 사각형, 방향, 깜빡임, 잘림은 각각 다른 설정에서 찾습니다.

연습 문제

1. 2×4 시트와 바뀌지 않는 투명도

열 2개, 행 4개인 새 스프라이트 시트를 쓰면서 Sub Image Size를 예전의 4×4로 그대로 두었습니다. 분할 입력은 어떻게 고쳐야 하고, 전체 그림 칸은 몇 개일까요? 또 Scale Color의 Alpha를 1에서 0으로 바꿨는데, 머티리얼의 Opacity는 상수 1만 읽고 있습니다. 투명도가 그대로인 원인을 Spawn Rate에서 먼저 찾는 것이 알맞을까요?

해설 보기

열과 행에 맞게 X=2, Y=4로 고치며, 그림 칸은 2 × 4 = 8개입니다. 이 설정만으로는 인덱스가 시간에 따라 바뀌지 않으므로, 재생하려면 SubImageIndex를 갱신하는 모듈도 필요합니다.

투명도의 원인을 Spawn Rate에서 찾는 것은 알맞지 않습니다. Spawn Rate는 생성 수를 바꾸는 입력이고, 입자의 Alpha와는 관계가 없습니다. 머티리얼의 Opacity가 상수 1만 읽는다면 입자의 Alpha가 바뀌어도 그 값이 Opacity로 가지 않으므로, 머티리얼에서 Particle Color의 알파를 Opacity에 연결했는지와 렌더러의 Color 바인딩을 확인합니다.

2. 한 칸만 보이는 애니메이션

4×4 시트로 Sub Image Size를 X: 4, Y: 4로 맞췄는데, 입자마다 첫 칸의 그림만 계속 보입니다. 무엇이 빠졌을까요?

해설 보기

칸 수는 맞췄지만 SubImageIndex가 시간에 따라 바뀌지 않고 있습니다. 분할 설정은 한 칸의 UV 범위를 정할 뿐이므로, SubUV Animation 같은 모듈로 입자의 나이에 따라 인덱스를 갱신해야 합니다.

모듈을 넣었는데도 같다면 렌더러의 Sub Image Index 바인딩이 그 모듈이 쓰는 속성을 읽는지, 머티리얼이 SubUV 처리를 하는지 확인합니다.

3. 멈춘 입자의 방향

Alignment를 Velocity Aligned로 바꿨더니 움직이는 입자는 이동 방향을 따라 잘 정렬되는데, 막 생겨 아직 멈춰 있는 입자는 방향이 제각각입니다. 왜 그럴까요?

해설 보기

Velocity Aligned는 입자의 속도 방향을 기준으로 정렬하므로, 속도가 0인 입자는 따라갈 방향이 없습니다. 그래서 멈춰 있는 입자는 기대한 방향으로 정렬되지 않을 수 있습니다.

생성 직후부터 일정한 방향을 원한다면 Particle Spawn에서 초기 속도를 주거나, Custom Alignment와 그에 맞는 바인딩으로 정렬 방향을 직접 지정합니다.

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

다음 글 사용자 정의 모듈에서는 기본 모듈로 부족한 동작을 스크래치 패드에서 직접 만들어 봅니다.