ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

UE5 Texture Sample ノードとミップマップの設定

UE5 のマテリアルでよく利用する Texture Sample ノードの設定周りについてや、マテリアルから Mip Level を制御する方法について簡単にまとめておきたいと思います。

Texture Sample ノードの設定


マテリアルで Texture Sample ノードを作成すると、デフォルトでは「UVs」「Tex」「Apply View MipBias」の3つの入力ピンがあります。( UVs 横のTexture Sample ノード自身で UV チャンネルを変えられるようになってたんですね!)

一方、詳細パネルには「MipValueMode」「Sampler Source」「Automatic View Mip Bias」「Const Coordinate」「Const Mip Value」といった項目があります

 

UV 関連の設定


UVs には UV の情報を与えるために TexCoord ノードを接続するのが定番ですね。

TexCoord ノードの設定の Coordinate Index は UV チャンネルを指定し、UTiling / VTiling はタイリング数を指定できます。

ただ、冒頭に書いたように Texture Sample ノードの UVs 入力ピン横の数値入力ボックス、または詳細パネルの Const Coordinate でも UV チャンネルが指定できるようですね!

●Un Mirror

一方で気になっていたのが Un Mirror U / Un Mirror V というフラグです。

名前からミラー設定を無効化するっぽい感じで、ツールチップにも「if the texture is mirrored and if you would like to undo mirroring for this texture sample, use this to umirror(テクスチャがミラーリングされており、このテクスチャサンプルのミラーリングを元に戻したい場合、これを使用してumirrorします)」とあります。

そこでテクスチャの Tiling Method を Mirror に設定して試してみます。図はフラグを触っていないデフォルトの状態です。

Un Mirror を有効に。するとミラー状態のままタイリング数が半分に?しかも座標がズレます。。(正しい挙動なのか分かりませんがとりあえずメモ)

●Sampler Source

一方で Texture Sample ノード自身の設定には Sampler Source という項目があり Shared: Wrap / Shared: Clamp に変更することで Tiling Method を Wrap や Clamp に変更できます。

元々 Mirror 設定を Wrap にした場合。効いてますね!

Clamp も効いていますね!実際にはその時使うテクスチャによって設定を変えたかったりするのでマテリアルインスタンスで変えられたら最高なんですよね。。

ちなみに Mirror にする設定だけは存在せず、Mirror 解除だけが TexCoord ノードに存在しているのも何故なのか気になります。。

テクスチャ関連の設定


Texture Sample ノードの Tex ピンには Texture Object ノードを接続します。パラメータ化しておいて使い回すように接続するのに利用したりします。

 

ミップマップ関連の設定


MipValueMode

こちらは Texture Sample ノードにある設定で、プルダウンで4種類の中から切り替えてマテリアルで Mip Level を制御することができます。

選んだ設定によって入力ピンが変わります。None 以外をそれぞれ見ていきます。

MipBias (relative to the computed mip level)
Bias に数値を入力することで Mip Level に補正をかけることができるようで、小数点やマイナスの値も反映されます。シーン内でマテリアルが使われている領域全体的に解像度を上げたいような場合に利用する感じでしょうか。テクスチャ側の設定の LOD Bias とは挙動が違うので注意が必要ですね。

ツールチップには「Explicitly compute the sample's mip level. Disables anisotropic filtering.(サンプルのミップレベルを明示的に計算する。異方性フィルタリングを無効にする)」とあります。

MipLevel (absolute, 0 is full resolution)
こちらは画面に大きく写ってようが小さく写ってようが、Mip Level を一律で同じ値にするようです。整数でなくても OK みたいです。0 だと最大の解像度になりますが、テクスチャで Nomipmaps に設定するよりは多少場面に応じて調節が効きそうです。

ツールチップには「Bias the hardware computed sample's mip level. Disables anisotropic filtering.(ハードウェアで計算されたサンプルのミップレベルにバイアスをかける。異方性フィルタリングを無効にする)」とあります。

Derivative (explicit derivative to compute mip level)
こちらは公式ドキュメントによると「異方性フィルタリング用に~~」とあります。DDX / DDY を使ってミップレベルを決める部分を独自に行いたい場合に利用すると良さそうな感じでしょうか?

ツールチップには「Explicitly compute the sample's DDX and DDY for anisotropic filtering.(異方性フィルタリングのために、サンプルのDDXとDDYを明示的に計算する)」とあります。

また、このように組めば MipValueMode = None と同じ結果になるようです。

ちなみにこんな感じで Lerp で Texture Sample ノードを切り替えられるようにマテリアルを組めば、マテリアルインスタンス1つで確認できて快適に検証できます!

●Apply View MipBias

こちらは Texture Sample ノード自身にある設定ですが、詳細パネルではチェックボックスで指定します。(デフォルトでは有効)

またノードの入力ピンも利用できて、こちらは Bool の値を接続します。

ツールチップには「Whether the texture should be sampled with per view mip biasing for sharper output with Temporal AA.(Temporal AAでより鮮明な出力を得るために、ビューごとのミップバイアスでテクスチャをサンプリングするかどうか。)」とあります。

無効にするとどういう処理になるのか分かっていないのですが、とりあえず ON / OFF で見比べてみました。図は Lerp を使って左右で表示分けできるよう組んでいます。

レベルに置いてカメラを動かしてみたところ、Mip Level の切り替わりに差が出ることはとりあえず確認できました。どういう場面で利用すると良いのでしょう‥?

●Const MipValue

最後にこちらの値ですが、MipValueMode が MipLevel または MipBias の場合に、Level / Bias 入力に何も接続していなければ、こちらで指定した値が反映されるようです。(ただし整数の値に制限される模様)


という訳でざっとまとめてみました!

分かっていない点もありますが、何かご存じだったり間違っている部分を見つけられたりしたら、コメントを頂けるととてもありがたいです。。