밉맵 레벨은 특정 해상도를 갖는 텍스처의 버전입니다. 밉맵 레벨은 밉맵이라는 집합으로 존재합니다. 밉맵에는 점진적으로 더 작고 낮은 단일 텍스처의 해상도 버전이 포함됩니다.
예를 들어 밉맵에는 원본 텍스처(밉맵 레벨 0)부터 밉맵 레벨 1, 밉맵 레벨 2, 밉맵 레벨 3까지 4가지 버전의 텍스처가 포함될 수 있습니다.
밉맵은 일반적으로 텍스처 오브젝트가 카메라와의 거리에 따라 달라질 수 있는 3D 씬에서 오브젝트를 렌더링하는 데 사용됩니다. 카메라에 가까운 오브젝트에는 높은 밉맵 레벨이 사용되고, 더 멀리 있는 오브젝트에는 낮은 밉맵 레벨이 사용됩니다.
밉맵은 GPU가 텍스처를 전체 해상도보다 낮은 해상도로 렌더링하는 상황에서 렌더링 작업의 속도를 높이고 렌더링 아티팩트를 줄일 수 있습니다. 밉맵은 사실상 원본 텍스처의 캐시 및 다운샘플링된 버전입니다. GPU는 원본 전체 해상도 텍스처에 대해 많은 샘플링 작업을 수행하는 대신, 이미 다운샘플링된 버전에 대해 더 적은 수의 작업을 수행할 수 있습니다.
밉맵이 도움이 되지 않는 경우도 있습니다.밉맵은 디스크와 메모리 모두에서 텍스처의 크기를 33% 늘립니다.또한 스케일링되지 않은 UI 텍스처와 같이 텍스처가 전체 해상도로만 렌더링되는 경우에도 유용하지 않습니다.
텍스처에 대한 밉맵을 수동으로 생성하거나 Unity에 밉맵을 생성하도록 지시할 수 있습니다.밉맵을 자동으로 생성하려면 원본 텍스처의 해상도가 예시 밉맵 이미지에 표시된 것처럼 값의 거듭제곱이어야 합니다.
텍스처 임포트 설정 인스펙터에서 텍스처 에셋에 대한 밉맵을 활성화하거나 비활성화할 수 있습니다.
GPU는 텍스처를 샘플링할 때 현재 픽셀의 텍스처 좌표(UV)와 GPU가 계산하는 두 가지 내부 값을 기반으로 사용할 밉맵 레벨을 결정합니다. 이 두 가지 값은 DDX와 DDY입니다. DDX와 DDY는 거리와 각도를 포함하여 현재 픽셀의 옆과 위에 있는 픽셀의 UV에 대한 정보를 제공합니다.
GPU는 이 값을 사용하여 텍스처의 디테일이 카메라에 표시되는 정도를 결정합니다. 현재 픽셀과 인접한 픽셀 사이의 거리가 멀고 각도가 급격할수록 GPU는 더 낮은 해상도의 밉맵 레벨을 선택하며, 거리가 짧고 각도가 완만할수록 GPU는 더 높은 해상도의 밉맵 레벨을 선택하게 됩니다.
또한 GPU는 삼선형 필터링을 통해 두 밉맵 레벨의 텍스처 정보를 블렌딩할 수도 있습니다. 샘플링하는 동안 밉맵 레벨을 블렌딩하면 한 밉맵 레벨에서 다른 밉맵 레벨로의 전환을 덜 알아차리게 만들 수 있습니다. 밉맵 레벨을 블렌딩하기 위해 GPU는 한 밉맵 레벨에서 일정 백분율의 텍스처 정보를 가져오고 나머지는 다른 밉맵 레벨에서 가져옵니다.
밉맵 바이어스라는 설정은 샘플러 설정에 따라 샘플링 중에 두 가지 작업을 수행할 수 있습니다.
GPU에는 기본적으로 밉맵 레벨 선택에 적용되는 전역 밉맵 바이어스가 있습니다. 텍스처는 자체 밉맵 바이어스를 가질 수 있으며, Unity는 전역 밉맵 바이어스에서 이를 더하거나 뺍니다. 셰이더에서 개별 텍스처 샘플링 작업에 대한 자체 밉맵 바이어스를 지정할 수도 있습니다.
개별 텍스처에 대한 밉맵 바이어스를 설정하려면 Texture.mipMapBias를 참조하십시오. 직접 코딩한 셰이더에서 텍스처 샘플링 작업에 대한 밉맵 바이어스를 설정하려면 tex2dbias와 같은 HLSL 함수를 사용합니다. 셰이더 그래프에서 텍스처 샘플링 작업에 대한 밉맵 바이어스를 설정하려면 샘플 텍스처 2D 배열 노드 또는 샘플 텍스처 2D 노드를 참조하십시오.
Unity가 런타임 시 밉맵 스트리밍으로 밉맵을 로드하는 방법을 제어할 수 있습니다.