ミップまたはミップレベルは、特定の解像度を持つテクスチャのバージョンです。ミップはミップマップと呼ばれる集合で存在します。ミップマップには、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 がランタイムにミップマップをロードする方法は、ミップマップストリーミング で制御できます。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.