게임 퍼포먼스의 보이지 않는 적
나이아가라 VFX를 연동했을 때 시각적으로는 좋아 보이지만,
보이지 않는 곳에서 퍼포먼스를 좀먹는 원인이 숨어있다.
이 문제의 핵심에는 '오버드로(Overdraw)'라는 개념이 있다.
간단히 말해, GPU가 파티클 텍스처의 실제 그림이 없는 '투명한 사각형 영역'까지 전부 계산하느라 자원을 낭비하는 현상...!
이 글에서는 이 고질적인 문제를 해결할 가장 강력한 무기인 '컷아웃(Cutout)' 기법을 정리 및 소개한다.

1. 숨겨진 비용: GPU는 아무것도 없는 공간을 렌더링하고 있다
연기나 마법 이펙트에 사용되는 파티클은 보통 불규칙한 모양을 가지고 있지만,
실제 텍스처 에셋은 사각형 프레임 안에 담겨 있다.
문제는 GPU가 이 사각형 전체를 처리한다는 점!
투명한 부분도 GPU가 "여기는 투명이네"라고 계산한다.
파티클이 100개 겹치면 같은 픽셀을 100번 계산하는 낭비가 발생한다.
플레이어의 눈에는 보이지 않는 픽셀을 계산하느라 성능이 소모되고,
이펙트가 겹겹이 쌓일수록 그 비용은 기하급수적으로 증가한다.
우리가 인지하지 못하는 사이, 퍼포먼스는 조용히 사라지고 있었던 것이다.

2. '체크박스' 하나로는 부족한 이유
언리얼 엔진에는 '머티리얼 컷아웃 텍스처 사용(Use Material Cutout Texture)'이라는 체크박스 옵션이 있다.
클릭 한 번으로 모든 오버드로를 해결해 줄 것만 같아 보이지만...
이 자동화된 방식에 의존하는 것은 함정이다.
반면, SubUV Animation 에셋을 직접 생성하고 연결하는 방식은 우리에게 완전한 제어권을 준다.

자동 옵션이 왜 불충분한지 구체적인 기술적 한계 세 가지를 통해 알아보자.
- 정밀한 경계 조절의 부재:
- 자동 옵션은 엔진의 기본 임계값에 의존하여 컷아웃 경계를 결정.
- 이는 우리가 원하는 디테일을 놓치거나 불필요한 부분을 남길 수 있음.
- 에셋 방식에서는 알파 한계치(Alpha Threshold) 값을 직접 0.1이나 0.2 등으로 조절하여 "어디까지를 폴리곤으로 만들 것인가"를 제어할 수 있다.
- 버텍스 비효율성:
- 자동 방식은 때때로 불필요하게 많은 버텍스를 가진 비효율적인 지오메트리를 생성할 수 있다.
- 하지만 에셋 방식으로는 고도로 효율적인 BVC Eight Vertices 모드를 강제할 수 있다.
- 이 모드는 단 8개의 정점으로 복잡한 모양의 경계를 가장 효율적으로 유지해주며, 극심한 오버드로가 발생하는 대형 AOE 이펙트 최적화에 필수적!
- 플립북(Flipbook) 지원:
- 연기나 불꽃처럼 여러 프레임으로 구성된 애니메이션 텍스처(스프라이트 시트)의 경우, 자동 컷아웃은 각 프레임의 형태 변화를 완벽하게 추적하지 못하는 경우가 많다.
- SubUV Animation 에셋은 플립북 전체를 분석하도록 만들어져, 모든 프레임에서 최적의 컷아웃을 일관되게 유지한다.
3. '베이킹' : 성능을 미리 계산해두기
SubUVAnimation 에셋의 핵심 역할은 단순한 설정이 아니라, 일종의 '데이터 베이킹(data baking)' 과정에 있다. 이 과정은 두 부분의 명확한 관계로 이루어진다.
- SubUV Animation 에셋: 모든 계산이 일어나는 곳. 엔진은 이 에셋 안에서 텍스처를 분석하고, 최적화된 메쉬(컷아웃 지오메트리)를 미리 계산하여 데이터를 저장. 이 과정이 바로 '베이킹'!
- 나이아가라(Niagara): 나이아가라 이미터 자체는 실시간으로 컷아웃 계산을 하지 않는다. 그저 SubUV Animation 에셋에 미리 '구워진(baked)' 최적화 데이터를 참조하여 파티클을 효율적으로 렌더링할 뿐이다.
여기서 많은 개발자들이 혼동하는 중요한 포인트가 있다.
나이아가라에는 SubUVAnimation 에셋을 직접 할당하는 슬롯이 없다.
대신, Sprite Renderer의 '컷아웃 텍스처' 슬롯에 원본 텍스처를 할당하면,
엔진이 해당 텍스처에 연결된 베이킹 데이터를 자동으로 인식하여 적용한다.
게임 플레이 중에 발생할 수 있는 불안정한 실시간 계산에서,
에디터에서 단 한 번만 수행하는 안정적인 사전 계산으로 비용을 전환하는 것이다.

