Unity LOD Group과 Mesh Simplifier로 3D 모델 프레임 최적화하는 방법
Unity LOD Group과 UnityMeshSimplifier를 활용해 원거리 3D 모델의 삼각형 수를 줄이고 화면 점유율 기준 전환값과 품질 검증으로 프레임 저하와 LOD 팝핑을 함께 줄이는 실전 가이드입니다.

핵심 요약
3D 모델이 화면에서 작아질수록 동일한 고밀도 메시를 그릴 이유가 줄어든다. Unity의 LODGroup은 화면 상대 높이로 렌더러를 교체하고 UnityMeshSimplifier는 원본에서 낮은 폴리곤 LOD 메시를 생성한다. 다만 삼각형 수 감소가 항상 FPS 상승으로 이어지지는 않으므로 드로 콜, 머티리얼 수, 오버드로까지 Profiler와 Frame Debugger로 함께 확인해야 한다.
3D 모델 때문에 프레임이 떨어지는 이유는 무엇인가?
카메라에서 멀리 떨어진 오브젝트도 가까이 있을 때와 같은 메시를 렌더링하면 화면에서 거의 보이지 않는 기하 정보에 정점 처리와 래스터화 비용을 계속 지불하게 된다. 나무, 바위, 건물, 장식물처럼 동일한 프리팹이 다수 배치되는 씬에서 특히 누적 비용이 커진다.
LOD(Level of Detail)는 오브젝트의 화면 점유율에 따라 서로 다른 복잡도의 메시를 선택하는 방식이다. Unity LODGroup의 전환 기준은 카메라와의 단순 거리값이 아니라 오브젝트의 화면 상대 높이다.
r이 작아질수록 더 낮은 LOD를 선택한다. 같은 거리라도 FOV, 해상도, 오브젝트 크기에 따라 화면에서 차지하는 크기가 달라지는 문제를 자연스럽게 반영할 수 있다.

LOD Group과 Mesh Simplifier는 어떻게 역할을 나눌까?
| 항목 | LOD Group | UnityMeshSimplifier |
|---|---|---|
| 핵심 역할 | 현재 화면 조건에 맞는 렌더러 선택 | 원본 메시의 기하 복잡도 감소 |
| Unity 작업 위치 | LODGroup 컴포넌트 | 에디터 도구 또는 C# API |
| 대표 설정 | screenRelativeTransitionHeight, Fade | 품질 비율, 경계·심·UV 보존 옵션 |
| 주의점 | 전환값이 나쁘면 팝핑 발생 | 자동 단순화 결과는 아트 검수가 필요 |
LODGroup은 LOD 메시를 만들어 주는 기능이 아니라 준비된 렌더러 묶음을 전환하는 컴포넌트다. 반대로 Mesh Simplifier는 메시를 생성하지만 적절한 전환 지점을 결정하지 않는다. 따라서 두 기능을 함께 설계해야 한다.
UnityMeshSimplifier는 Fast Quadric Mesh Simplification 계열 알고리즘을 C#으로 구현한 Unity용 패키지다. Smart Linking, PreserveBorders, PreserveSeams, PreserveFoldovers 같은 옵션으로 단순화 과정의 구멍과 UV 경계 훼손을 줄일 수 있다. 패키지의 지원 상태와 설치 방식은 공식 저장소를 먼저 확인한다.
Unity LOD Group은 어떻게 설정할까?
1. 원본과 LOD 메시를 준비한다
가까운 거리용 LOD0는 원본 메시를 사용한다. 그다음 동일한 피벗, 스케일, 머티리얼 슬롯 순서를 유지한 LOD1, LOD2 메시를 준비한다. 보통 환경 프롭의 출발점으로는 다음 비율을 검토할 수 있다. 이는 고정 규칙이 아니라 시각 품질을 확인하기 위한 초기값이다.
| 단계 | 권장 시작점 | 사용 구간 |
|---|---|---|
| LOD0 | 원본의 100% | 화면에서 형태와 실루엣이 중요한 구간 |
| LOD1 | 삼각형 수 40~60% | 중거리 |
| LOD2 | 삼각형 수 10~25% | 원거리 |
| Culled | 렌더링 안 함 | 화면 점유율이 매우 작은 구간 |
얇은 난간, 잎사귀, 로프처럼 실루엣을 결정하는 요소는 자동 단순화 전후를 별도로 점검한다. 라이트맵 UV, 버텍스 컬러, 서브메시와 스킨드 메시도 대상 에셋에 따라 보존 여부를 검증해야 한다.
2. LODGroup에 각 Renderer를 등록한다
빈 부모 오브젝트에 LODGroup을 추가하고 각 LOD 자식의 MeshRenderer 또는 SkinnedMeshRenderer를 해당 단계의 Renderers 목록에 넣는다. Unity는 다음 단계의 screenRelativeTransitionHeight를 넘는 시점에 LOD를 전환한다.
초기 전환값은 LOD0: 0.60, LOD1: 0.25, LOD2: 0.08, Culled로 시작한 뒤 실제 게임 카메라에서 조정한다. Unity Inspector의 LOD 미리보기 슬라이더로 경계 구간을 확인하되 최종 판단은 Game 뷰와 목표 기기에서 내린다.
3. 팝핑을 확인하고 전환 방식을 선택한다
형태 차이가 큰 메시를 즉시 바꾸면 LOD 팝핑이 보인다. Fade Mode와 Animate Cross-fading 또는 각 LOD의 Fade Transition Width를 검토한다. 크로스페이드는 전환 중 두 LOD를 함께 렌더링할 수 있으므로 문제 구간만 짧게 쓰고 GPU 프로파일링으로 비용을 확인한다.
Unity 매뉴얼은 LOD 전환값이 화면 상대 높이 비율에 기반하며 부드러운 전환 구간에서는 현재·다음 LOD를 함께 렌더링한다고 설명한다. Unity LOD Group 문서를 기준으로 사용하는 Unity 버전의 Inspector 항목을 대조하는 편이 안전하다.
Mesh Simplifier로 LOD 메시를 생성하는 방법
에디터에서 반복 생성할 때는 UnityMeshSimplifier의 LOD Generator Helper를 사용할 수 있다. 파이프라인에 넣거나 생성 규칙을 자동화해야 한다면 C# API를 사용한다.
using UnityEngine;
public static class LodMeshBuilder
{
public static Mesh CreateLodMesh(Mesh sourceMesh, float quality)
{
var simplifier = new MeshSimplifier();
simplifier.Initialize(sourceMesh);
simplifier.SimplifyMesh(quality); // 0~1: 낮을수록 더 강하게 단순화
var lodMesh = simplifier.ToMesh();
lodMesh.name = $"{sourceMesh.name}_LOD_{quality:0.00}";
return lodMesh;
}
}
quality는 목표 삼각형 수를 정확히 보장하는 값이 아니라 단순화 강도를 조절하는 입력으로 다룬다. 예를 들어 0.5f, 0.2f로 생성한 뒤 실제 Mesh.triangles.Length / 3를 기록해 목표 예산에 맞는지 확인한다.
자동 단순화에서 품질을 지키는 체크 항목
- 실루엣을 확인한다. 원거리에서도 알아볼 수 있는 외곽선이 먼저 무너지면 품질 값을 올린다.
- UV 심과 하드 엣지를 확인한다. 텍스처 경계가 찢어지거나 음영이 깨지면
PreserveSeams,PreserveBorders같은 보존 옵션을 적용한다. - 머티리얼과 드로 콜을 확인한다. 메시만 줄이고 서브메시 수가 그대로면 CPU 측 이득이 작을 수 있다.
- 스킨드 메시와 본 하위 오브젝트를 분리 검증한다. 본에 붙어 움직이는 부속물은 별도 또는 중첩 LOD Group이 더 안전할 수 있다.

