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