Version: 2021.2
언어: 한국어
프레임 디버거
스트리밍 컨트롤러

밉맵 스트리밍

밉맵 스트리밍 시스템은 Unity가 메모리에 로드하는 밉맵 레벨을 제어하도록 해줍니다. 이 시스템은 Unity가 텍스처에 필요로 하는 총 메모리 양을 줄여줍니다. 즉, 기본적으로 모든 밉맵을 로드하는 대신, Unity가 씬의 현재 카메라 포지션을 렌더링하는 데 필요한 밉맵을 로드합니다. 이렇게 하면 약간의 CPU 리소스를 소모하여 잠재적으로 매우 많은 GPU 메모리를 절약할 수 있습니다.

또한 Memory Budget 을 사용하여 프로젝트에서 사용되는 모든 텍스처에 대해 총 메모리 제한을 설정할 수 있습니다. 밉맵 스트리밍 시스템은 메모리 할당량을 넘지 않도록 밉맵 레벨을 자동으로 낮춥니다.

밉맵 스트리밍 API를 사용하여 특정 텍스처에 대한 특정 밉맵 레벨을 요청할 수 있습니다. Unity는 선택한 밉맵의 엔진 로직을 복제하는 샘플 C# 코드를 제공합니다. 이 코드를 이용하면 자체 프로젝트의 엔진 로직을 오버라이드할 수 있습니다. 자세한 내용은 밉맵 스트리밍 API를 참조하십시오.

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

시작

밉맵 스트리밍을 활성화하려면 Unity의 품질 설정(Edit > Project Settings > Quality)으로 이동하여 Texture Streaming 체크박스를 활성화하십시오. 그러면 밉맵 스트리밍 시스템에 대한 설정이 나타납니다. 각 설정에 대한 자세한 내용은 품질 설정 문서를 참조하십시오.

이 작업을 마치면 각 텍스처에 대해 밉맵 스트리밍을 설정하여 밉맵 스트리밍 시스템이 각 텍스처의 밉맵을 디스크에서 메모리로 스트리밍하도록 허용할 수 있습니다. 이렇게 하려면 밉맵 스트리밍을 적용할 텍스처를 선택하고, 인스펙터 창으로 이동하여 텍스처 임포트 설정을 확인해야 합니다. Advanced 설정을 열고 Streaming Mip Maps 체크박스를 활성화하십시오.

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

Unity는 텍스처 Memory Budget 을 관찰하는 동안 가능한 가장 높은 해상도의 밉맵을 로드합니다. 좀 더 세밀한 제어가 필요하거나 밉맵 스트리밍 시스템의 자동 결과를 미세 조정하려는 경우 C# API를 사용하여 각 텍스처에 대한 밉맵 레벨을 지정해야 합니다. 자세한 내용은 밉맵 스트리밍 API를 참조하십시오.

제한 사항

밉맵 스트리밍이 다음 방법 중 하나를 사용하여 필수 밉맵 레벨을 계산하도록 명령할 수 있습니다.

이러한 방법 중 하나를 사용하여 밉맵 레벨을 계산하도록 밉맵 스트리밍에 명령하지 않으면 Unity가 사용할 밉 레벨을 계산할 수 없습니다. 그러면 Unity가 흐릿한 저품질 밉을 사용하여 텍스처를 로드하게 됩니다.

다음 시스템은 스탠다드 렌더러를 사용하지 않으므로, 해당 시스템을 위한 필수 밉을 수동으로 설정해야 합니다. 또는 Unity가 이러한 시스템이 사용하는 텍스처를 저해상도로 로드합니다.

  • 데칼 프로젝터 텍스처
  • 반사 프로브 텍스처: 저해상도 밉은 거칠기의 룩업 테이블입니다. 따라서 Unity는 낮은 밉맵 레벨을 사용하는 경우 잘못된 거칠기를 사용하여 머티리얼을 렌더링합니다.
  • Unity의 터레인 시스템에 있는 텍스처: Unity는 터레인 텍스처에서 밉맵 스트리밍을 지원하지 않습니다. Unity가 터레인 텍스처를 타일화하고 블렌딩하려면 터레인 텍스처가 항시 전체 해상도로 제공되어야 하기 때문입니다.
  • 텍스처 UV 좌표를 Unity 빌트인 셰이더와 다르게 처리하는 셰이더. Unity는 항상 텍스처가 메시에 저장된 것처럼 UV0를 사용하여 샘플링되었다고 가정합니다. Unity는 셰이더에서 또는 다른 텍스처 좌표(예: UV1)를 사용하여 변경한 텍스처 좌표를 고려하지 않습니다. 단, 스케일 및 변환 변경은 예외입니다(아래 참조).

렌더러가 활성화되면 해당 렌더러가 사용하는 메시는 원하는 밉맵 레벨을 계산하기 위해 유효한 UV 배포 지표를 요구합니다. Unity는 메시 임포트 프로세스의 일환으로 배포 지표를 자동 계산합니다. Mesh.GetUVDistributionMetric을 사용하여 스크립트에서 이 지표를 계산할 수도 있습니다.

코드에서 메시를 만드는 경우, Unity는 배포 지표를 자동으로 계산하지 않습니다. 이로 인해 Unity가 잘못된 밉맵을 로드하게 됩니다. 예를 들어, 카메라가 메시와 가까우면 저해상도 텍스처가 로드될 수 있습니다. UV 배포 지표 계산을 수동으로 트리거하려면 Mesh.RecalculateUVDistributionMetrics를 사용하십시오.

Unity가 API(예: Graphics.DrawMeshNow로 스트리밍된 텍스처를 직접 렌더링하는 경우 시스템에 밉 레벨을 계산하기 위한 렌더러 바운드 또는 기타 정보가 없으므로, 텍스처 밉 레벨을 수동으로 설정하거나 이 텍스처에 대한 밉맵 스트리밍을 비활성화해야 합니다. Unity가 로드하는 밉 레벨을 수동으로 설정하는 방법에 대한 자세한 내용은 Texture2D.requestedMipmapLevel을 참조하십시오.

Unity는 텍스처의 밉 레벨을 계산할 때 셰이더에서 플래그된 텍스처와 이름이 같은 _ST 값에서 해당 텍스처의 스케일과 변환을 찾습니다. 예를 들어 _MainTex를 사용하여 셰이더에 있는 텍스처를 레퍼런스하면 Unity는 _MainTex_ST를 찾습니다.

밉맵 스트리밍 디버깅

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

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

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

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

프레임 디버거
스트리밍 컨트롤러