Unity LOD Group와 Mesh Simplifier 연동으로 3D 배경 프레임 최적화하기

Unity LOD Group와 Mesh Simplifier 연동으로 3D 배경 프레임 최적화하기

Unity LOD Group과 UnityMeshSimplifier를 연동해 원거리 3D 배경의 삼각형 수와 드로우 부담을 줄이는 방법을 정리합니다. LOD 전환 거리 설계, 자동 메시 생성, 품질 검증, 프레임 측정 절차까지 실무 기준으로 설명합니다.

게임의 3D 배경은 화면에서 멀어져도 높은 폴리곤 메시를 계속 렌더링하면 GPU 버텍스 처리, 대역폭, 그림자 렌더링 비용을 불필요하게 사용한다. Unity의 LODGroup으로 거리별 메시를 전환하고 UnityMeshSimplifier 계열의 메시 단순화 도구로 LOD 메시를 자동 생성하면 가까운 화면 품질을 유지하면서 원거리 배경의 프레임 시간을 줄일 수 있다. 핵심은 모든 에셋에 같은 비율을 적용하는 것이 아니라 화면 점유율, 실루엣, 머티리얼 수를 기준으로 LOD 단계와 전환 지점을 설계하는 것이다.

LOD Group과 Mesh Simplifier는 무엇을 해결하는가?

LODGroup은 카메라에서 보이는 오브젝트의 화면 상대 높이(Screen Relative Transition Height)를 기준으로 LOD 0, LOD 1, LOD 2 같은 렌더러 그룹을 전환하는 Unity 컴포넌트다. 가까운 거리에서는 원본 메시를 먼 거리에서는 단순화한 메시를 표시하고 마지막 단계에서는 Cull로 렌더링 자체를 중단할 수 있다.

Mesh Simplifier는 원본 메시의 삼각형을 줄여 LOD용 메시를 만드는 도구다. 대표적으로 오픈 소스 UnityMeshSimplifier는 Quadric Error Metrics(QEM) 기반의 메시 단순화 방식을 제공한다. 수작업으로 모든 LOD 메시를 제작하기 어려운 배경 프롭, 암석, 건물군, 절벽처럼 반복 수가 많은 에셋에 특히 적합하다.

항목LOD GroupMesh Simplifier
역할카메라 화면 크기에 따라 렌더러를 전환LOD에 사용할 저폴리곤 메시를 생성
주요 제어값Transition Height, Fade Mode, CullQuality, 최대 오류, 서브메시 보존
해결하는 비용멀리 있는 고비용 렌더러의 지속 렌더링원거리 메시의 과도한 삼각형 수
함께 써야 하는 이유전환할 대상이 필요함생성한 메시를 거리별로 배치해야 함

3D 배경에서 프레임 저하가 발생하는 이유는 무엇인가?

프레임 저하는 단순히 폴리곤 수가 많아서만 발생하지 않는다. 배경 오브젝트가 많은 장면에서는 메시의 정점 수, 머티리얼 분할, 그림자 캐스팅, 오버드로우가 동시에 누적된다. 특히 카메라에 작게 보이는 배경 건물이나 암석이 LOD 0을 유지하면 플레이어가 식별할 수 없는 기하 정보에도 렌더링 비용이 든다.

대략적인 렌더링 비용은 다음처럼 생각할 수 있다.

Cframei=1n(Cdraw,i+ViCvertex+PiCpixel)C_{frame} \approx \sum_{i=1}^{n}(C_{draw,i}+V_i \cdot C_{vertex}+P_i \cdot C_{pixel})

여기서 V_i는 오브젝트의 정점 처리량이고 P_i는 화면을 덮는 픽셀 처리량이다. LOD는 주로 V_i를 줄이며 머티리얼 통합과 그림자 거리 조정은 C_{draw,i}와 추가 패스 비용까지 낮춘다. 화면을 크게 덮는 안개, 반투명 수풀, 파티클은 LOD만으로 해결되지 않을 수 있으므로 오버드로우를 별도로 확인해야 한다.

LOD 0부터 LOD 2와 Cull까지 거리별로 단순화되는 3D 배경 건물 예시

Unity LOD Group과 Mesh Simplifier를 어떻게 연동할까?

아래 절차는 Unity 2022 LTS 이상과 UnityMeshSimplifier처럼 LOD용 메시를 생성할 수 있는 도구를 기준으로 한다. 패키지 API 이름은 버전에 따라 달라질 수 있으므로 실제 적용 전 사용 중인 패키지의 최신 문서를 확인한다.

1. 배경 에셋을 LOD 대상과 예외 대상으로 나눈다