LOD 최적화 효과는 어떻게 측정할까?
LOD 작업 전후에 같은 카메라 경로와 해상도, 품질 설정에서 측정한다. 정지 화면 한 장만 보고 결론 내리면 전환 중 비용과 씬 전체 누적량을 놓치기 쉽다.
| 확인 도구 | 볼 지표 | 해석 |
|---|---|---|
| Unity Profiler | CPU/GPU Frame Time, Rendering 관련 비용 | 병목이 CPU인지 GPU인지 먼저 구분 |
| Frame Debugger | 실제 드로 콜과 활성 LOD | 의도한 LOD가 선택되는지 확인 |
| Stats 창 | Batches, SetPass calls, Triangles, Vertices | 삼각형 감소와 배치 변화 동시 확인 |
| Memory Profiler | 메시 메모리 | LOD 메시 추가로 메모리가 과도해지지 않는지 확인 |
예를 들어 GPU 프레임 시간이 높고 원거리 장면에서 Triangles가 과도하다면 LOD가 유효할 가능성이 높다. 반대로 CPU가 드로 콜과 상태 변경에 묶여 있다면 LOD와 함께 머티리얼 통합, GPU Instancing, SRP Batcher 적용 가능성도 살펴야 한다. 투명 머티리얼의 오버드로가 병목이면 폴리곤 감소만으로는 기대만큼 개선되지 않을 수 있다.
자주 묻는 질문 (FAQ)
LOD Group은 거리 기준으로 동작하나요?
기본 전환은 거리 자체가 아니라 화면 상대 높이 기준이다. 따라서 카메라 FOV, 해상도, 오브젝트 크기를 바꾸면 같은 거리에서도 전환 시점이 달라질 수 있다.
LOD를 추가하면 무조건 FPS가 오르나요?
아니다. 원거리에서 많은 삼각형을 그리는 GPU 병목에는 효과적일 수 있지만 드로 콜·셰이더·투명 오버드로·텍스처 대역폭이 병목이면 효과가 작을 수 있다. 반드시 Profiler와 Frame Debugger로 전후를 비교한다.
모든 프리팹에 LOD를 만들어야 하나요?
아니다. 화면에 오래 보이지 않거나 삼각형 수가 적은 오브젝트는 제작·메모리 비용이 이득보다 클 수 있다. 대량 배치되고 원거리 노출이 잦으며 메시 비용이 큰 에셋부터 우선 적용한다.
마무리
LOD Group은 언제 낮은 폴리곤 메시를 보여 줄지 결정하고 Mesh Simplifier는 그 메시를 빠르게 준비한다. 가장 안정적인 워크플로는 중요 프리팹부터 LOD0·LOD1·LOD2를 생성한 뒤 화면 상대 높이 전환값과 실루엣을 검수하고 목표 기기에서 프레임 시간과 드로 콜을 측정해 반복 조정하는 것이다.



