밉맵 스트리밍 시스템을 사용하여 Unity가 밉맵을 로드하는 방법을 제어할 수 있습니다.
이 페이지는 다음에 관한 정보를 제공합니다.
API를 사용하여 텍스처 스트리밍 시스템의 기능을 확장하는 방법에 대한 자세한 내용은 밉맵 스트리밍 시스템 API를 참조하십시오.
텍스처 스트리밍 시스템은 Unity가 기본적으로 모든 밉맵을 로드하는 대신, 현재 카메라 포지션을 렌더링하는 데 필요한 밉맵을 로드하도록 합니다. 이렇게 하면 약간의 CPU 리소스를 소모하여 잠재적으로 매우 많은 GPU 메모리를 절약할 수 있습니다.
애플리케이션의 모든 텍스처에 대해 총 메모리 제한을 설정할 수 있습니다. 텍스처 스트리밍 시스템은 메모리 할당량을 넘지 않도록 밉 레벨을 자동으로 낮춥니다.
Unity의 Viking Village 데모 프로젝트에서는 밉맵 스트리밍 시스템이 카메라 위치에 따라 텍스처 메모리를 25–30% 절감합니다.
밉맵 스트리밍을 활성화하려면 Unity의 품질 설정(Edit > Project Settings > Quality)으로 이동하여 Texture Streaming 체크박스를 활성화합니다.
이 설정을 활성화하면 품질 설정 창에 밉맵 스트리밍 시스템과 관련된 설정이 표시됩니다. 각 설정에 대한 자세한 내용은 품질 설정 문서를 참조하십시오.
기본적으로 이 설정은 프로젝트에서 모든 카메라에 대한 밉맵 스트리밍을 활성화합니다.
이제 각 텍스처에 대해 밉맵 스트리밍을 설정할 수 있습니다. 텍스처 에셋을 선택하고 인스펙터 창으로 이동하여 텍스처 임포트 설정을 확인합니다. Advanced 설정을 열고 Streaming Mip Maps 체크박스를 활성화합니다.
Android용 개발인 경우 빌드 설정을 열어 Compression Method 를 LZ4 또는 LZ4HC 로 설정해야 합니다. 이 압축 방식 중 하나를 밉맵 스트리밍 시스템이 기반을 두는 비동기 텍스처 로딩에 사용해야 합니다.
Unity는 메모리 할당량을 관찰하면서 가능한 가장 높은 해상도로 밉을 로드합니다. 텍스처 임포트 설정에서 Mip Map Priority 설정을 통해 텍스처의 우선 순위를 설정할 수 있습니다.
Unity는 이 설정을 사용하여 다음을 결정합니다.
양수는 더 높은 우선순위를 부여합니다. 유효한 값의 범위는 –128에서 127 사이입니다.
밉맵 스트리밍 시스템을 사용하여 라이트맵의 밉 레벨을 스트리밍할 수 있습니다.
다른 텍스처와 동일한 방식으로 라이트맵 에셋의 밉맵 스트리밍 설정을 편집할 수 있지만 Unity가 라이트맵을 다시 생성하면 기본값으로 재설정됩니다. 이 문제를 해결하려면 Unity가 라이트맵을 생성할 때 이러한 값을 적용하도록 지시할 수 있습니다. 플레이어 설정(Edit > Project Settings > Player)은 생성된 라이트맵에 대해 스트리밍과 우선 순위를 설정할 수 있도록 두 가지 제어 옵션, 즉 Lightmap Streaming Enabled 와 Streaming 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는 메모리 할당량을 초과하더라도 전체 해상도에서 밉맵 스트리밍을 사용하지 않는 텍스처를 항상 로드합니다.
적절한 가용 메모리를 파악하려면 다음을 수행하십시오.
이렇게 하면 씬에서 가장 리소스가 많이 소요되는 영역을 위한 텍스처 메모리를 충분히 확보할 수 있으며, 텍스처의 해상도가 저하되는 일을 방지할 수 있습니다. 여유 메모리가 있다면 Unity가 씬에서 보이지 않는 텍스처 데이터를 스트리밍 캐시 내에 유지할 수 있도록 가용 메모리를 좀 더 크게 설정해도 됩니다.
기본적으로 밉맵 스트리밍 시스템을 활성화하면 Unity가 모든 카메라에 대해 활성화합니다. 원하는 경우 이 설정을 비활성화할 수 있습니다.
Unity가 Texture Streaming > Add All Cameras 프로퍼티를 사용하여 Quality Settings 창에서 모든 카메라에 대한 밉맵 스트리밍을 활성화할지를 설정합니다.
특정 카메라를 제외하려면 해당 카메라에 Streaming Controller 컴포넌트를 추가한 다음 비활성화합니다.
Add All Cameras를 비활성화하면 카메라별 밉맵 스트리밍을 활성화해야 합니다. 이렇게 하려면 Streaming Controller 컴포넌트를 Camera 컴포넌트와 동일한 게임 오브젝트에 추가합니다.
이 컴포넌트를 사용하면 카메라별 밉 바이어스 설정을 조정할 수도 있습니다.
밈맵 스트리밍은 플레이 모드에서 기본적으로 활성화됩니다.
Unity가 Streaming Settings > Enable Texture Streaming in Play Mode 프로퍼티를 사용하여 Editor Settings 창의 플레이 모드에서 밉맵 스트리밍을 활성화할지를 제어합니다.
밉맵 스트리밍이 플레이 모드에서 활성화되었지만 편집 모드에서 활성화되지 않은 경우, 또는 그 반대의 경우 플레이 모드를 토글하는 데 걸리는 시간이 다소 증가합니다. 이렇게 하면 Unity가 밉맵 데이터를 언로드하거나 재로드하지 않도록 방지하여 플레이 모드의 워크플로 속도를 향상합니다.
Unity에는 빌트인 밉맵 스트리밍 디버깅 뷰 모드가 있습니다. 이 모드에 액세스하려면 씬 뷰 컨트롤 드롭다운을 클릭한 후 Texture Streaming 을 선택하십시오. 이 뷰 모드는 밉맵 스트리밍 시스템의 상태에 따라 게임 오브젝트에 다음 컬러를 입힙니다.
디버깅 API를 사용하여 직접 커스텀 디버그 툴 및 시각화를 작성할 수도 있습니다.
중요 : MainTexture 속성을 사용하여 설정된 메인 텍스처는 텍스처 스트리밍 디버깅 뷰 모드 또는 커스텀 디버그 툴을 사용하는 경우 게임 뷰에 표시되지 않습니다.
밉맵 스트리밍을 사용하는 텍스처의 경우 Unity는 다음 방법 중 하나를 사용하여 올바른 밉 레벨을 계산합니다.
이러한 방법 중 하나를 사용하지 않으면 Unity가 올바른 밉 레벨을 계산할 수 없습니다. 그러면 Unity가 저품질 밉을 사용하여 텍스처를 로드하게 되고 흐릿하게 보일 수 있습니다.
참고: 다음 시스템은 스탠다드 Renderer 컴포넌트를 사용하지 않으므로 해당 시스템을 위한 필수 밉을 수동으로 설정해야 합니다.
_ST
값에서 해당 텍스처의 스케일과 변환을 찾습니다. 예를 들어 _MainTex
를 사용하여 셰이더에 있는 텍스처를 레퍼런스하면 Unity는 _MainTex_ST
를 찾습니다.