In computer graphics, mipmaps (also MIP maps) or pyramids are pre-calculated, optimized sequences of images, each of which is a progressively lower resolution representation of the previous. The height and width of each image, or level, in the mipmap is a factor of two smaller than the previous level. Mipmaps do not have to be square. They are intended to increase rendering speed and reduce aliasing artifacts. A high-resolution mipmap image is used for high-density samples, such as for objects close to the camera; lower-resolution images are used as the object appears farther away. This is a more efficient way of downfiltering (minifying) a texture than sampling all texels in the original texture that would contribute to a screen pixel; it is faster to take a constant number of samples from the appropriately downfiltered textures. Mipmaps are widely used in 3D computer games, flight simulators, other 3D imaging systems for texture filtering, and 2D and 3D GIS software. Their use is known as mipmapping. The letters MIP in the name are an acronym of the Latin phrase multum in parvo, meaning "much in little".

Since mipmaps, by definition, are pre-allocated, additional storage space is required to take advantage of them. They are also related to wavelet compression. Mipmap textures are used in 3D scenes to decrease the time required to render a scene. They also improve image quality by reducing aliasing and Moiré patterns that occur at large viewing distances, at the cost of 33% more memory per texture.

Overview

Mipmaps are used for:
 Level of detail (LOD)
 Improving image quality. Rendering from large textures where only small, discontiguous subsets of texels are used can easily produce Moiré patterns;
 Speeding up rendering times, either by reducing the number of texels sampled to render each pixel, or increasing the memory locality of the samples taken;
 Reducing stress on the GPU or CPU.
 Water surface reflections

Origin
Mipmapping was invented by Lance Williams in 1983 and is described in his paper Pyramidal parametrics. From the abstract: "This paper advances a 'pyramidal parametric' prefiltering and sampling geometry which minimizes aliasing effects and assures continuity within and between target images." The referenced pyramid can be imagined as the set of mipmaps stacked in front of each other.

The origin of the term mipmap is an initialism of the Latin phrase multum in parvo ("much in a small space"), and map, modeled on bitmap. The term pyramids is still commonly used in a GIS context. In GIS software, pyramids are primarily used for speeding up rendering times.

Mechanism

Each bitmap image of the mipmap set is a downsized duplicate of the main texture, but at a certain reduced level of detail. Although the main texture would still be used when the view is sufficient to render it in full detail, the renderer will switch to a suitable mipmap image (or in fact, interpolate between the two nearest, if trilinear filtering is activated) when the texture is viewed from a distance or at a small size. Rendering speed increases since the number of texture pixels (texels) being processed per display pixel can be much lower for similar results with the simpler mipmap textures. If using a limited number of texture samples per display pixel (as is the case with bilinear filtering) then artifacts are reduced since the mipmap images are effectively already anti-aliased. Scaling down and up is made more efficient with mipmaps as well.

If the texture has a basic size of 256 by 256 pixels, then the associated mipmap set may contain a series of 8 images, each one-fourth the total area of the previous one: 128×128 pixels, 64×64, 32×32, 16×16, 8×8, 4×4, 2×2, 1×1 (a single pixel). If, for example, a scene is rendering this texture in a space of 40×40 pixels, then either a scaled-up version of the 32×32 (without trilinear interpolation) or an interpolation of the 64×64 and the 32×32 mipmaps (with trilinear interpolation) would be used. The simplest way to generate these textures is by successive averaging; however, more sophisticated algorithms (perhaps based on signal processing and Fourier transforms) can also be used.

The increase in storage space required for all of these mipmaps is a third of the original texture, because the sum of the areas 1/4 + 1/16 + 1/64 + 1/256 + ⋯ converges to 1/3. In the case of an RGB image with three channels stored as separate planes, the total mipmap can be visualized as fitting neatly into a square area twice as large as the dimensions of the original image on each side (twice as large on each side is four times the original area - one plane of the original size for each of red, green and blue makes three times the original area, and then since the smaller textures take 1/3 of the original, 1/3 of three is one, so they will take the same total space as just one of the original red, green, or blue planes). This is the inspiration for the tag multum in parvo.

Anisotropic filtering

When a texture is viewed at a steep angle, the filtering should not be uniform in each direction (it should be anisotropic rather than isotropic), and a compromise resolution is required. If a higher resolution is used, the cache coherence goes down, and the aliasing is increased in one direction, but the image tends to be clearer. If a lower resolution is used, the cache coherence is improved, but the image is overly blurry. This would be a tradeoff of MIP level of detail (LOD) for aliasing vs blurriness. However anisotropic filtering attempts to resolve this trade-off by sampling a non isotropic texture footprint for each pixel rather than merely adjusting the MIP LOD. This non isotropic texture sampling requires either a more sophisticated storage scheme or a summation of more texture fetches at higher frequencies.

Summed-area tables
Summed-area tables can conserve memory and provide more resolutions. However, they again hurt cache coherence, and need wider types to store the partial sums, which are larger than the base texture's word size. Thus, modern graphics hardware does not support them.

See also
 Anisotropic filtering
 Hierarchical modulation – similar technique in broadcasting
 Pyramid (image processing)
 Scale space
 Spatial anti-aliasing

References

Computer graphics data structures
Texture filtering
3차원 그래픽스의 텍스처 매핑 분야에서, 밉맵()은 렌더링 속도를 향상시키기 위한 목적으로 기본 텍스처와 이를 연속적으로 미리 축소시킨 텍스처들로 이루어진 비트맵 이미지의 집합이다. 밉맵스(mipmaps, MIP maps)라고도 한다. 이는 3차원 컴퓨터 게임, 비행 시뮬레이터, 기타 3차원 영상 시스템에서 폭넓게 사용되고 있다.

