---
title: "2D 라이트는 배칭과 필레이트를 같이 낸다"
description: "2D 라이팅은 스프라이트를 그리기 전에 라이트 버퍼를 따로 렌더링합니다. 그래서 라이트 하나가 CPU 와 GPU 양쪽에 값을 매깁니다."
author: "유니얼"
pubDate: 2026-09-09
category: "game-dev/unity/rendering"
tags: ["Unity", "최적화", "렌더링"]
canonical: https://blog.unialgames.com/posts/unity-2d-lighting-cost/
---
2D 라이트를 몇 개 놓으면 화면이 확 살아납니다. 그리고 프레임이 떨어집니다.
어디로 떨어지는지가 헷갈리는 이유는, **한 군데가 아니기 때문** 입니다.

## 라이트 버퍼

2D 라이팅은 스프라이트에 직접 조명을 계산해 넣는 방식이 아닙니다.
빛을 먼저 따로 그려서 버퍼에 담아 두고, 스프라이트를 그릴 때 그 버퍼를 섞습니다.

<figure class="diagram">
<svg viewBox="0 0 680 200" role="img" aria-label="2D 라이트와 그림자 캐스터가 라이트 버퍼로 렌더링되고, 그 버퍼가 스프라이트 셰이딩에 합성되어 화면이 된다는 흐름 그림">
<g stroke="var(--border)" fill="var(--bg)">
<rect x="20" y="30" width="104" height="28" rx="3"></rect>
<rect x="20" y="66" width="104" height="28" rx="3"></rect>
<rect x="20" y="102" width="104" height="28" rx="3"></rect>
</g>
<text x="32" y="49" font-size="12" fill="var(--text-muted)">2D Light A</text>
<text x="32" y="85" font-size="12" fill="var(--text-muted)">2D Light B</text>
<text x="32" y="121" font-size="11" fill="var(--text-muted)">Shadow Caster</text>
<g stroke="var(--border)" fill="none">
<path d="M128 44 L176 74"></path>
<path d="M128 80 L176 80"></path>
<path d="M128 116 L176 86"></path>
</g>
<g stroke="var(--warn)" fill="none">
<rect x="180" y="56" width="118" height="48" rx="4"></rect>
</g>
<text x="192" y="78" font-size="12" fill="var(--warn)">라이트 버퍼</text>
<text x="192" y="96" font-size="11" fill="var(--warn)">Blend Style 마다 1장</text>
<g stroke="var(--border)" fill="none">
<path d="M302 80 L350 80"></path>
</g>
<g stroke="var(--border)" fill="var(--bg)">
<rect x="354" y="56" width="118" height="48" rx="4"></rect>
</g>
<text x="366" y="78" font-size="12" fill="var(--text-muted)">Sprite Lit</text>
<text x="366" y="96" font-size="11" fill="var(--text-muted)">버퍼를 섞어 그림</text>
<g stroke="var(--border)" fill="none">
<path d="M476 80 L524 80"></path>
</g>
<g stroke="var(--accent)" fill="var(--accent-soft)">
<rect x="528" y="56" width="90" height="48" rx="4"></rect>
</g>
<text x="548" y="85" font-size="12" fill="var(--accent)">최종 화면</text>
<text x="20" y="164" font-size="12" fill="var(--text-muted)">라이트 버퍼는 화면 크기의 렌더 타겟입니다. 라이트가 커버하는 픽셀 수만큼 GPU 가 칠합니다.</text>
<text x="20" y="184" font-size="12" fill="var(--text-muted)">Blend Style 을 여러 종류 쓰면 버퍼도 그만큼 늘어납니다.</text>
</svg>
<figcaption>스프라이트를 그리기 전에 한 판을 더 그린다는 뜻입니다.</figcaption>
</figure>

여기서 비용이 둘로 갈립니다.

