---
title: "배칭은 다섯 가지 이유로 끊긴다"
description: "머티리얼도 텍스처도 같은데 배치가 끊깁니다. 정렬 레이어와 반투명 순서 때문입니다. 에셋을 아무리 합쳐도 이건 안 풀립니다."
author: "유니얼"
pubDate: 2026-09-09
category: "game-dev/unity/rendering"
tags: ["Unity", "최적화", "Batching"]
canonical: https://blog.unialgames.com/posts/unity-batching-breakers/
---
배칭이 걸리는 조건은 앞에서 봤습니다. 실무에서 더 자주 쓰게 되는 건 반대쪽 목록입니다.
**무엇이 배치를 끊는가.**

다섯 가지입니다. 앞의 둘은 에셋 문제이고, 뒤의 셋은 배치 문제입니다.
이 구분이 중요합니다. **뒤의 셋은 스프라이트를 아무리 합쳐도 안 풀립니다.**

## 1. 셰이더를 섞어 썼다

`Sprite-Default` 를 쓰는 오브젝트와 `Sprite-Lit-Default` 를 쓰는 오브젝트가
번갈아 나오면 그 경계마다 끊깁니다. 커스텀 셰이더를 하나 추가하면
배치가 하나 더 쪼개집니다.

- Frame Debugger: `Objects have different materials`
- 조치: 셰이더 **종류 수**를 줄입니다. 라이팅이 필요 없는 오브젝트까지
  Lit 셰이더로 통일하는 편이 나은 경우도 있습니다. 셰이더가 두 종류면
  최소 두 배치이지만, 한 종류면 한 배치로 갈 수 있습니다

## 2. 텍스처가 갈라져 있다

**텍스처는 머티리얼 상태의 일부입니다.** 셰이더가 같아도 텍스처가 다르면
바인딩을 갈아야 하고, 그 순간 배치가 끊깁니다.

- Frame Debugger: 위와 같은 `Objects have different materials`
- 조치: 스프라이트 아틀라스로 물리적 텍스처를 합칩니다.
  아틀라스 통합이 곧 배칭 통합인 이유가 이것입니다

여기까지가 에셋을 손봐서 푸는 두 가지입니다.

## 3. Sorting Layer 를 잘게 쪼갰다

2D 는 그리는 순서가 곧 앞뒤입니다. 그 순서를 정하는 것이 Sorting Layer 와
Order in Layer 이고, **배칭은 이 정렬 단위 안에서만 이어집니다.**

레이어를 하나 늘리는 건 인스펙터에서 한 줄 추가하는 일이라 부담이 없어 보입니다.
그런데 레이어를 잘게 쪼갤수록 드로우 콜도 그만큼 쪼개집니다.

- Frame Debugger: `Objects are in different sorting layers`
- 조치: 레이어를 큼직하게 유지합니다. 배경, 게임플레이, 전경, UI 정도로
  두고 그 안의 앞뒤는 Order in Layer 나 Y 좌표 정렬로 처리합니다

> 레이어를 늘리는 것은 공짜가 아닙니다. 정리 편하려고 열 개를 만들면
> 그만큼 배치가 나뉩니다.

## 4. 반투명 렌더 순서가 교차한다

이게 2D 에서 제일 자주 걸리고 제일 안 풀리는 것입니다.

<figure class="diagram">
<svg viewBox="0 0 680 220" role="img" aria-label="렌더 순서가 나무 플레이어 나무 적으로 교차하면 배치가 넷으로 나뉘고, 층으로 정리하면 둘로 줄어든다는 그림">
<text x="20" y="24" font-size="13" fill="var(--text-muted)">순서가 교차할 때</text>
<g stroke="var(--warn)" fill="var(--bg)">
<rect x="20" y="38" width="88" height="34" rx="3"></rect>
<rect x="130" y="38" width="88" height="34" rx="3"></rect>
<rect x="240" y="38" width="88" height="34" rx="3"></rect>
<rect x="350" y="38" width="88" height="34" rx="3"></rect>
</g>
<text x="42" y="60" font-size="12" fill="var(--text-muted)">나무</text>
<text x="145" y="60" font-size="12" fill="var(--text-muted)">플레이어</text>
<text x="262" y="60" font-size="12" fill="var(--text-muted)">나무</text>
<text x="380" y="60" font-size="12" fill="var(--text-muted)">적</text>
<g stroke="var(--warn)" fill="none">
<path d="M119 34 L119 76"></path>
<path d="M229 34 L229 76"></path>
<path d="M339 34 L339 76"></path>
</g>
<text x="460" y="60" font-size="13" fill="var(--warn)">배치 4개</text>
<text x="20" y="106" font-size="12" fill="var(--text-muted)">나무 둘은 같은 텍스처, 같은 셰이더인데도 사이에 다른 것이 끼어 끊깁니다.</text>
<text x="20" y="152" font-size="13" fill="var(--text-muted)">층으로 정리했을 때</text>
<g stroke="var(--accent)" fill="var(--accent-soft)">
<rect x="20" y="166" width="198" height="34" rx="3"></rect>
</g>
<g stroke="var(--border)" fill="var(--bg)">
<rect x="240" y="166" width="198" height="34" rx="3"></rect>
</g>
<text x="42" y="188" font-size="12" fill="var(--accent)">나무 + 나무</text>
<text x="262" y="188" font-size="12" fill="var(--text-muted)">플레이어 + 적</text>
<g stroke="var(--border)" fill="none">
<path d="M229 162 L229 204"></path>
</g>
<text x="460" y="188" font-size="13" fill="var(--accent)">배치 2개</text>
</svg>
<figcaption>같은 것끼리 모으는 것이 아니라, 다른 것이 사이에 끼지 않게 하는 것이 요점입니다.</figcaption>
</figure>

반투명은 뒤에서 앞으로 순서대로 그려야 색이 제대로 섞입니다.
그래서 깊이가 교차하면 Unity 가 순서를 지키려고 **배치를 강제로 끊습니다.**
머티리얼도 같고 텍스처도 같은데 끊깁니다.

- Frame Debugger: 깊이나 반투명 순서를 가리키는 문구
- 조치: Z 배치를 **층 단위로** 다시 정리합니다.
  나무를 전부 한 층에 두고 캐릭터를 그 앞 층에 두면 됩니다.
  "나무 하나만 플레이어보다 앞" 같은 예외가 하나 생기면 그 순간 층이 깨집니다

## 5. Mesh 2D 셰이더를 섞었다

Unity 6.3 부터 3D 메시를 2D 정렬 체계에 넣을 수 있게 됐는데,
**그 셰이더 계열은 현재 SRP Batcher 와 호환되지 않습니다.**
스프라이트 사이에 이걸 자주 끼우면 배치가 그때마다 끊깁니다.

- 조치: 3D 를 쓸 자리를 층으로 몰아 둡니다.
  배경 층에만 넣고 게임플레이 층에는 안 섞는 식입니다.
  버전에 따라 바뀔 수 있으니 쓰는 패치 릴리스 노트를 확인하세요

## 어느 것부터

다섯 개를 한꺼번에 손볼 필요는 없습니다. Frame Debugger 를 열어서
**끊긴 지점 상위 다섯 개와 그 사유를 표로 적는 것**이 먼저입니다.

대개 하나가 압도적입니다. 그리고 그 하나가 무엇인지는 프로젝트마다 다릅니다.
타일맵 위주면 3번이고, 캐릭터가 많으면 4번이고, 이펙트가 많으면 1번입니다.
남의 프로젝트에서 1번이 범인이었다는 것은 내 프로젝트와 아무 상관이 없습니다.