밉맵은 랜스 윌리엄스가 1983년 논문에서 피라미드 매개 변수 필터링()이라는 방법으로 처음 소개했다. 피라미드라는 표현은 밉맵이 크기 순으로 쌓여 있는 것으로 생각할 수 있다. MIP은 라틴어 (‘적은 공간에 더 많이’)의 머릿글자를 딴 것이다.

동작 원리 

밉맵 집합의 각각의 비트맵 이미지는 기본 텍스처를 일정한 수준만큼 미리 축소한 것이다. 텍스처가 원래 크기 이상으로 보일 경우 기본 텍스처를 그대로 쓸 수도 있지만, 원래보다 멀거나 작게 보일 경우 축소된 텍스처를 렌더링에 대신(실제로는 보간 과정을 거쳐서) 사용한다. 이렇게 하면 렌더링에 사용되는 텍스처 픽셀(텍셀)의 수가 훨씬 줄어들기 때문에 렌더링 속도를 높일 수 있다. 밉맵 이미지들은 이미 앤티에일리어싱 처리가 되어 있으므로 렌더링 과정에서 일어날 수 있는 손실이 줄고, 실시간 렌더링의 부하도 줄일 수 있다. 확대 및 축소 과정도 이 방법으로 효율적으로 할 수 있다.

텍스처의 크기가 256×256 픽셀이라고 할 때(텍스처는 보통 정사각형 모양이므로 한 변의 길이는 2의 거듭제곱이다), 만들어지는 밉맵 집합은 각각 이전 이미지의 1/4 크기, 즉 128×128, 64×64, 32×32, 16×16, 8×8, 4×4, 2×2, 1×1 크기의 여덟 개의 이미지로 구성된다. 예를 들어 이 텍스처를 40×40 크기로 렌더링할 경우 64×64 크기와 32×32 크기 밉맵 이미지를 적절한 방법으로 보간해서 최종 이미지를 얻을 수 있다. 가장 간단한 방법은 최종 이미지의 각 픽셀과 가장 가까운 밉맵 이미지의 픽셀들의 평균을 구하는 것이고, 그 외에 신호 처리나 푸리에 변환 등을 사용하는 복잡한 방법도 사용할 수 있다.

밉맵 집합을 저장하는 데 필요한 용량은 원래 텍스처 용량의 1/4 + 1/16 + 1/256 + … = 1/3이다. 큰 용량을 필요로 하지 않는다는 것이 이 방법의 장점이지만, 많은 경우 확대 및 축소가 방향과 관계 없이 이루어지지 않고 한 방향이 다른 방향보다 더 많이 확대 및 축소가 된다. 이런 경우 적절한 해상도의 이미지를 사용하게 되는데, 해상도가 높다면 캐시 효율은 떨어지고 안티 앨리어싱이 한 방향으로 많이 일어나지만 최종 이미지의 품질은 높으며, 해상도가 낮다면 캐시 효율은 높아지지만 이미지가 너무 흐릿해져서 구별하기 힘들어진다.

변형 밉맵 

밉맵의 문제를 해결하기 위해 비균일 밉맵, 또는 립 맵()이 사용되는 경우가 있다. 예를 들어 16×16 텍스처의 립 맵 집합은 16×8, 16×4, 16×2, 16×1, 8×16, 8×8, 8×4, 8×2, 8×1, 4×16, 4×8, 4×4, 4×2, 4×1, 2×16, 2×8, 2×4, 2×2, 2×1, 1×16, 1×8, 1×4, 1×2, 1×1 크기의 이미지로 구성된다. 하지만 이렇게 할 경우 필요한 용량이 원래 텍스처 용량의 네 배가 되기 때문에 잘 사용되지 않는다. 또한 회전에 대해서 밉맵을 적용하여 미리 45° 회전을 시킨 이미지를 저장할 수도 있으나 일반적인 밉맵보다 훨씬 많은 용량을 필요로 한다.

필요한 용량을 줄이면서 비균일한 축소 및 확대를 지원하기 위해 영역 합산 테이블을 사용하기도 한다. 텍스처 가 주어져 있을 때, 영역 합산 테이블 는 텍스처의 픽셀과 같은 수의 값들로 이루어져 있으며, 그 값 은 텍스처의 왼쪽 위 m×n 크기의 직사각형 안에 속하는 픽셀들의 합이다. 수학적으로는 다음과 같이 쓸 수 있다.
 

따라서 이미지의 여러 픽셀을 하나로 대응시킬 때, (a1,b1] × (a2,b2] 직사각형 안의 텍셀들의 평균은 다음과 같이 구할 수 있다.
 

그러나 이 방법은 캐시 효율이 떨어지는 경향이 있으며, 테이블의 원소 하나 를 저장하는 데 필요한 자료형은 텍셀 를 저장하는 데 필요한 자료형보다 더 커야 한다. 이러한 이유로 오늘날 이 방법을 구현한 하드웨어는 거의 없다.

비등방성 필터링 과정에서는 보통 밉맵을 내부적으로 사용하며, 밉맵의 단점을 어느 정도 해결했다. 이 경우 높은 해상도의 이미지가 사용되지만 여러 텍셀이 한 방향으로 평균되어 그 방향으로 더 많은 필터링 과정을 거치게 된다. 이 방법은 캐시 효율을 다소 떨어뜨리지만 이미지의 품질을 상당히 향상시킨다.

같이 보기 
 앤티에일리어싱

컴퓨터 그래픽스
컴퓨터 그래픽스 자료 구조