ミップマップ
読み: みっぷまっぷ
テクスチャの縮小表示時に発生するエイリアシングを防ぐため、あらかじめ複数の解像度レベルを事前計算して格納するデータ構造。GPU がリアルタイムに適切なレベルを選択する。
ミップマップ (mipmap) は「multum in parvo」(ラテン語で「小さな空間に多くのもの」) に由来する用語で、1983 年に Lance Williams が提案した技術である。1 枚のテクスチャに対して、元の解像度から 1/2、1/4、1/8 と段階的に縮小した画像群を事前に生成し、メモリ上に保持する。
- レベル構造: レベル 0 が元画像 (例: 1024x1024)、レベル 1 が 512x512、レベル 2 が 256x256 と続き、1x1 まで生成する。全レベルの合計メモリ使用量は元画像の約 1.33 倍 (4/3) である
- LOD 選択: GPU はテクスチャが画面上で占めるピクセル数に基づき、最適なミップレベルを自動選択する。遠くのオブジェクトには低解像度レベルが使われる
- トライリニアフィルタリング: 隣接する 2 つのミップレベルそれぞれでバイリニア補間を行い、さらにレベル間を線形補間する。レベル切り替え時の境界線を解消する
- 異方性フィルタリング: 斜めから見たテクスチャに対して、方向に応じた非等方的なサンプリングを行う。
GL_MAX_TEXTURE_MAX_ANISOTROPYで最大倍率を設定する
OpenGL では glGenerateMipmap(GL_TEXTURE_2D)、DirectX では GenerateMips() で自動生成できる。Unity や Unreal Engine ではテクスチャインポート時にデフォルトで有効になっている。ミップマップを無効にすると遠景でちらつき (シマー) が発生し、有効にするとメモリ消費が 33% 増加するトレードオフがある。