3.1 SubUV Animation
먼저, 컷아웃 정보를 담을 전용 에셋을 생성해야 한다.
콘텐츠 브라우저에서 우클릭 → 기타 → 서브 UV 애니메이션(SubUV Animation) 경로를 통해 에셋 생성.


생성된 에셋을 열고, 다음 주요 항목들을 설정한다.
이 설정값들은 최종 컷아웃 지오메트리의 형태와 정밀도를 결정하는 중요한 기준이 된다.
| 항목 | 설명 | 설정의 기술적 의미 |
| 서브 UV 텍스처 | 컷아웃을 적용할 파티클 스프라이트 시트(플립북) 텍스처 할당. | 최적화할 지오메트리의 원본 소스를 지정하는 단계. |
| 서브 이미지 가로/세로 | 플립북 텍스처의 가로(열) 및 세로(행) 프레임 개수를 지정. (예: 8x8) | 엔진이 각 프레임을 개별적으로 분석하여 최적의 컷아웃을 생성하도록 안내. |
| 바운딩 모드 | 컷아웃 폴리곤의 정밀도를 결정. (BVC Four Vertices, BVC Eight Vertices) |
생성될 지오메트리의 복잡도(버텍스 수)와 정밀도 간의 트레이드오프를 제어. |
| 오파시티 소스 모드 | 투명도 기준을 텍스처의 어떤 채널에서 가져올지 결정. (예: OSM Alpha) | 컷아웃 경계를 판단하는 데이터 소스를 명시적으로 지정. |
| 알파 한계치 | 컷아웃 경계가 될 알파 값의 임계치를 설정(권장: 0.1~0.3) | 이 값보다 낮은 알파 값을 가진 픽셀은 투명 영역으로 간주되어 잘려나간다. (너무 높으면 유용한 디테일이 잘려나가고, 너무 낮으면 최적화 효과가 미미해지기 때문) |
모든 설정을 완료한 후 에셋을 저장하면, 엔진은 이 설정들을 기반으로 최적의 컷아웃 바운딩 지오메트리를 미리 계산!
이 계산된 데이터는 텍스처와 내부적으로 연결되어 '베이킹'된 상태로 저장된다.
3.2. 나이아가라 스프라이트 렌더러 적용 (데이터 참조)

'컷아웃(Cutout)' 섹션에서 다음 항목들을 설정해야 한다.
- 컷아웃 텍스처: 1단계 SubUV Animation 에셋에서 사용한 것과 동일한 텍스처를 할당.
- 바운딩 모드: SubUV Animation 에셋과 동일한 모드를 선택.
- 알파 한계치: SubUV Animation 에셋과 동일한 값을 입력.
- 서브 이미지 크기 X/Y: SubUV Animation 에셋의 '서브 이미지 가로/세로' 값과 동일하게 설정.
파티클 유형에 따른 최적화 설정
프로젝트의 한정된 '성능 예산(performance budget)'을 관리하는 관점에서 볼 때,
모든 파티클에 동일한 고품질 컷아웃 설정을 적용하는 것은 비효율적이다.
예를 들어, 작고 빠르게 사라지는 스파크에 8개의 정점을 사용하는 것은 불필요한 지오메트리 오버헤드를 유발할 수 있다.
따라서 파티클의 시각적 중요도, 크기, 수명, 개수 등 특성을 고려하여 설정을 미세 조정하는 전략적 접근이 필요하다.
컷아웃의 정밀도와 성능 비용을 결정하는 가장 중요한 요소는 '바운딩 모드'이다.
각 모드의 기술적 특성과 권장 사용 사례는 다음과 같다.
| 모드 | 특징 | 권장 사용 사례 |
| BVC Four Vertices | 4개의 정점으로 구성된 사각형 기반 컷아웃. 지오메트리 오버헤드가 매우 낮다. | 형태가 비교적 단순하거나, 화면에 동시에 많은 수가 생성되는 작은 파티클(예: 스파크, 먼지). |
| BVC Eight Vertices | 8개의 정점으로 구성되어 더 정밀한 외곽선 표현이 가능. 투명 영역 제거 효율이 높다. | 형태가 복잡하고 화면에서 차지하는 비중이 큰 파티클(예: 대형 폭발, 연기). |
실제 프로젝트에서 자주 사용되는 파티클 유형에 따라,
예상되는 오버드로 수준과 권장되는 컷아웃 설정을 정리하면 다음과 같다.
이 가이드는 성능과 품질 사이의 균형을 맞추는 데 유용한 기준점이 될 수 있다.
| 파티클 유형 | 예상 오버드로 수준 | 컷아웃 필요성 | 권장 바운딩 모드 |
| 스파크, 먼지 | 낮음 (1~2배) | 선택적 | Four Vertices |
| 연기, 마법 이펙트 | 중간 (5~10배) | 권장 | Four/Eight Vertices |
| 대형 광역(AOE) 이펙트 | 높음 (10~20배 이상) | 필수 | Eight Vertices |
Troubleshooting
컷아웃 설정 시 자주 발생하는 문제와 해결 방안은 다음과 같다.
- 문제: 컷아웃이 전혀 적용되지 않음
- 점검 사항 1: SubUV Animation 에셋을 설정한 후 저장했는지 다시 확인. 저장 시점에 지오메트리가 베이킹되므로 이 과정이 누락되면 데이터가 생성되지 않는다.
- 점검 사항 2: 나이아가라 'Sprite Renderer'의 '컷아웃 텍스처' 슬롯에 SubUV Animation 에셋에서 사용한 것과 완전히 동일한 텍스처가 할당되었는지 교차 확인.
- 문제: 파티클 애니메이션이 깨지거나 이상하게 재생됨
- 점검 사항: SubUV Animation 에셋에 입력한 '서브 이미지 가로/세로' 값과, 나이아가라 'Sprite Renderer'의 '서브 이미지 크기 X/Y' 값이 정확히 일치하는지 반드시 확인. 이 값이 다르면 엔진이 텍스처 시트를 잘못 해석하게 된다.
4. 최적화 확인하는 방법
추상적인 최적화 개념을 구체적이고 측정 가능한 결과로 바꾸기 위해서는 시각적인 확인이 필수!
다음 단계를 통해 컷아웃이 제대로 적용되었는지 직접 확인할 수 있다.
- 에디터 뷰포트 상단의 표시(Show) →
- 최적화 뷰모드(Optimization Viewmodes) →
- 셰이더 복잡도(Shader Complexity)를 선택
이제 이펙트를 재생하며 화면의 색상 변화를 관찰.
- 성공: 파티클의 실제 모양 주변, 즉 투명했던 영역이 짙은 초록색(부하 거의 없음)으로 표시되거나 아예 색이 나타나지 않는다. 이는 컷아웃이 작동하여 불필요한 렌더링을 막고 있다는 증거.
- 실패: 파티클의 원래 사각형 텍스처 영역 전체가 여전히 붉은색, 심지어는 심각한 경우 흰색으로 빛나고 있다면, 컷아웃이 적용되지 않아 오버드로가 계속 발생하고 있다는 의미.

