icon
3장 : 자산 관리와 에셋 라이브러리

에셋 최적화 및 압축


언리얼 엔진 프로젝트에 에셋을 임포트하고 체계적으로 관리하는 것은 중요하지만, 단순히 에셋을 많이 사용하는 것만으로는 고품질의 게임이나 콘텐츠를 만들 수 없습니다. 에셋의 최적화(Optimization) 는 개발된 프로젝트가 다양한 환경에서 원활하게 작동하고, 최종 빌드(게임 파일)의 용량을 줄이며, 런타임 성능을 극대화하는 데 필수적인 과정입니다. '나 혼자 언리얼 기본' 교재의 독자 여러분이 프로젝트의 성능을 향상시키고 효율적인 에셋 관리자가 될 수 있도록, 이 절에서는 에셋을 최적화하고 압축하는 주요 방법에 대해 상세히 설명해 드리겠습니다. 마치 무거운 짐을 가볍고 효율적으로 포장하듯, 에셋의 불필요한 부분을 줄이고 성능을 끌어올리는 방법을 배워봅시다.


에셋 최적화의 중요성

최적화되지 않은 에셋은 다음과 같은 문제들을 야기할 수 있습니다.

  • 성능 저하: 과도한 폴리곤 수, 고해상도 텍스처, 비효율적인 재질 등은 GPU와 CPU에 과부하를 주어 프레임 속도를 떨어뜨립니다.
  • 빌드 용량 증가: 불필요한 데이터가 포함된 에셋은 최종 게임 파일의 용량을 크게 늘려 다운로드 시간과 설치 공간을 증가시킵니다.
  • 메모리 사용량 증가: 최적화되지 않은 에셋은 런타임에 더 많은 메모리를 차지하여, 특히 저사양 기기에서 문제가 발생할 수 있습니다.
  • 로드 시간 증가: 에셋의 크기가 크면 게임 로딩 시간이 길어집니다.

텍스처 최적화 및 압축

텍스처는 게임 그래픽의 시각적 품질에 큰 영향을 미치지만, 동시에 가장 많은 메모리를 차지하는 에셋 유형 중 하나입니다.

해상도 관리

  • 적절한 해상도 선택: 모든 텍스처가 최고 해상도일 필요는 없습니다. 화면에 크게 나타나거나 디테일이 중요한 텍스처(캐릭터 얼굴, 주요 배경 요소)에만 고해상도(예: 2048x2048, 4096x4096)를 사용하고, 멀리 있거나 작은 오브젝트에는 저해상도(예: 512x512, 256x256) 텍스처를 사용합니다.
  • 2의 제곱수(Power of Two): 텍스처 해상도는 가로세로가 모두 2의 제곱수(예: 256, 512, 1024, 2048)여야 최적의 성능을 발휘합니다. 이는 GPU가 텍스처를 효율적으로 처리하는 방식과 관련이 있습니다.
  • 언리얼 에디터 내에서 해상도 조절

    콘텐츠 브라우저에서 최적화할 텍스처 에셋을 더블 클릭하여 텍스처 에디터를 엽니다.

    디테일 패널의 'Detail (세부 정보)' 섹션에서 'Maximum Texture Size (최대 텍스처 크기)' 를 설정하여 에디터 내에서 텍스처의 최대 해상도를 제한할 수 있습니다. 이는 원본 텍스처 파일을 변경하지 않고, 엔진이 텍스처를 가져올 때 적용되는 크기 제한입니다.

압축 설정 (Compression Settings)

텍스처 에디터의 디테일 패널에서 'Compression Settings (압축 설정)' 을 조절하여 텍스처의 파일 크기와 메모리 사용량을 최적화할 수 있습니다.

  • Default (기본): 일반적인 컬러 텍스처(Diffuse, Albedo)에 사용됩니다.
  • NormalMap (법선 맵): 노멀 맵(Normal Map) 전용으로, 올바른 압축과 채널 순서를 보장합니다.
  • Masks (마스크): 여러 가지 정보를 단일 텍스처의 각 채널(빨강, 초록, 파랑, 알파)에 저장하는 마스크 텍스처에 사용됩니다. 비압축 또는 효율적인 압축 방식이 적용됩니다.
  • UserInterface2D (UI 2D): UI 요소에 적합한 압축 설정을 제공합니다.
  • VectorDisplacementMap (벡터 변위 맵): 지형 변위 등에 사용되는 특수 맵입니다.

각 압축 설정은 시각적 품질과 성능 사이의 균형을 제공하므로, 텍스처의 용도에 맞게 선택하는 것이 중요합니다.

Mip Maps (밉 맵)

Mip Map은 텍스처의 다양한 해상도 버전을 미리 생성하여, 카메라와 오브젝트의 거리에 따라 자동으로 낮은 해상도의 텍스처를 사용하는 기술입니다. 이는 텍스처 샘플링 비용을 줄여 GPU 성능을 향상시키고, 멀리 있는 오브젝트의 텍스처가 흐릿하게 보이는 모아레 현상을 줄여줍니다.

  • 텍스처 에디터에서 'Mip Gen Settings (밉 생성 설정)' 을 확인합니다. 기본적으로 대부분의 텍스처는 밉 맵이 생성되도록 설정되어 있습니다.
  • UI 텍스처나 특수 목적의 텍스처처럼 항상 원본 해상도를 유지해야 하는 경우에는 'NoMipmaps'를 선택할 수 있지만, 성능 비용이 발생할 수 있습니다.

