본문으로 건너뛰기
VFX Diary
VFX Diary
교육자료

Unreal VFX용 Shader 성능을 볼 때 먼저 확인할 체크리스트

게임 VFX에서 Material과 Shader는 화면의 인상을 크게 바꾼다. 하지만 멋진 그래프를 만들었다고 해서 항상 좋은 이펙트가 되는 것은 아니다. 너무 비싼 Material은 프레임을 떨어뜨리고, 특히 파티클처럼 많이 그려지는 요소에서는 문제가 더 빨리 드러난다.

이 글은 Unreal VFX 작업자가 Material 성능을 볼 때 먼저 확인하면 좋은 항목을 정리한 체크리스트다.

1. Translucent를 너무 쉽게 쓰고 있지 않은가?

Unreal VFX용 Shader 성능을 볼 때 먼저 확인할 체크리스트
VFX Material Cost Stack – Material Stats Panel. 이미지 출처: Epic Games 공식 Unreal Engine 문서.

VFX는 연기, 불, 마법, 에너지 같은 반투명 요소가 많아서 Translucent Material을 자주 쓴다. 문제는 Translucent가 겹칠수록 오버드로우 비용이 커진다는 점이다.

같은 픽셀 위에 여러 장의 반투명 파티클이 겹치면 GPU는 그 픽셀을 여러 번 계산해야 한다. 화면에서는 부드럽게 보이지만 실제 비용은 꽤 비쌀 수 있다.

확인할 것:

  • 정말 Translucent가 필요한가?
  • Additive나 Masked로 바꿔도 되는가?
  • 파티클 크기가 화면을 너무 많이 덮고 있지 않은가?
  • 같은 위치에 여러 레이어가 과하게 겹치지 않는가?

연기처럼 부드러운 투명이 필요하면 Translucent가 맞다. 하지만 작은 스파크, UI식 하이라이트, 짧은 플래시는 Additive나 Masked로 충분한 경우가 많다.

2. 텍스처 샘플 수가 과하지 않은가?

Platform Stats screenshot for Shader Performance Checklist
Texture Sample Budget – Platform Stats. 이미지 출처: Epic Games 공식 Unreal Engine 문서.

Material 안에서 텍스처를 많이 읽을수록 비용이 올라간다. Base Color, Normal, Mask, Noise, Distortion, Flipbook까지 더하면 생각보다 빠르게 무거워진다.

VFX Material에서는 채널 패킹을 적극적으로 쓰는 것이 좋다.

  • R: Dissolve mask
  • G: Edge noise
  • B: Motion mask
  • A: Opacity

이렇게 하나의 텍스처에 여러 정보를 넣으면 샘플 수를 줄일 수 있다. 물론 너무 복잡하게 패킹하면 관리가 어려워지므로, 반복해서 쓰는 Material부터 정리하는 것이 좋다.

3. Panner와 Noise를 무작정 겹치고 있지 않은가?

Material Editor UI screenshot for Shader Performance Checklist
Motion Noise Audit – Material Editor UI. 이미지 출처: Epic Games 공식 Unreal Engine 문서.

움직이는 에너지나 마법 이펙트를 만들 때 Panner와 Noise를 많이 쓴다. 두세 장의 노이즈를 서로 다른 속도로 움직이면 보기에는 풍부하지만, 모든 파티클에 같은 계산이 반복된다.

확인할 것:

  • 비슷한 움직임을 하는 노이즈가 중복되어 있지 않은가?
  • 하나의 노이즈로 충분한데 두 개를 쓰고 있지 않은가?
  • 가까이서만 보이는 디테일을 멀리서도 계산하고 있지 않은가?
  • Flipbook 텍스처로 대체하는 편이 나은가?

화면에서 차이가 거의 없다면 그래프를 줄이는 편이 좋다. VFX는 움직임이 빠르기 때문에 플레이 중에는 디테일 차이가 생각보다 덜 보이는 경우가 많다.

4. Depth Fade와 Scene Texture 사용을 확인하자

HLSL Code Panel screenshot for Shader Performance Checklist
Depth Usage Check – HLSL Code Panel. 이미지 출처: Epic Games 공식 Unreal Engine 문서.

Depth Fade는 파티클이 지형이나 오브젝트와 만나는 부분을 부드럽게 만들어 준다. 하지만 모든 Material에 습관처럼 넣으면 비용이 쌓인다.

