環境:UE5.4
作成マテリアル:M_ClampMove, M_ClampMask
前書き
「Clamp」ノードは、値を特定の範囲に制限します。「Min」以下と「Max」以上の値は無視されます。
一方、「Saturate」ノードは、「Min」と「Max」を指定できず、必ず「0」と「1」の範囲になります。
今までの解説での「Clamp」と違うものです。テクスチャの設定ではありませんので、ご注意ください。
「Clamp」でアニメーションの挙動を変更
[使用マテリアル:M_ClampMove]
以前「Sine」の解説章ではおまけで紹介した左右に揺れるアニメーションは、揺れの具合を「Lerp」で調整していましたが、「Lerp」の代わりに「Clamp」を使うと、アニメーションの動きが荒くなります。
Lerpの場合
Clampの場合
「Clamp」のマテリアルはこちらになります。(M_ClampMove)
注意点:「ConstantBias」の「Bias」を「0」にしています。
セオリー
「Sine」と「Clamp」を適用した「Sine」を見比べると、「Min」と「Max」以外の数値が切り捨てられていることが分かります。「Max」もしくは「Min」に達すると、動きがその値に固定されます。その結果、移動範囲が狭くなり、ガクガクするようになります。
DESMOSのリンクはこちらです。
「PlotFunctionOnGraph」ノードで動きを確かめます。
縦幅が狭いので分かりづらいですが、DESMOSと同じ挙動だと分かります。
計算において範囲を適切に制御するのが重要
[使用マテリアル:M_ClampMask]
Unreal Engineのマテリアルのプレビューでは、望んだ通りの表示になったとしても、プラットフォームによって色がおかしくなる可能性があります。これは、マスクや色の制御範囲が「1」以上、または「0」以下になってしまっている可能性が高いからです。
M_ClampMaskでは、「Saturate」がなくてもプレビュー上では見た目に変化はありません。
しかし、プラットフォームによっては違いがわかりませんし、実機でバグを探すのは非常に手間がかかります。安全のために、何かの計算で範囲が「0~1」からはみ出す可能性がある場合は、必ず計算後に「Saturate」を追加することを強くおすすめします。
「Saturate」と「Clamp」の違い
「Saturate」は、「0」と「1」の間に保ってくれる便利なノードです。「Clamp」で「Min」に「0」、「Max」に「1」を設定すると「Saturate」と同じ結果になりますが、「Saturate」の方が負荷が軽いです[1]。そのため、「0」と「1」間に値を保ちたい場合は「Saturate」を使うのが良いでしょう。
これで「Clamp/Saturate」の解説は以上です。
-
「Clamp」の処理負荷は特別に高くないですが、「Saturate」と比較した場合は、「Saturate」のほうがやや軽いです。 ↩︎