안동민 개발노트

본문 시작

렌더링 효과 적용

Sprite·Mesh·Ribbon·Light Renderer의 표현과 비용을 비교하고 Mesh Renderer로 회전하는 폭발 파편을 만듭니다.

앞선 절들에서 우리는 파티클에 머티리얼을 적용하고, 커스텀 머티리얼을 통해 나이아가라 데이터를 렌더링에 활용하는 방법을 배웠습니다.

이제 이러한 지식을 바탕으로 나이아가라 시스템이 기본적으로 제공하는 다양한 렌더러 모듈을 활용하여 파티클에 간단하지만 효과적인 시각적 효과를 적용하는 방법에 대해 알아보겠습니다.

렌더러 모듈은 파티클이 화면에 어떻게 그려질지 결정하는 역할을 합니다.

Sprite Renderer 외에도 파티클을 3D 메시로 표현하거나, 실제 빛을 방출하게 하거나, 심지어 리본 형태로 궤적을 그리게 하는 등 다채로운 시각 효과를 위한 렌더러들이 존재합니다.


주요 렌더러 모듈 살펴보기

나이아가라에서 가장 자주 사용되는 렌더러 모듈들은 다음과 같습니다.

Sprite Renderer (스프라이트 렌더러)

가장 기본적이고 보편적인 렌더러입니다.

파티클을 2D 이미지(스프라이트) 형태로 렌더링합니다.

  • 주요 속성: Material (가장 중요), Facing Mode (보는 방향), Alignment (스프라이트 평면 안 정렬), Sort Mode (정렬 방식), Sub Image Size와 Sub Image Index Binding (시트 분할과 프레임 선택).
  • 활용: 불꽃, 연기, 먼지, 비, 폭발 파편, 마법 이펙트 등 거의 모든 종류의 2D 기반 파티클 효과에 사용됩니다.

Mesh Renderer (메시 렌더러)

파티클을 2D 스프라이트 대신 지정된 3D 스태틱 메시 형태로 렌더링합니다.

  • 주요 속성: 메시 목록과 Material Overrides, Scale Binding, Mesh Orientation Binding, Bounds와 거리 컬링 설정.
  • 활용: 물리적인 파편(돌, 나무 조각, 유리 파편), 날아다니는 곤충, 작은 건물 조각, 총알 탄피 등 3D 형태를 유지해야 하는 파티클에 적합합니다. 파티클이 회전하거나 충돌 시 현실적인 느낌을 줍니다.

Ribbon Renderer (리본 렌더러)

여러 파티클을 Ribbon ID와 Link Order에 따라 연결해 리본 형태의 메시를 만듭니다. 한 파티클의 이동 이력을 자동으로 모두 저장하는 기능은 아닙니다.

마치 파티클이 움직인 자리에 페인트를 칠한 듯한 효과를 줍니다.

  • 주요 속성: Material, Ribbon Width (리본의 두께), Facing (리본이 바라보는 방향), Tessellation Factor (곡선 부드러움).
  • 활용: 빛의 궤적(라이트 트레일), 마법 주문의 흔적, 검격 효과, 낙하하는 물방울의 흔적 등 선형적인 궤적이 중요한 효과에 사용됩니다.

Light Renderer (라이트 렌더러)

파티클이 게임 월드에 실제 빛을 방출하도록 합니다.

성능 비용이 가장 높은 렌더러 중 하나이므로 신중하게 사용해야 합니다.

  • 주요 속성: Color Binding, Color Add, Radius Binding, Radius Scale, Alpha Scales Brightness. 그림자 지원과 옵션은 엔진 버전·조명 경로에 따라 확인합니다.
  • 활용: 폭발 시 섬광, 마법 구체의 발광, 타오르는 불꽃 등 주변 환경을 밝히는 경우에 사용됩니다. 매우 적은 수의 파티클에만 적용하는 것이 좋습니다.

렌더러 모듈 적용 및 설정 방법

렌더러 모듈은 나이아가라 이미터의 Render 섹션에 추가됩니다.

렌더러 추가: 나이아가라 에디터의 개요(Overview) 패널에서 이미터를 선택한 후, Render 섹션 아래의 + 버튼을 클릭합니다.

원하는 렌더러 모듈(예: Mesh Renderer, Ribbon Renderer)을 검색하여 추가합니다.

속성 설정: 추가된 렌더러 모듈을 선택하면 디테일(Details) 패널에 해당 렌더러의 고유한 속성들이 나타납니다.

머티리얼 할당: Sprite/Mesh/Ribbon 렌더러는 머티리얼을 사용합니다. Light Renderer는 표면을 그리는 머티리얼 슬롯 대신 조명 속성을 사용합니다.

이전에 배운 방식으로 적절한 머티리얼을 할당해야 합니다. (Mesh Renderer는 3D 메시용 머티리얼, Ribbon Renderer는 리본용 머티리얼)

필요한 추가 모듈: 일부 렌더러는 특정 파티클 속성을 필수로 요구합니다.

예를 들어 Ribbon Renderer는 RibbonID가 필요할 수 있고, Mesh Renderer는 Sprite Size 대신 Mesh Scale을 사용합니다.

필요한 속성이 없다면 Particle Spawn 또는 Particle Update 섹션에서 초기화/업데이트 모듈을 추가해야 합니다.


직접 해보기: 파편 효과를 위한 Mesh Renderer 적용하기