체크박스를 넘어서
언리얼 엔진에서의 효과적인 VFX 최적화는 단순히 설정 몇 개를 켜는 것을 넘어,
오버드로와 같은 근본적인 프로세스에 대한 깊은 이해를 요구한다.
'머티리얼 컷아웃 텍스처 사용' 체크박스는 편리해 보일 수 있지만, 성능에 대한 정밀한 제어와 최고의 효율을 원한다면 SubUV Animation 에셋을 활용하는 것이 표준이다.
나이아가라의 Sprite Renderer 설정에서 ‘픽셀 범위 모드(Pixel Coverage Mode)’하는 것도 있는데, 기본값이 Automatic이라서 이미 설정되어 있어 크게 신경 쓸 필요는 없다.
파티클이 카메라에서 멀어지면 화면에 몇 픽셀 안 되게 작아지는데,. 이렇게 작은 파티클도 풀 해상도로 연산하면 낭비다. 파티클이 화면에서 차지하는 픽셀 수가 적을 때, 불투명도를 조절하거나 렌더링 방식을 최적화해서 GPU 부담을 줄여주는 기능이다.

이 옵션을 컷아웃과 함께 사용하면, 멀리 있어 작게 보이는 파티클의 셰이더 연산을 더욱 효율적으로 제어하여 추가적인 성능 향상을 꾀할 수 있다.
저는 AI를 적극적으로 활용하는 개발자입니다.
코드 구현은 AI 도구와 협업하고, 저는 문제 분석, 기술 설계, 트러블슈팅, 최종 검증에 집중합니다. 모든 기술적 의사결정과 트러블슈팅은 제가 직접 수행한 것이며, AI는 그 과정을 가속화하는 도구였습니다.
이 블로그는 그 판단과 사고의 기록입니다.
"어떤 도구를 쓰느냐"보다 "어떤 문제를 해결하느냐"가 진짜 개발자의 가치라고 믿습니다.
I believe a developer's value lies in "what problems they solve," not "what tools they use."
'Dev. > UE 언리얼 엔진' 카테고리의 다른 글
| [GAS] LOD 설정 실수로 인한 빌드 크래시, 원인 분석과 해결까지 (0) | 2026.01.06 |
|---|---|
| [GAS] 렌더링 최적화 : 30 FPS에서 60 FPS까지 (2) (2) | 2026.01.05 |
| [GAS] 렌더링 최적화 : 30 FPS에서 60 FPS까지 (2) | 2025.12.30 |
| [GAS] UE5 네트워크 설정에 대한 조사... 그리고 프로젝트 적용 (0) | 2025.12.29 |
| [GAS] 함정 시스템 개선 (0) | 2025.12.24 |
