Unityにおけるミップマップとテクスチャフィルタリングの概要と設定方法をまとめました。
Unity2018.4.0
ミップマップ?
下図は、元のテクスチャと、そこから解像度を半々にしていったテクスチャを並べたものです。
このようなテクスチャ群のことをミップマップと呼びます。
ミップマップは、後述するテクスチャフィルタリング時に使用することで、
カメラから遠かったり斜めに映ったりするモデルをきれいに描画できます(詳細は後述)。
Unityでは、テクスチャのインポート設定のGenerate Mip Mapsにチェックを入れることでミップマップを生成できます。
作成されたミップマップの様子はテクスチャのプレビューウィンドウでスライダーを動かすことで確認できます。
バイリニア・トライリニアフィルタリング
さて、今下記のUnityちゃんを画面に対してとても小さく描画することを考えます。
まずテクスチャフィルタリングなしで描画したものを拡大すると次のようになります。
少ないピクセル数に描き込んでいるのでドット絵のようになっています。
次にこれにテクスチャフィルタリングを適用してみます。
上記二つを見比べるとわかる通り、テクスチャフィルタリングを使うと縮小して描画した部分がきれいになります。
この効果は環境オブジェクトなど、カメラから見て遠くに描画されがちなものに適用すると顕著です。
テクスチャフィルタリングを適用するにはFilter ModeをBilinearかTrilinearに設定します。
またテクスチャフィルタリングの仕組みにはミップマップが必要なので、Generate Mip Mapsにもチェックしておく必要があります。
Filter Modeの各項目の説明は以下の通りです。
項目名 | 説明 |
---|---|
Point(no filter) | テクスチャフィルタリングを使用しない |
Bilinear | バイリニアフィルタリングを適用する Pointより綺麗だが処理負荷が高くなる |
Trilinear | トライリニアフィルタリングを適用する バイリニアより綺麗だが処理負荷が高くなる |
異方性フィルタリング
次に、画面に対してモデルが傾いて描画されているケースを考えます。
3DCGはこのような状況でテクスチャを綺麗に描画するのが苦手です。
上記はバイリニアフィルタリングだけを掛けて描画した結果です。
手前はチェック柄がうまく描画されていますが、奥に行くにつれて詳細がつぶれてしまっています。
このようなケースでは、異方性フィルタリングを使うことで品質を向上できます。
試しに異方性フィルタリングをレベル10(後述)で適用してみます。
先ほどの結果よりも遠くまでチェック柄がはっきり見えるようになりました。
この効果は床など、カメラに対して斜め&広範囲に描画されるものに適用すると顕著です。
異方性フィルタリングを適用するには、テクスチャ設定でAniso Levelを2以上にします。
0と1は異方性フィルタリングOFFの状態なので注意してください。
なお、異方性フィルタリングを使うにはバイリニアフィルタリングかトライリニアフィルタリングが適用されている必要があります。
これらが設定されていない場合にはAniso Levelは非アクティブになり異方性フィルタリングは適用されません。
また、Aniso Levelについては高い値に設定するほど綺麗な結果にはなりますが、その分処理負荷が増大します。
Quality設定と異方性フィルタリング
テクスチャ設定の他にQuality設定にも異方性のレベルの適用方法に関する設定項目があります。
この設定項目の働きは非常にわかりづらいのですが、まとめると以下のようになります。
設定項目名 | 説明 |
---|---|
Disabled | テクスチャ設定に関係なく異方性フィルタリングを無効にする |
Per Texture | テクスチャ設定をそのまま使う |
Forced On | テクスチャ設定に関係なくAniso Levelを9~16にクランプする ただし、Aniso Levelが0に設定されているものは無効のままにする |
Forced Onがわかりづらいですね。
マニュアルにもまともな記述がないのですが下記に記載されていました。
処理負荷に注意
さて上記でも多少触れましたが、テクスチャフィルタリングを適用すると処理負荷が増大します。
簡単にまとめると処理負荷は以下のルールで増えていきます。
- テクスチャフィルタリング無し < バイリニアフィルタリング < トライリニアフィルタリング
- 異方性フィルタリングはレベルを上げれば上げるほど処理負荷が増大する
また具体的にはテクスチャのサンプリング数が増えるため、GPUの処理負荷が大きくなっていきます。
これに関しての詳細は以下の記事がわかりやすいので興味がある方は見ると良いと思います。
https://www.4gamer.net/specials/3de/nv_at/nv_at01.html
https://www.4gamer.net/specials/3de/nv_at/nv_at02.html
以上を踏まえた現実的な指針として、まずカメラからみてあまり遠くに行かないキャラクターなどのテクスチャはフィルタリングを無効にして良さそうです。
またVFXなどもあまり効果が感じられなそうであれば切ってしまってよさそうです。
残るは環境オブジェクトですが、カメラワークが自由である場合には基本的にテクスチャフィルタリングはONにしたほうがよさそうです。
ただし異方性フィルタリングは床などカメラに対して斜めに描画されやすいオブジェクトのみでいいかもしれません。
また、バイリニアとトライリニアにはそこまで見た目的な差がないため、特段気にならなければバイリニアにしておくのがいいかと思います。