먼저 씬의 모든 메시를 자동 단순화하지 않는다. 원거리에서 실루엣 변화가 적고 반복 배치되는 에셋부터 선정한다.

  • 권장 대상: 건물 외벽, 암석, 절벽, 나무 줄기, 파이프, 원거리 장식물
  • 수작업 검토 대상: 캐릭터, 무기, 스키닝 메시, 얇은 철망, 글자가 있는 표지판
  • 제외 또는 별도 처리 대상: 파티클, 투명 메시, 화면 공간 효과, 지형 타일

원본 메시의 Mesh Renderer 수와 삼각형 수는 Unity Profiler의 Rendering 모듈 및 Frame Debugger로 확인한다. 단순히 씬 전체 Triangles 수만 보지 말고 카메라가 가장 넓은 배경을 보는 실제 플레이 상황에서 측정한다.

2. LOD 메시를 품질 비율별로 생성한다

실루엣이 중요한 일반 배경 프롭의 시작점으로는 다음 비율이 무난하다. 이는 고정 규칙이 아니라 첫 측정값이며 텍스처 디테일과 화면 점유율에 따라 조정한다.

단계메시 품질 예시사용 목적주의점
LOD 0100%근거리 관찰원본 메시 사용
LOD 150~65%중거리작은 돌출부와 내부 면 제거
LOD 215~30%원거리큰 실루엣과 UV 안정성 우선
Cull0% 렌더링식별 불가능한 거리그림자 거리와 함께 검토

UnityMeshSimplifier를 스크립트에서 호출하는 방식의 개념 예시는 다음과 같다. 실제 클래스와 메서드 시그니처는 설치한 패키지 버전에 맞춰 조정한다.

using UnityEngine;
using UnityMeshSimplifier;

public static class BackgroundLodBuilder
{
    public static Mesh CreateSimplifiedMesh(Mesh source, float quality)
    {
        var simplifier = new MeshSimplifier();
        simplifier.Initialize(source);
        simplifier.SimplifyMesh(quality);

        var result = new Mesh();
        simplifier.ToMesh(result);
        result.name = $"{source.name}_LOD_{quality:0.00}";
        return result;
    }
}

생성한 메시를 프로젝트 에셋으로 저장할 때는 AssetDatabase.CreateAsset을 사용하는 Editor 전용 도구로 분리한다. 런타임에 대량의 메시를 단순화하면 CPU 스파이크와 메모리 할당이 발생할 수 있으므로 일반적인 배경 LOD 생성은 임포트 후처리 또는 에디터 배치 작업으로 끝내는 편이 안전하다.

3. LODGroup에 렌더러를 등록하고 전환 지점을 설정한다

빈 부모 오브젝트에 LODGroup을 추가한 뒤 각 단계의 자식 오브젝트에 원본과 단순화 메시를 배치한다. SetLODs()로 구성할 때는 각 LOD 배열에 해당 단계의 Renderer를 등록한다.

using UnityEngine;

public class BackgroundLodSetup : MonoBehaviour
{
    [SerializeField] private Renderer[] lod0Renderers;
    [SerializeField] private Renderer[] lod1Renderers;
    [SerializeField] private Renderer[] lod2Renderers;

    private void Awake()
    {
        var lodGroup = GetComponent<LODGroup>();
        var lods = new[]
        {
            new LOD(0.60f, lod0Renderers),
            new LOD(0.25f, lod1Renderers),
            new LOD(0.08f, lod2Renderers)
        };

        lodGroup.SetLODs(lods);
        lodGroup.RecalculateBounds();
    }
}

0.60, 0.25, 0.08은 거리값이 아니라 화면에서 차지하는 상대 높이 기준이다. 오브젝트가 화면 세로 높이의 25% 아래로 작아질 때 LOD 1로 바뀌도록 설계한 값이다. 따라서 같은 전환값이라도 큰 성문과 작은 바위는 서로 다른 월드 거리에서 전환된다.

flowchart LR
    A[원본 배경 메시] --> B[Mesh Simplifier로 LOD 1·LOD 2 생성]
    B --> C[각 LOD 자식 오브젝트에 Mesh Renderer 배치]
    C --> D[LODGroup에 Renderer 등록]
    D --> E{화면 상대 높이}
    E -->|60% 이상| F[LOD 0 원본]
    E -->|25~60%| G[LOD 1]
    E -->|8~25%| H[LOD 2]
    E -->|8% 미만| I[Cull 또는 임포스터]

전환이 눈에 띄면 LODGroup.fadeModeCrossFade로 설정할 수 있다. 다만 크로스페이드는 전환 구간에서 두 LOD를 함께 처리할 수 있고 셰이더가 LOD 페이드를 지원해야 한다. 원거리 배경처럼 전환이 잘 보이지 않는 대상은 하드 스위치가 더 단순하고 예측 가능하다.

Unity Inspector에서 LOD 0, LOD 1, LOD 2 Renderer와 Screen Relative Transition Height를 설정한 예시

