Version: 2023.2
언어: 한국어
밉맵 소개
밉맵 스트리밍 시스템 API

밉맵 스트리밍 시스템

밉맵 스트리밍 시스템을 사용하여 Unity가 밉맵을 로드하는 방법을 제어할 수 있습니다.

이 페이지는 다음에 관한 정보를 제공합니다.

API를 사용하여 텍스처 스트리밍 시스템의 기능을 확장하는 방법에 대한 자세한 내용은 밉맵 스트리밍 시스템 API를 참조하십시오.

개요

이 시스템은 Unity가 기본적으로 모든 밉맵 레벨을 로드하는 대신 현재 카메라 위치를 렌더링하는 데 필요한 밉맵 레벨만 로드하도록 합니다. 이 시스템은 적은 CPU 리소스를 소모하여 잠재적으로 많은 양의 GPU 메모리를 줄여 줍니다.

애플리케이션의 모든 텍스처에 대해 총 메모리 제한을 설정할 수 있으며, 시스템은 자동으로 밉맵 레벨을 이 메모리 할당량 내로 줄입니다.

Unity의 Viking Village 데모 프로젝트에서는 밉맵 스트리밍 시스템이 카메라 위치에 따라 텍스처 메모리를 25–30% 절감합니다.

시작

밉맵 스트리밍 활성화

밉맵 스트리밍을 활성화하려면 Unity의 품질 설정(Edit > Project Settings > Quality)으로 이동하여 Texture Streaming 체크박스를 활성화합니다.

이 설정을 활성화하면 품질 설정 창에 밉맵 스트리밍 시스템과 관련된 설정이 표시됩니다. 각 설정에 대한 자세한 내용은 품질 설정 문서를 참조하십시오.

기본적으로 이 설정은 프로젝트에서 모든 카메라에 대한 밉맵 스트리밍을 활성화합니다.

밉맵 스트리밍 시스템과 함께 작동하는 텍스처 생성

이제 개별 텍스처에 밉맵 스트리밍을 설정할 수 있습니다.텍스처 에셋을 선택하고 인스펙터 창으로 이동하여 텍스처 임포트 설정을 확인합니다.Advanced 설정을 열고 Mip Streaming 체크박스를 활성화합니다.

Android용 개발인 경우 빌드 설정을 열어 Compression MethodLZ4 또는 LZ4HC 로 설정해야 합니다. 이 압축 방식 중 하나를 밉맵 스트리밍 시스템이 기반을 두는 비동기 텍스처 로딩에 사용해야 합니다.

Unity는 메모리 할당량을 준수하면서 가능한 한 가장 높은 해상도로 밉맵 레벨을 로드합니다. Texture Import Settings의 Mip Streaming > Priority 설정으로 텍스처의 우선순위를 설정할 수 있습니다.

Unity는 이 설정을 사용하여 다음을 결정합니다.

  • 리소스를 할당할 때 텍스처의 우선순위
  • 메모리 할당량에 맞는 밉맵 레벨을 선택할 때 밉맵 바이어스 값. 예를 들어 우선순위가 2인 경우, 밉맵 스트리밍 시스템은 우선순위가 0인 텍스처보다 두 레벨 높은 밉맵을 사용하려고 합니다.

양수는 더 높은 우선순위를 부여합니다. 유효한 값의 범위는 –128에서 127 사이입니다.

스트리밍 라이트맵

밉맵 스트리밍 시스템을 사용하여 라이트맵에 대한 밉맵 레벨을 스트리밍할 수 있습니다.

다른 텍스처와 동일한 방식으로 라이트맵 에셋의 밉맵 스트리밍 설정을 편집할 수 있지만 Unity가 라이트맵을 다시 생성하면 기본값으로 재설정됩니다. 이 문제를 해결하려면 Unity가 라이트맵을 생성할 때 이러한 값을 적용하도록 지시할 수 있습니다. 플레이어 설정(Edit > Project Settings > Player)은 생성된 라이트맵에 대해 스트리밍과 우선 순위를 설정할 수 있도록 두 가지 제어 옵션, 즉 Lightmap Streaming EnabledStreaming Priority 를 제공합니다.