Scene Color, Scene Depth, Custom Depth 같은 Scene Texture 계열도 강력하지만, 목적 없이 쓰면 부담이 된다.

확인할 것:

  • 지면과의 교차가 실제로 보이는 이펙트인가?
  • Depth Fade 거리가 너무 넓지 않은가?
  • Distortion이 꼭 필요한가?
  • Custom Depth를 쓰는 이유가 명확한가?

Depth 관련 노드는 "보기 좋게 만드는 보정"이지만, 모든 이펙트에 자동으로 들어갈 필요는 없다.

5. Material Instance로 조절 가능한 구조인가?

성능 최적화는 그래프를 줄이는 것만이 아니다. 같은 Material을 여러 이펙트에서 재사용할 수 있게 만드는 것도 중요하다.

Material Instance로 조절할 수 있게 만들면 같은 Shader 구조를 공유하면서 색, 강도, 속도, 노이즈 스케일만 바꿀 수 있다.

추천 Parameter:

  • Color
  • Emissive Intensity
  • Opacity
  • Dissolve Amount
  • Edge Width
  • Noise Scale
  • Panner Speed

이렇게 해두면 비슷한 Material을 여러 개 복사해서 관리하는 상황을 줄일 수 있다.

6. 화면에서 보이는 크기와 중요도를 기준으로 판단하자

작은 스파크 하나에 복잡한 Shader를 넣는 것은 보통 좋은 선택이 아니다. 반대로 보스 스킬의 중심부처럼 화면에서 오래 보이고 중요한 이펙트라면 비용을 조금 더 써도 된다.

성능 판단 기준은 "그래프가 복잡한가"만이 아니라 "그 비용을 화면에서 회수하는가"다.

질문을 이렇게 바꿔 보면 좋다.

  • 플레이어가 이 디테일을 실제로 볼 수 있는가?
  • 카메라 거리에서 차이가 나는가?
  • 이 이펙트가 동시에 몇 개까지 나올 수 있는가?
  • 낮은 옵션에서도 유지해야 하는가?
  • Material보다 텍스처나 메시로 처리하는 편이 나은가?

정리

Unreal VFX Shader 성능은 한 가지 노드만 보고 판단하기 어렵다. Blend Mode, 오버드로우, 텍스처 샘플, Scene Texture, 파티클 수, 화면 점유율이 같이 작동한다.

처음에는 아래 다섯 가지만 습관처럼 확인해도 좋다.

  • Translucent를 꼭 써야 하는가?
  • 텍스처 샘플 수를 줄일 수 있는가?
  • 노이즈와 Panner가 중복되지 않는가?
  • Depth Fade와 Scene Texture 사용 이유가 분명한가?
  • Material Instance로 재사용 가능한가?

좋은 VFX Material은 멋진 그래프가 아니라, 화면에서 필요한 만큼만 비용을 쓰는 그래프다.

추측 대신 남기는 15분 비교 측정

검증 상태: 공식 문서 기반 절차와 UE 5.8 Metal의 제한된 실측 예시를 함께 제공한다. 예시는 단일 조건의 전체 프레임 GPUTime이며, Material 하나의 비용이나 일반적인 성능 차이를 뜻하지 않는다. 빈 측정표는 자신의 환경을 직접 기록할 수 있도록 그대로 두었다.

  1. 조건 고정: 테스트 맵, 카메라 위치와 해상도, 품질 프리셋, 대상 RHI, 이펙트 동시 재생 수를 기록한다.
  2. 기준안 저장: 원본 Material Instance를 baseline으로 두고, 같은 메시·같은 위치·같은 재생 구간을 사용한다.
  3. 화면 진단: Level Viewport에서 Shader Complexity(단축키 Alt+8, 콘솔 viewmode shadercomplexity)를 확인한다. Niagara라면 Quad Overdraw도 함께 확인한다.
  4. 머티리얼 기록: Material Editor의 Stats와 Platform Stats에서 목표 플랫폼 결과를 기록한다. Material Analyzer는 인스턴스의 static override 조합과 permutation 정리 후보를 찾을 때 사용한다.
  5. 한 변수만 수정: 예를 들어 큰 translucent sprite 크기, 겹침 수, texture sample, static switch 중 하나만 바꾼 candidate를 만든다.
  6. 같은 조건 재측정: stat unit으로 GPU 병목 여부를 먼저 확인하고, Development 환경에서 stat gpu 또는 profilegpu를 사용해 동일 카메라와 재생 구간을 기록한다. 색이 덜 뜨거워 보인다는 이유만으로 GPU 개선을 확정하지 않는다. Epic 문서도 Shader Complexity가 명령 수 중심의 근사치이며 texture lookup과 loop 비용을 완전히 나타내지 못한다고 설명한다.
  7. 판정: 시각 목표를 유지하면서 목표 하드웨어의 반복 측정이 개선될 때만 후보안을 채택한다. 결과가 흔들리면 반복 횟수와 캡처 조건부터 보완한다.