3D 모델(메시) 최적화

3D 모델의 폴리곤(Polygon) 수는 렌더링 성능에 직접적인 영향을 미칩니다.

폴리곤 수 감소 (Poly Count Reduction)

  • 필요한 만큼만 디테일: 화면에 크게 나타나지 않거나 중요하지 않은 오브젝트는 폴리곤 수를 줄여야 합니다. 너무 많은 폴리곤은 불필요한 GPU 부하를 유발합니다.
  • 외부 3D 프로그램에서 최적화: 3D 모델링 소프트웨어(블렌더, 3ds Max, 마야 등)에서 모델을 익스포트하기 전에 폴리곤 수를 최적화합니다.
  • 언리얼 엔진의 메시 감소(Mesh Reduction): 스태틱 메시 에디터에서 '리덕션 툴(Reduction Tool)' 을 사용하여 모델의 폴리곤 수를 줄일 수 있습니다. (프로그레시브 메시, 리덕션 설정 등)

LOD (Level of Detail) 그룹 설정

LOD (Level of Detail) 는 카메라와의 거리에 따라 다른 디테일 수준의 메시를 자동으로 전환하여 렌더링하는 기술입니다. 가까이서는 고품질 모델을, 멀리서는 저품질 모델을 사용하여 성능을 최적화합니다.

LOD 그룹 생성

  • 스태틱 메시 에디터에서 'Details (디테일)' 패널의 'LOD Settings (LOD 설정)' 섹션을 찾습니다.
  • 'Num LODs (LOD 수)' 를 조절하여 원하는 LOD 레벨 수를 설정합니다. (예: 1은 원본 메시, 2는 한 단계 낮은 품질, 3은 더 낮은 품질)
  • 'Auto Generate LODs (LOD 자동 생성)' 를 클릭하면 언리얼 엔진이 자동으로 각 LOD 레벨의 메쉬를 생성해 줍니다.

LOD 거리 설정

  • 각 LOD 레벨 옆에 있는 '스크린 사이즈(Screen Size)' 값을 조절하여, 해당 LOD가 사용될 화면상의 크기(백분율)를 지정합니다. 이 값이 작을수록 더 멀리서 낮은 LOD가 사용됩니다.
  • : LOD는 특히 배경 오브젝트나 반복되는 오브젝트에 적용할 때 성능 개선 효과가 큽니다.

UV 맵 최적화

  • 겹치지 않는 UV: 텍스처 아틀라스(여러 텍스처를 하나의 큰 이미지에 모아 놓은 것)를 사용할 경우, UV 좌표가 겹치지 않도록 해야 라이트맵 생성 등에 문제가 발생하지 않습니다.
  • UV 공간 활용: UV 공간을 최대한 효율적으로 사용하여 텍스처 해상도를 낭비하지 않도록 합니다.

재질(Material) 최적화

재질은 오브젝트의 시각적 속성을 정의하며, 복잡한 재질은 렌더링 성능에 큰 영향을 미칠 수 있습니다.

  • 재질 인스턴스(Material Instance) 활용
    • 하나의 마스터 재질(Master Material)을 생성하고, 여기서 파생된 재질 인스턴스를 사용하여 색상, 텍스처, 수치 등만 변경합니다.
    • 재질 인스턴스는 마스터 재질을 컴파일된 상태로 재사용하기 때문에 셰이더 컴파일 시간을 줄이고, 드로우 콜(Draw Call)을 최적화하여 런타임 성능을 향상시킵니다.
  • 불필요한 노드 제거: 재질 그래프에서 사용되지 않는 노드나 복잡한 계산은 제거하여 셰이더 명령 수를 줄입니다.
  • 명확한 노드 그룹화: 복잡한 재질은 함수(Function)나 그룹(Group)으로 노드를 묶어 가독성을 높이고 재사용성을 확보합니다.
  • 최소한의 명령 수: 모바일 등 저사양 플랫폼을 목표로 한다면, 재질의 셰이더 명령(Shader Instruction) 수를 최소화하도록 노력해야 합니다. 재질 에디터의 '통계(Stats)' 패널에서 명령 수를 확인할 수 있습니다.

사운드(Audio) 및 비디오(Video) 에셋 최적화

  • 사운드 압축 형식: WAV 파일은 고품질이지만 용량이 크므로, 게임 내 배경음악이나 긴 사운드는 OGG와 같은 압축 형식을 사용하는 것이 좋습니다. 짧은 효과음은 WAV로 유지하여 품질을 보존할 수 있습니다.
  • 사운드 어테뉴에이션(Attenuation): 사운드가 들리는 범위와 볼륨 감쇠를 설정하여, 멀리 있는 사운드는 들리지 않거나 작게 들리도록 하여 불필요한 사운드 재생을 줄입니다.
  • 비디오 코덱 및 해상도: 게임 내에서 사용되는 비디오 파일은 효율적인 코덱(예: VP9)과 적절한 해상도를 사용하여 용량을 줄입니다.

에셋 최적화 및 압축은 언리얼 엔진 개발 과정에서 지속적으로 관심을 기울여야 하는 중요한 영역입니다. 처음에는 모든 것을 완벽하게 최적화하기 어려울 수 있지만, 이 절에서 배운 기본적인 원칙들을 바탕으로 꾸준히 에셋을 점검하고 개선하는 습관을 들이세요. 이는 여러분의 프로젝트가 더 넓은 사용자층에게 도달하고, 원활한 플레이 경험을 제공하는 데 결정적인 역할을 할 것입니다.