밉맵 스트리밍을 활성화하고 우선순위를 설정하면 일반 텍스처와 동일한 방식으로 라이트맵에 작동합니다.

밉맵 스트리밍 설정

Unity 에디터에서 기본 설정으로 설정한 다음 필요한 경우 밉맵 스트리밍 API를 사용하여 이 설정을 오버라이드할 수 있습니다.

메모리 할당량 설정

Memory Budget 프로퍼티는 Unity가 텍스처에 소모하는 최대 메모리 양을 정합니다. 가용 메모리 할당량이 너무 작으면 Unity가 씬 내 텍스처의 해상도를 낮추며, 이로 인해 텍스처가 건너뛰기되거나 느리게 로드될 수 있습니다. 단, 가용 메모리는 다른 리소스에게도 메모리가 돌아가도록 가능한 한 작게 설정해야 합니다.

Texture Streaming > Memory Budget 프로퍼티를 사용하여 Quality Settings 창에서 메모리 할당량을 설정합니다.

메모리 할당량이 가득 차면 Unity는 사용하지 않는 밉맵을 폐기하여 사용할 공간을 확보합니다. Max Level Reduction 으로 사용하지 않은 밉맵을 얼마나 많이 폐기할지 제어할 수 있습니다.

이 값은 밉맵 스트리밍 시스템이 시작할 때 처음 로드하는 밉맵 레벨이기도 합니다. 예를 들어 이 값을 2로 설정하면 Unity는 첫 번째 로드 시 가장 높은 두 개의 밉맵을 건너뜁니다.

Texture Streaming > Max Level Reduction 프로퍼티를 사용하여 Quality Settings 창에서 이 값을 설정합니다.

참고: Unity는 메모리 할당량보다 Max Level Reduction 값을 우선합니다. 텍스처 메모리가 할당량을 초과하더라도 Max Level Reduction 값보다 더 많은 밉맵을 폐기하지 않습니다.

메모리 할당량에는 밉맵 스트리밍을 사용하지 않는 텍스처가 포함됩니다. 예를 들어 메모리 할당량이 100MB이고 밉맵 스트리밍을 사용하지 않는 텍스처가 90MB인 경우 Unity는 나머지 10MB에 모든 스트리밍 밉맵을 맞추려고 합니다. 그렇지 않으면 낮은 해상도로 로드합니다. Unity는 메모리 할당량을 초과하더라도 전체 해상도에서 밉맵 스트리밍을 사용하지 않는 텍스처를 항상 로드합니다.

적절한 가용 메모리를 파악하려면 다음을 수행하십시오.

  1. 프로젝트 실행 중 Texture.desiredTextureMemory 값을 확인합니다.
  2. Memory Budget 값을 Texture.desiredTextureMemory 값보다 조금 더 높게 설정합니다.

이렇게 하면 씬에서 가장 리소스가 많이 소요되는 영역을 위한 텍스처 메모리를 충분히 확보할 수 있으며, 텍스처의 해상도가 저하되는 일을 방지할 수 있습니다. 여유 메모리가 있다면 Unity가 씬에서 보이지 않는 텍스처 데이터를 스트리밍 캐시 내에 유지할 수 있도록 가용 메모리를 좀 더 크게 설정해도 됩니다.

카메라 설정

기본적으로 밉맵 스트리밍 시스템을 활성화하면 Unity가 모든 카메라에 대해 활성화합니다. 원하는 경우 이 설정을 비활성화할 수 있습니다.

Unity가 Texture Streaming > Add All Cameras 프로퍼티를 사용하여 Quality Settings 창에서 모든 카메라에 대한 밉맵 스트리밍을 활성화할지를 설정합니다.