LOD 전환 거리와 메시 품질은 어떻게 정해야 할까?

정답은 카메라와 아트 스타일에 따라 달라진다. 다만 다음 순서로 결정하면 과도한 단순화와 불필요한 LOD 단계를 피할 수 있다.

  1. 대표 카메라 위치를 정한다. 플레이 중 가장 흔한 시야와 가장 넓은 시야를 각각 캡처한다.
  2. LOD 0에서 LOD 1로 바꿔도 실루엣, 충돌감, 반복 타일 패턴이 구분되지 않는 화면 크기를 찾는다.
  3. LOD 2는 미세한 형상을 없애고 큰 외곽선만 남긴다. 원거리에서는 노멀맵과 알베도 텍스처가 형상 인식에 더 큰 영향을 줄 수 있다.
  4. Profiler와 Frame Debugger에서 전환 전후의 Batches, SetPass Calls, 삼각형 수, GPU 프레임 시간을 비교한다.
  5. 시각적 차이가 거의 없고 측정값이 개선되는 단계만 유지한다.

같은 메시를 여러 번 배치하는 경우 GPU Instancing과 SRP Batcher도 함께 확인한다. LOD 메시가 원본과 다른 머티리얼 구성을 가지면 배치 효율이 나빠질 수 있다. 가능하면 LOD 간 머티리얼 슬롯 수와 셰이더를 유지하고 단순화 과정에서 서브메시가 불필요하게 분리되지 않도록 한다.

프레임 최적화 효과를 어떻게 검증할까?

최적화는 씬 뷰 통계만 보고 판단하면 안 된다. 에디터 오버헤드가 없는 Development Build 또는 Release Build에서 동일한 카메라 경로를 반복 측정한다. 특히 모바일과 콘솔은 실제 타깃 하드웨어에서 GPU 시간을 확인해야 한다.

측정 항목확인 도구기대 변화해석
Triangles / VerticesGame View Stats, Profiler원거리 시 감소LOD 메시가 실제로 전환되는지 확인
Batches / SetPass CallsFrame Debugger, Profiler유지 또는 감소머티리얼 증가로 역효과가 없는지 확인
GPU frame timeGPU Profiler, 플랫폼 도구감소버텍스 병목 개선 여부 판단
Shadow castersFrame Debugger원거리에서 감소LOD별 그림자 설정 점검
메모리Memory Profiler과도한 증가 없음LOD 메시 복제 비용 확인

원거리 LOD는 Cast Shadows를 끄거나 더 단순한 섀도우 캐스터 메시를 쓰는 것도 고려할 수 있다. 단, 태양광이 강한 오픈 월드에서 그림자가 게임 플레이의 시각 단서라면 품질 저하가 더 크게 느껴질 수 있다. LOD 품질만 낮추지 말고 그림자 거리, 캐스케이드, 컬링 거리와 함께 검토해야 한다.

자주 묻는 질문 (FAQ)

LOD Group만 추가하면 삼각형 수가 줄어드는가?

아니다. LODGroup은 렌더러를 전환할 뿐이다. LOD 1과 LOD 2에 원본과 동일한 메시를 넣으면 삼각형 수는 줄지 않는다. 별도의 저폴리곤 메시나 임포스터가 필요하다.

Mesh Simplifier로 생성한 LOD를 모든 에셋에 써도 되는가?

권장하지 않는다. 얇은 구조물, 하드서피스의 날카로운 모서리, 스키닝 메시, 텍스트가 있는 메시처럼 토폴로지 품질이 중요한 대상은 수작업 LOD가 더 안정적일 수 있다.

LOD 단계는 많을수록 좋은가?

아니다. 단계가 늘면 메시 에셋과 관리 비용이 증가하고 전환 검증도 복잡해진다. 대부분의 배경 프롭은 LOD 0~2와 Cull, 즉 3단계 메시로 시작해 측정 결과가 있을 때만 단계를 추가하는 편이 좋다.

정리

3D 배경 프레임 최적화에서 LODGroup은 언제 어떤 렌더러를 그릴지 결정하고 Mesh Simplifier는 원거리용 저비용 메시를 제공한다. 자동 단순화는 빠른 출발점이지만 최종 품질 기준은 화면 실루엣과 실제 타깃 기기에서의 GPU 프레임 시간이다. 반복 배치된 배경 에셋부터 LOD 0·1·2를 적용하고 전환 지점과 그림자 비용을 함께 프로파일링하면 안정적으로 성능 예산을 확보할 수 있다.

#Unity LOD Group#Mesh Simplifier#3D 배경 최적화#프레임 최적화#메시 최적화#드로우콜 최적화

계속 읽어보기

이런 글은 어떠세요?

< Back to Logs