ミップまたはミップレベルは、特定の解像度を持つテクスチャのバージョンです。ミップはミップマップと呼ばれる集合で存在します。ミップマップには、1 つのテクスチャの解像度が徐々に低くなっていくバージョンが含まれています。
例えば、ミップマップには、オリジナルのテクスチャ (Mip 0) から、Mip 1、Mip 2、Mip 3 と 4 つのバージョンのテクスチャが含まれることがあります。
ミップマップは、3D シーンのオブジェクトのレンダリングによく使用されます。そこで、テクスチャ化されたオブジェクトはカメラからの距離によって異なる場合があります。カメラに近いオブジェクトには高いミップレベルが使用され、遠いオブジェクトには低いミップレベルが使用されます。
ミップマップは、GPU がテクスチャをその完全な解像度より低い解像度でレンダリングする場合、レンダリング操作を高速化し、レンダリングアーティファクトを低減することができます。ミップは事実上、オリジナルテクスチャのキャッシュした、ダウンサンプルしたバージョンです。GPU は、オリジナルのフル解像度のテクスチャに対して多くのサンプリング操作を行う代わりに、すでにダウンサンプルされたバージョンに対してより少ない数の操作を実行できます。
ミップマップが有益でないこともあります。ミップマップは、ディスクとメモリの両方で、テクスチャのサイズを 33% 増加させます。また、スケールされていない UI テクスチャなど、テクスチャが完全な解像度で描画される場合、ミップマップは何の利益ももたらしません。
テクスチャのミップマップは、手動で作成することも、Unity に指示して生成させることもできます。ミップマップを自動生成するには、ミップマップ画像の例に示すように、元のテクスチャの解像度が 2 のべき乗の値でなければなりません。
テクスチャアセットのミップマップの有効無効は、テクスチャインポート設定の Inspector で設定することができます。
GPU がテクスチャをサンプリングするとき。GPU は現在のピクセルのテクスチャ座標 (UV) と GPU が計算する 2 つの内部値 DDX と DDY に基づいて、どのミップレベルを使用するかを決定します。DDX と DDY は現在のピクセルの横と上のピクセルの UV に関する情報 (距離と角度を含む) を提供します。
GPU はこれらの値を使用して、テクスチャの詳細がどの程度カ メラに見えるかを決定します。つまり、現在のピクセルとその隣接ピクセルの間の距離が長く、角度が極端なほど、GPU は解像度の低いミップを選び、距離が短くて角度が極端でないほど、GPU は解像度の高いミップを選びます。
GPU はトライリニアフィルタリングによって 2 つのミップからテクスチャ情報を一緒にブレンドすることもできます。サンプリング中にミップをブレンドすることで、あるミップから別のミップへの移行を目立たなくすることができます。ミップをブレンドするために、GPU は 1 つのミップから特定の割合のテクスチャ情報を取得し、残りをもう 1 つのミップから取得します。
ミップバイアスという設定は、サンプラーの設定に基づき、サンプリング中に 2 つのことを行うことができます。
GPU にはグローバルミップバイアスがあり、デフォルトでミップ選択に適用されます。テクスチャは独自のミップバイアスを持つことができ、Unity はこれをグローバルミップバイアスに加算または減算します。また、シェーダー内の個々のテクスチャサンプリング操作に対して、独自のミップバイアスを指定することができます。
個々のテクスチャにミップバイアスを設定するには、Texture.mipMapBias を参照してください。ハンドコードシェーダーでテクスチャサンプリング操作のミップバイアスを設定するには、tex2dbias などの HLSL 関数を使用します。Shader Graph でテクスチャサンプリング操作のミップバイアスを設定するには、Sample Texture 2D Array node または Sample Texture 2D node を参照してください。
Unity がランタイムにミップマップをロードする方法は、ミップマップストリーミング で制御できます。