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