간단한 폭발 시 튀는 파편 효과를 위해 Mesh Renderer를 적용해 보겠습니다.

NS_BasicSpawn을 복제해 엽니다. 연속 Spawn Rate를 끄고 Emitter Update의 Spawn Burst Instantaneous에서 시간 0에 20개를 생성하도록 합니다. Emitter State는 Self 수명 관리와 Once 루프로 설정하고, 파티클이 수명을 마칠 때까지 처리되도록 합니다.

기존 Sprite Renderer를 선택하고 삭제합니다.

(우클릭 > Delete 또는 선택 후 Delete 키)

Render 섹션 아래의 + 버튼을 클릭하고 Mesh Renderer를 검색하여 추가합니다.

Mesh Renderer를 선택합니다.

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

  • Mesh 속성 옆의 드롭다운 메뉴를 클릭하여 프로젝트에 있는 큐브 메시를 할당합니다. 에셋 이름은 프로젝트마다 다르므로 실제 치수를 확인합니다. 아래 크기 예제는 한 변 100 cm인 큐브를 기준으로 합니다.

Material 속성에는 기본 머티리얼(DefaultMeshMaterial)을 사용하거나, 이전에 만들었던 M_SimpleFire처럼 Additive 블렌드 모드의 Unlit 머티리얼을 할당해도 됩니다. (파편에 발광 효과를 주려면)

이제 이미터의 Particle Spawn 섹션으로 이동합니다.

Initialize Particle에서 Sprite Size 대신 Mesh Scale을 제어해야 합니다.

Mesh Scale을 Vector3의 각 축 0.05로 설정하면 100 cm 큐브가 약 5 cm 크기가 됩니다. Sprite Renderer를 제거했다면 Sprite Size를 0으로 만들 필요는 없습니다. Lifetime은 1~2초로 둡니다.

필요하면 랜덤 범위를 적용해 크기 변화를 줄 수 있습니다.

Particle Spawn 섹션에서 초기 속도와 회전을 설정합니다.

Add Velocity 모듈의 Velocity Z값을 100.0 정도로 유지하고, Vector3 X, Y 값에 Random Range Float를 사용하여 -50.0 ~ 50.0 정도로 무작위 속도를 추가하여 사방으로 흩뿌려지도록 합니다.

Particle Spawn에 Initial Mesh Orientation을 추가해 초기 방향을 정합니다. Particle Update에는 Particle State, Gravity Force, Solve Forces and Velocity를 두고, Update Mesh Orientation으로 회전 속도를 적용합니다. 버전에 표시되는 입력 단위를 확인해 작은 각속도부터 시작합니다. 중력은 solver 앞에, 회전 갱신은 해당 모듈의 의존성 안내에 맞춰 배치합니다.

Mesh Renderer의 Scale/Orientation Binding을 확인합니다. Pivot Offset은 우선 0으로 둡니다. 원점이 중심이 아닌 메시라면 에셋의 피벗과 오프셋 좌표 공간을 확인한 뒤 보정합니다. 고정 숫자 2.5가 모든 메시의 중심을 맞추지는 않습니다.

이제 뷰포트에서 스프라이트 대신 작은 큐브들이 튀어 오르다 중력에 의해 떨어지는 파편 효과를 볼 수 있을 겁니다.


렌더러 조합 및 성능 고려 사항

  • 다중 렌더러: 하나의 이미터는 여러 개의 렌더러를 가질 수 있습니다. 예를 들어, 폭발 효과 이미터에 Sprite Renderer로 불꽃과 연기를 표현하고, Mesh Renderer로 파편을 렌더링하며, Light Renderer로 섬광 효과를 동시에 줄 수 있습니다.
  • 성능: 각 렌더러는 고유한 성능 비용을 가집니다.
    • Sprite Renderer의 비용도 화면 면적·투명 중첩·셰이더 복잡도에 따라 커집니다.
    • Ribbon Renderer는 리본을 생성하는 추가적인 메시 연산이 필요합니다.
    • Mesh Renderer는 3D 메시를 렌더링하므로, 메시의 복잡도와 파티클 수에 따라 성능 비용이 크게 증가할 수 있습니다. 특히 복잡한 메시를 대량으로 렌더링하는 것은 피해야 합니다.
    • Light Renderer는 동시 라이트 수와 반경을 제한합니다. 지원하는 그림자 기능을 쓸 때는 그 비용도 별도로 측정합니다. 렌더러 종류만으로 항상 같은 비용 순서를 단정할 수 없습니다.
  • 정렬 문제(Sorting Issues): Translucent 블렌드 모드를 사용하는 렌더러들은 렌더링 순서에 따라 시각적인 문제가 발생할 수 있습니다. Sort Mode 설정을 조절하거나, 같은 시스템 내 렌더러의 Sort Order Hint, 컴포넌트 간 Translucency Sort Priority의 범위를 구분해 조절합니다. 우선순위만으로 교차하는 반투명 면의 모든 문제를 해결할 수는 없습니다.

다양한 렌더러 모듈을 이해하고 적절히 활용하는 것은 나이아가라 효과의 시각적인 다양성을 크게 확장시킵니다.

스프라이트, 메시, 리본, 빛 등 각 렌더러의 특성을 파악하고 여러분의 의도에 맞게 조합하면, 단순한 파티클을 넘어선 풍부하고 몰입감 있는 시각 효과를 만들어낼 수 있을 겁니다.