BLOGブログ

2016.11.18UE4UE/ Material

[UE4] ミップをマテリアルから制御する

今回の記事ではテクスチャのミップ(Mip)レベルをマテリアルからコントロールする方法をご紹介します。

 

映像用途では、2K4Kなど高解像のテクスチャを使用するケースが多々あります。

 

特にキャラクター関係のアセットでは、ノーマルマップなど非常に細かい凹凸が描かれていて、見せ方によってはジャギーが目立ってしまうことがあったりします。

20161118_blog01

上図の球体には4Kのノーマルマップを割り当てています。

 

クローズアップでは質感がきれいに出ていますが、下図のように少し離れるとテクスチャの細かい部分にジャギーが目立つようになり、これではせっかく高解像度のテクスチャを使用しているのに残念な結果です。

20161118_blog02

このような場合、ノーマルマップを複数用意しておきカメラの距離に応じてブレンドするなどの方法でも解決できます。

 

ただ、やはり複数のアセットを作成・管理するのは手間が掛かりますし、修正時のことを考えるとなるべく低コストに対応したいものです。

 

そこで、マテリアルからテクスチャのミップレベルを制御し、意図的にテクスチャをぼかしてジャギーを目立たなくしてみましょう。

 

マテリアルエディタでTexture Sampleノードを選択します。

DetailパネルのMipValueModeMipLevelに切り替えます。

20161118_blog03

すると、ノードのインプットにLevelが現れます。

20161118_blog04

ここに数値を入力することでテクスチャのミップレベルを調整することが可能です。

 

試しにいくつか数値を入れてみましょう。上から下へ0から3の変化です。

20161118_blog05a

入力する数値が大きいほどミップレベルが上がる(低解像度になる)ことがわかります。

 

では、今回はアクターとの距離に応じてミップレベルを変化させる――近いと高解像度、離れると低解像度になる――というマテリアルを組んでみます。

20161118_blog09

アクターとカメラの距離を除算し、Texture SampleLevelへと入力しました。

これで前述したような問題の対策になります。

 

以上、ミップをマテリアルから制御する方法でした。

何かのご参考になれば幸いです。