土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

ミップマップレベルを可視化する

ミップマップテクスチャの簡単な説明

 Unityではテクスチャを登録すると、そのテクスチャのミップマップテクスチャ群が自動生成され、リソースに追加されます。ミップマップテクスチャというのは、元の画像を25%ずつ縮小した画像群(通常9枚作成され、元の画像と合わせて10枚になります)です。
 視点から離れた所に配置されているプリミティブのサンプリング対象として高精細なテクスチャを使うと、期待する結果になりません。そこで、画面に表示される大きさに応じたミップマップテクスチャをサンプリング対象にします。テクスチャをミップマップ対応にすると、全体では容量が33%増えるのですが、テクスチャの品質が大きく向上するので、広く使われています。

ミップマップの確認

 ミップマップの適用はGPUハードウェア側で透過的に行われる為、ユーザーは意識する必要はありません。が、シェーダー本を書いている最中に実際にミップマップが機能していることを確認したくなりました。

 そこでミップマップレベルごとに異なる画像が設定された画像データを作る方法を探していたのですが、なんか面倒だったのでやめて(!)、作成済みのデータを見つけました。下記の記事からリンクを飛んでダウンロードできます。

Mip Mapping(via polycount)
http://wiki.polycount.com/wiki/Mip_Mapping

 適用してみたイメージ。ジオメトリはカプセルを縦に伸ばした物です。

 遠くに行くとフェードでミップマップレベルが変わっているのが分かります。赤が元画像の1024×1024、そこから水色(512×512)→紫(256×256)となっています。

おしまい

 うーし、ミップマップレベルについてはこれでなんとかなるぞ。いずれは権利的に問題ないチェック用の画像データを自作したいと思うけど、優先度は低めで……。