- **CPU 쪽**: 라이트 조합이 다르면 렌더 배치가 나뉩니다
- **GPU 쪽**: 라이트 버퍼를 칠하는 픽셀 수가 곧 비용입니다. 그림자도 여기입니다

그래서 "라이트를 줄이면 배칭이 좋아진다" 는 절반만 맞는 말입니다.
설정 하나가 두 축을 동시에 건드립니다.

## 배칭이 갈리는 조건

라이트 배칭이 유지되려면 **같은 정렬 레이어 집합을 타겟하는 라이트들이 같은 조합**을 이뤄야 합니다.
그리고 그림자 설정도 조건에 들어갑니다. 여기서 자주 걸립니다.

| | Light A 타겟 | Light B 타겟 | 그림자 | 결과 |
| --- | --- | --- | --- | --- |
| ① | Background + Default | 같음 | 끔 | **배칭 성공** |
| ② | Background + Default | 같음 | 켬 (둘 다 같은 타겟) | **배칭 성공** |
| ③ | Background + Default | 같음 | 켬 (**Background 만**) | **배칭 분리** |

②와 ③의 차이가 그림자 타겟 하나뿐입니다.
타겟이 같으면 그림자를 켜도 배치가 안 끊기고, 하나만 달라도 끊깁니다.

Light Batching Debugger 로 확인할 때 **표시되는 숫자는 개수가 아니라 배치 인덱스** 입니다.
0 만 보이면 한 배치이고, 0 과 1 이 섞이면 나뉜 것입니다.

## 원칙 다섯

**하나. Target Sorting Layers 를 명시적으로 좁힙니다.**
라이트를 만들면 기본값이 **전체 레이어** 입니다.
배경만 비추면 되는 라이트가 캐릭터와 UI 레이어까지 타겟하고 있는 상태로 방치되기 쉽습니다.
필요한 레이어만 남기면 배칭 조건도 맞추기 쉬워지고 계산량도 줄어듭니다.

**둘. Blend Style 종류를 제한합니다.**
Additive, Multiply 같은 스타일마다 버퍼와 배치가 따로 갑니다.
스타일을 두 종류로 줄이면 버퍼가 두 장입니다. 네 종류면 네 장입니다.

**셋. 그림자를 쓰는 라이트를 최소화합니다.**
그림자는 배칭 조건에도 들어가고 GPU 비용도 큽니다.
분위기용 라이트에까지 그림자를 켜 둔 경우가 많은데, 대개 꺼도 티가 안 납니다.

**넷. 필레이트를 봅니다.**
라이트 비용은 **커버하는 픽셀 수**에 비례합니다. 개수가 아닙니다.

> **큰 라이트 하나가 작은 라이트 여러 개보다 나쁠 수 있습니다.**
> 화면을 덮는 라이트 하나는 매 프레임 화면 전체를 한 번 더 칠하는 것과 같습니다.

**다섯. Render Scale 을 조절합니다.**
스케일 지점이 두 군데입니다. URP 에셋 전체의 Render Scale 과,
2D Renderer Data 의 라이팅 전용 해상도 스케일입니다.
후자는 화면은 그대로 두고 **라이트 버퍼만** 저해상도로 그립니다.
빛은 원래 부드럽게 번지는 것이라 반으로 줄여도 잘 티가 안 납니다.
2D 라이팅에서 가장 값싼 한 수입니다.

## 순서

라이트가 무거우면 이 순서로 봅니다.

1. Light Batching Debugger 로 **인덱스가 몇 개인지** 확인합니다. 배칭 문제인지 아닌지가 여기서 갈립니다
2. 인덱스가 여러 개면 타겟 레이어와 그림자 설정을 맞춥니다. CPU 쪽입니다
3. 인덱스가 하나인데도 무거우면 GPU 쪽입니다. 라이팅 Render Scale 부터 낮춰 봅니다
4. 그래도 무거우면 화면을 덮는 큰 라이트를 찾습니다