항목 고정/기록 값 왜 필요한가
UE 버전·RHI·플랫폼 사용자가 기록 플랫폼별 셰이더 결과를 섞지 않기 위해
해상도·Scalability 사용자가 기록 화면 픽셀 비용과 품질 차이를 고정하기 위해
카메라·동시 재생 수 사용자가 기록 화면 점유율과 overdraw 조건을 맞추기 위해
Stats / Platform Stats baseline·candidate Material 자체의 컴파일 결과를 비교하기 위해
Shader Complexity / Quad Overdraw 관찰 메모 비싼 화면 구역과 겹침을 찾기 위해
GPU 측정 도구·반복값·단위 진단 view mode와 실제 프레임 비용을 구분하기 위해

실측 예시: Noise 1개와 6개

Apple M4, UE 5.8, Metal SM6, 960×540에서 같은 카메라·조명·Manual 노출을 사용했다. 한 Material은 절차적 Noise 1개를, 다른 Material은 출력에 모두 기여하는 Noise 6개를 사용했다. 각 variant를 한 번씩 360프레임 기록하고 처음 60프레임을 제외한 300개 숫자 행을 분석했다.

전체 프레임 GPUTime Noise 1개 Noise 6개 관찰된 차이
중앙값 7.4550 ms 7.5550 ms +0.1000 ms
95백분위수 10.0608 ms 10.1632 ms +0.1024 ms
5% 절사평균 7.6037 ms 7.7164 ms +0.1127 ms

해석 범위: 6개 Noise 실행의 robust GPUTime이 이 샘플에서는 조금 높게 기록됐다. 그러나 variant당 실행은 한 번뿐이고 차이는 약 0.10 ms로 작으며, 두 원시 CSV에 각각 약 1초 GPUTime 이상치가 하나씩 있다. 통계적 유의성을 검정하지 않았으므로 최적화 효과, 예상 FPS, 다른 GPU·해상도·장면의 결과로 일반화할 수 없다.

UE 5.8 Shader 벤치마크와 원시 CSV 내려받기 · SHA-256 e36ac9c3b8e6b4197ee83b3b7b2248d276d0bead8b880d4429cd661bad7cd3e5. 공개 CSV는 360개 수치 행을 그대로 유지하고 로컬 경로와 로그인 식별자만 가렸다.

자주 틀리는 판정

  • 녹색이므로 빠르다: Shader Complexity는 좋은 출발점이지만 실제 플랫폼 GPU 시간의 대체값은 아니다.
  • 노드가 적으므로 빠르다: texture lookup, 투명 픽셀 겹침, 화면 점유율과 동시 실행 수를 함께 본다.
  • 에디터 한 프레임이 개선됐다: 동일 구간을 여러 번 기록하고 단위와 캡처 도구를 함께 남긴다.
  • Material Instance를 쓰면 무조건 런타임이 빨라진다: 인스턴스는 재컴파일 없는 파라미터 조절과 재사용에 유용하지만, 픽셀에서 실행되는 구성의 비용은 따로 측정한다.
  • Material Analyzer가 GPU 시간을 보여준다: 이 도구는 static override 조합과 permutation·저장 공간 정리 후보를 찾는 용도다. 프레임 GPU 시간은 별도 측정한다.

공식 문서에서 확인하기

Epic: Viewport Modes는 Shader Complexity의 사용법과 한계를 설명한다. Epic: Measuring Performance in Niagara는 VFX의 Shader Complexity와 Quad Overdraw 비교를, Epic: Material Analyzer는 static override와 permutation 분석 범위를 다룬다.

빈 Shader 측정표 CSV 내려받기 · Dissolve 실습 · Niagara 핵심 개념 · 외부 GPU 분석 도구 사례

작업 이야기와 댓글

이 글을 보고 떠오른 질문이나 경험을 남겨 주세요. 서로의 시도와 관찰을 나누는 공간입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다