특정 카메라를 제외하려면 해당 카메라에 Streaming Controller 컴포넌트를 추가한 다음 비활성화합니다.

Add All Cameras를 비활성화하면 카메라별 밉맵 스트리밍을 활성화해야 합니다. 이렇게 하려면 Streaming Controller 컴포넌트를 Camera 컴포넌트와 동일한 게임 오브젝트에 추가합니다.

카메라별 밉맵 바이어스 설정을 변경하는 데에도 이 컴포넌트를 사용할 수 있습니다.

Streaming Controller 컴포넌트
Streaming Controller 컴포넌트

에디터 스트리밍 설정 지정

Edit > Project Settings > Editor에 있는 스트리밍 설정
Edit > Project Settings > Editor에 있는 스트리밍 설정

에디터의 밉맵 스트리밍(텍스처 스트리밍이라고도 함)은 기본적으로 활성화되어 있지만, Quality Settings에서 Texture Streaming을 활성화하고 텍스처 에셋의 임포트 설정 중 하나 이상에서 Mipmap Streaming을 활성화한 경우에만 효과가 나타납니다.

Unity가 에디터에서 플레이 모드와 편집 모드 모두에서 밉맵 스트리밍을 사용할지를 개별적으로 제어할 수 있습니다.이렇게 하려면 Project Settings > Editor > Streaming Settings로 이동합니다.

에디터에서 밉맵 스트리밍을 한 모드에서만 활성화하고 다른 모드에서는 활성화하지 않은 경우, 플레이 모드를 시작하고 종료하는 데 시간이 약간 더 걸립니다.밉맵 스트리밍을 두 모드에서 모두 활성화하면 Unity가 밉맵 데이터를 언로드 및 재로드하지 않아도 되며, 플레이 모드를 시작하고 종료하는 속도가 빨라집니다.

“Load texture data on demand” 설정을 사용하면 밉맵 스트리밍이 활성화된 텍스처에 대해 에디터에서 추가적인 최적화를 수행할 수 있습니다.

  • 디스크에서 메모리에 텍스처 데이터를 비동기적으로 로드
  • 현재 카메라 뷰에 필요한 밉맵 레벨만 로드
  • 현재 품질 설정에 대한 텍스처 스트리밍 메모리 할당량 내에서 작업을 시도

이러한 최적화를 통해 어느 정도 지연을 방지하고, 로딩 속도를 약간 높이며, CPU 메모리 사용량을 줄일 수 있습니다. 그러나 이 설정을 사용하면 고해상도 버전이 로드되는 동안 밉맵 처리된 텍스처가 일시적으로 더 낮은 해상도로 표시될 수 있습니다. 이 기능은 CPU에 약간의 오버헤드를 유발하므로, 텍스처가 한 번에 모두 메모리에 들어가거나 스트리밍하도록 설정된 텍스처가 없다면 이 기능을 비활성화하는 것이 좋습니다.

밉맵 스트리밍 디버깅

Unity에는 빌트인 밉맵 스트리밍 디버깅 뷰 모드가 있습니다. 이 모드에 액세스하려면 씬 뷰 컨트롤 드롭다운을 클릭한 후 Texture Streaming 을 선택하십시오. 이 뷰 모드는 밉맵 스트리밍 시스템의 상태에 따라 게임 오브젝트에 다음 컬러를 입힙니다.

  • 녹색 : 밉맵 스트리밍 시스템으로 인해 밉맵 수가 감소한 텍스처.
  • 빨간색: 밉맵 스트리밍 시스템에 모든 밉맵을 로드할 만큼 리소스가 충분하지 않아서 적은 수의 밉맵을 가진 텍스처.
  • 파란색 : 스트리밍이 설정되지 않은 텍스처. 또는 밉맵 레벨을 계산할 렌더러가 없음.

