Version: 2023.2
언어: 한국어
밉맵
밉맵 스트리밍 시스템

밉맵 소개

밉맵 레벨은 특정 해상도를 갖는 텍스처의 버전입니다. 밉맵 레벨은 밉맵이라는 집합으로 존재합니다. 밉맵에는 점진적으로 더 작고 낮은 단일 텍스처의 해상도 버전이 포함됩니다.

예를 들어 밉맵에는 원본 텍스처(밉맵 레벨 0)부터 밉맵 레벨 1, 밉맵 레벨 2, 밉맵 레벨 3까지 4가지 버전의 텍스처가 포함될 수 있습니다.

밉맵 레벨
밉맵 레벨

밉맵은 일반적으로 텍스처 오브젝트가 카메라와의 거리에 따라 달라질 수 있는 3D 씬에서 오브젝트를 렌더링하는 데 사용됩니다. 카메라에 가까운 오브젝트에는 높은 밉맵 레벨이 사용되고, 더 멀리 있는 오브젝트에는 낮은 밉맵 레벨이 사용됩니다.

밉맵은 GPU가 텍스처를 전체 해상도보다 낮은 해상도로 렌더링하는 상황에서 렌더링 작업의 속도를 높이고 렌더링 아티팩트를 줄일 수 있습니다. 밉맵은 사실상 원본 텍스처의 캐시 및 다운샘플링된 버전입니다. GPU는 원본 전체 해상도 텍스처에 대해 많은 샘플링 작업을 수행하는 대신, 이미 다운샘플링된 버전에 대해 더 적은 수의 작업을 수행할 수 있습니다.

밉맵이 도움이 되지 않는 경우도 있습니다.밉맵은 디스크와 메모리 모두에서 텍스처의 크기를 33% 늘립니다.또한 스케일링되지 않은 UI 텍스처와 같이 텍스처가 전체 해상도로만 렌더링되는 경우에도 유용하지 않습니다.

텍스처에 대한 밉맵을 수동으로 생성하거나 Unity에 밉맵을 생성하도록 지시할 수 있습니다.밉맵을 자동으로 생성하려면 원본 텍스처의 해상도가 예시 밉맵 이미지에 표시된 것처럼 값의 거듭제곱이어야 합니다.

텍스처 임포트 설정 인스펙터에서 텍스처 에셋에 대한 밉맵을 활성화하거나 비활성화할 수 있습니다.

GPU가 밉맵 레벨을 샘플링하는 방식

GPU는 텍스처를 샘플링할 때 현재 픽셀의 텍스처 좌표(UV)와 GPU가 계산하는 두 가지 내부 값을 기반으로 사용할 밉맵 레벨을 결정합니다. 이 두 가지 값은 DDX와 DDY입니다. DDX와 DDY는 거리와 각도를 포함하여 현재 픽셀의 옆과 위에 있는 픽셀의 UV에 대한 정보를 제공합니다.

GPU는 이 값을 사용하여 텍스처의 디테일이 카메라에 표시되는 정도를 결정합니다. 현재 픽셀과 인접한 픽셀 사이의 거리가 멀고 각도가 급격할수록 GPU는 더 낮은 해상도의 밉맵 레벨을 선택하며, 거리가 짧고 각도가 완만할수록 GPU는 더 높은 해상도의 밉맵 레벨을 선택하게 됩니다.

또한 GPU는 삼선형 필터링을 통해 두 밉맵 레벨의 텍스처 정보를 블렌딩할 수도 있습니다. 샘플링하는 동안 밉맵 레벨을 블렌딩하면 한 밉맵 레벨에서 다른 밉맵 레벨로의 전환을 덜 알아차리게 만들 수 있습니다. 밉맵 레벨을 블렌딩하기 위해 GPU는 한 밉맵 레벨에서 일정 백분율의 텍스처 정보를 가져오고 나머지는 다른 밉맵 레벨에서 가져옵니다.

밉맵 바이어스

밉맵 바이어스라는 설정은 샘플러 설정에 따라 샘플링 중에 두 가지 작업을 수행할 수 있습니다.

  • 밉맵 바이어스는 GPU가 샘플에 대해 더 낮거나 높은 밉맵 레벨을 선택하도록 임계값을 변경할 수 있습니다. 샘플러에서 점 및 선형 필터링을 사용할 때 GPU는 특정 밉맵 레벨을 선택합니다. 예를 들어 GPU는 UV 세트의 텍스처가 밉맵 레벨 3의 샘플을 사용하도록 정할 수 있습니다. 밉맵 바이어스가 –2인 경우, GPU는 샘플에 더 높은 해상도의 밉맵 레벨 1을 대신 사용합니다.
  • 밉맵 바이어스는 서로 다른 밉맵 레벨의 샘플을 블렌딩할 때 한 밉맵 레벨을 다른 밉맵 레벨보다 특정 백분율만큼 우선시하도록 GPU에 알릴 수 있습니다. 샘플러에서 삼선형 필터링을 사용할 때 GPU는 밉맵 레벨을 블렌딩합니다. 예를 들어 GPU는 계산을 통해 0.5라는 값을 반환할 수 있습니다. 그러면 GPU는 한 밉맵 레벨에서 필요한 텍스처 정보의 50%를 가져오고 나머지 50%는 다음 밉맵 레벨에서 가져옵니다. 0.2의 밉맵 바이어스가 추가되면 0.5가 0.7로 변경되며, GPU는 첫 번째 밉맵 레벨에서 텍스처 정보의 70%를 가져오고 두 번째 레벨에서는 30%만 가져옵니다.

GPU에는 기본적으로 밉맵 레벨 선택에 적용되는 전역 밉맵 바이어스가 있습니다. 텍스처는 자체 밉맵 바이어스를 가질 수 있으며, Unity는 전역 밉맵 바이어스에서 이를 더하거나 뺍니다. 셰이더에서 개별 텍스처 샘플링 작업에 대한 자체 밉맵 바이어스를 지정할 수도 있습니다.

개별 텍스처에 대한 밉맵 바이어스를 설정하려면 Texture.mipMapBias를 참조하십시오. 직접 코딩한 셰이더에서 텍스처 샘플링 작업에 대한 밉맵 바이어스를 설정하려면 tex2dbias와 같은 HLSL 함수를 사용합니다. 셰이더 그래프에서 텍스처 샘플링 작업에 대한 밉맵 바이어스를 설정하려면 샘플 텍스처 2D 배열 노드 또는 샘플 텍스처 2D 노드를 참조하십시오.

Unity의 밉맵 로드 방법

Unity가 런타임 시 밉맵 스트리밍으로 밉맵을 로드하는 방법을 제어할 수 있습니다.

밉맵
밉맵 스트리밍 시스템