---
title: "배칭이 왜 끊겼는지는 화면이 알려준다"
description: "Frame Debugger 는 배치가 끊긴 사유를 문장으로 적어 줍니다. 그 문장을 실제 원인으로 옮기는 표와, 도구마다 있는 함정 하나씩."
author: "유니얼"
pubDate: 2026-09-09
category: "game-dev/unity/rendering"
tags: ["Unity", "최적화", "Batching", "프로파일링"]
canonical: https://blog.unialgames.com/posts/unity-render-debug-tools/
---
최적화 글을 읽다 보면 "머티리얼을 통일하세요", "레이어를 줄이세요" 같은 처방이 줄줄이 나옵니다.
전부 맞는 말인데, 내 프로젝트에서 **지금 무엇이 문제인지**는 안 알려 줍니다.

그건 화면에 이미 나와 있습니다. 열어 보면 됩니다.

## Frame Debugger

`Window > Analysis > Frame Debugger` 에서 Enable 을 누르면 한 프레임이 멈추고,
그 프레임에 나간 드로우 콜이 순서대로 나열됩니다. 항목을 하나씩 밟으면
화면이 그 시점까지만 그려진 상태로 보입니다. 무엇이 언제 그려지는지가 그대로 보입니다.

여기서 중요한 것은 그림이 아니라 **각 항목에 붙는 사유 문장**입니다.
배치가 왜 여기서 끊겼는지를 Unity 가 적어 줍니다.

| 표시되는 문장 | 실제 원인 | 어디를 고치나 |
| --- | --- | --- |
| `Objects have different materials` | Lit 과 Unlit 을 섞어 쓰거나, 텍스처가 갈라져 있습니다 | 셰이더 종류를 줄이고 아틀라스로 텍스처를 합칩니다 |
| `Non-instanced properties set for instanced shader` | `MaterialPropertyBlock` 을 많이 쓰고 있습니다 | 프로퍼티를 인스턴스드 버퍼나 정점 컬러로 옮깁니다 |
| `Objects are in different sorting layers` | Sorting Layer 를 너무 잘게 쪼갰습니다 | 레이어를 큼직하게 통합합니다 |
| `Depth sorting / transparent order` | 반투명 렌더 순서가 교차합니다 | Z 배치를 층 단위로 다시 정리합니다 |

마지막 줄이 2D 에서 제일 자주 걸립니다.
나무, 플레이어, 나무, 적 순서로 깊이가 번갈아 나오면 반투명 순서를 지키기 위해
배치가 **강제로** 끊깁니다. 머티리얼도 같고 텍스처도 같은데 끊깁니다.
이건 에셋 문제가 아니라 배치 문제라, 스프라이트를 아무리 합쳐도 안 풀립니다.

> Frame Debugger 를 켜면 게임이 멈춥니다. 특정 순간을 잡고 싶으면
> 그 순간에 스크립트로 `Time.timeScale = 0` 을 걸어 두고 켜는 편이 편합니다.

## Memory Profiler 는 반드시 실기에

`Window > Analysis > Memory Profiler` 로 스냅샷을 뜨면 텍스처와 아틀라스가
실제로 메모리를 얼마나 먹고 있는지 나옵니다. 아틀라스를 다시 묶었을 때
정말 줄었는지를 확인할 수 있는 유일한 자리입니다.

**여기에 함정이 하나 있습니다. 에디터에 붙여서 뜬 스냅샷은 믿으면 안 됩니다.**

에디터는 아틀라스에 들어간 개별 텍스처를 따로 들고 있는 경우가 있고,
플랫폼별 압축 설정도 빌드와 다르게 적용됩니다. 그래서 에디터에서는
"아틀라스로 묶었는데 메모리가 안 줄었다" 는 결과가 나오기 쉽습니다.
빌드해서 실기에 붙이면 다른 숫자가 나옵니다.

같은 이유로, 아틀라스 그루핑을 바꿨으면 **바꾸기 전후를 둘 다 실기에서** 떠야 비교가 됩니다.
한쪽만 실기에서 뜨면 아무 말도 못 합니다.

## 2D Light Batching Debugger

2D 라이트를 여러 개 쓰면 라이트 조합에 따라 렌더 배치가 나뉩니다.
어떤 조합이 배치를 깨는지를 시각화해 주는 것이 이 도구입니다.

**표시되는 숫자는 개수가 아니라 배치 인덱스입니다.**
0 만 보이면 전부 한 배치이고, 0 과 1 이 섞여 보이면 그만큼 나뉜 것입니다.
이걸 라이트 개수로 읽으면 반대로 해석하게 됩니다.

## Sprite Atlas Analyzer

Unity 6.3 부터 들어온 정적 분석 도구입니다. 게임을 돌릴 필요가 없습니다.
아틀라스를 훑어서 이중 압축, 페이지 분할, 빈 공간 낭비를 찾아 줍니다.

정기적으로 돌리는 편이 좋습니다. 이 세 가지는 **한 번 잡아도 다시 생깁니다.**
스프라이트를 몇 장 추가했더니 아틀라스가 페이지로 쪼개지는 식이라,
사람이 기억해서 막을 수 있는 종류가 아닙니다.

## 순서

도구가 넷이지만 보는 순서는 정해져 있습니다.

1. **Stats 창** 으로 드로우 콜과 SetPass Call 을 같이 봅니다. 어느 축이 문제인지부터 정합니다
2. CPU 쪽이면 **Frame Debugger** 로 배치가 끊긴 상위 몇 지점과 사유를 적습니다
3. 사유가 텍스처나 머티리얼 쪽이면 **Sprite Atlas Analyzer** 와 임포트 설정으로 갑니다
4. 라이트 쪽이면 **Light Batching Debugger** 로 인덱스를 봅니다
5. 메모리가 의심되면 **Memory Profiler**, 단 실기 빌드에

이 순서를 건너뛰고 처방부터 적용하면, 고쳐도 숫자가 왜 안 움직이는지를 모르게 됩니다.
그리고 안 움직이는 이유가 "처방이 틀려서" 가 아니라 "애초에 그게 병목이 아니어서" 인 경우가
대부분입니다.