디버깅 API를 사용하여 직접 커스텀 디버그 툴 및 시각화를 작성할 수도 있습니다.

중요 :MainTexture 속성을 사용하여 설정된 메인 텍스처는 텍스처 스트리밍 디버깅 뷰 모드 또는 커스텀 디버그 툴을 사용하는 경우 게임 뷰에 표시되지 않습니다.

Unity가 필요한 밉맵 레벨을 계산하는 방식

밉맵 스트리밍을 사용하는 텍스처의 경우 Unity는 다음 방법 중 하나를 사용하여 알맞은 밉맵 레벨을 계산합니다.

  • Unity Renderer 컴포넌트에 사용되는 머티리얼에 텍스처를 할당하면 Unity는 밉맵 레벨을 자동으로 계산합니다.
  • 아니면 Texture2D.requestedMipmapLevel을 사용하여 수동으로 밉맵 레벨을 요청해야 합니다.

이렇게 하지 않으면 Unity가 올바른 밉맵 레벨을 계산할 수 없으므로 저해상도 밉맵 레벨을 사용하여 텍스처를 로드합니다. 따라서 텍스처가 흐리게 보일 수 있습니다.

참고: 다음 시스템은 표준 Renderer 컴포넌트를 사용하지 않습니다. 따라서 이러한 시스템에서는 요청된 밉맵 레벨을 수동으로 설정해야 합니다.

  • 데칼 프로젝터 텍스처.
  • 반사 프로브 텍스처: 저해상도 밉맵 레벨은 거칠기에 대한 룩업 테이블입니다. 따라서 Unity가 더 낮은 밉맵 레벨을 사용하면 잘못된 거칠기를 사용하여 머티리얼을 렌더링합니다.
  • Mesh.uv(UV0이라고도 함) 이외의 채널에서 UV 텍스처 좌표를 사용하는 셰이더 또는 셰이더에서 텍스처 좌표를 변경하는 셰이더. 단, 스케일 및 변환 변경은 예외입니다(아래 참조).

제한 사항

  • Unity는 터레인 텍스처에서 밉맵 스트리밍을 지원하지 않습니다. Unity가 터레인 텍스처를 타일화하고 블렌딩하려면 터레인 텍스처가 항시 전체 해상도로 제공되어야 하기 때문입니다.
  • Renderer 컴포넌트가 활성화된 경우 그 메시는 원하는 밉맵 레벨을 계산하기 위해 유효한 UV 배포 지표를 필요로 합니다. Unity는 메시 임포트 프로세스의 일부로 배포 지표를 자동으로 계산합니다.

    코드에서 메시를 생성하는 경우 Unity는 배포 지표를 자동으로 계산하지 않으므로, 잘못된 밉맵 레벨이 로드됩니다. UV 배포 지표 계산을 수동으로 트리거하려면 Mesh.RecalculateUVDistributionMetrics를 사용하십시오.
  • Unity가 API(예: Graphics.DrawMeshNow)로 스트리밍된 텍스처를 직접 렌더링하는 경우, 시스템에는 밉맵 레벨을 계산할 렌더러 바운드 또는 기타 정보가 없습니다. 따라서 텍스처 밉맵 레벨을 수동으로 설정하거나 이 텍스처에서 밉맵 스트리밍을 비활성화해야 합니다. Unity가 로드할 밉맵 레벨을 수동으로 설정하는 자세한 방법은 Texture2D.requestedMipmapLevel을 참조하십시오.
  • Unity는 텍스처의 밉 레벨을 계산할 때 셰이더에서 플래그된 텍스처와 이름이 같은 _ST 값에서 해당 텍스처의 스케일과 변환을 찾습니다. 예를 들어 _MainTex를 사용하여 셰이더에 있는 텍스처를 레퍼런스하면 Unity는 _MainTex_ST를 찾습니다.
밉맵 소개
밉맵 스트리밍 시스템 API