2D的な波のマテリアル・適度に上下に動かす② はみ出さないように動かす
「昨日やってたんだけど、なんか計算通りに動かなくて、調整が間に合わなかったので今日になった」
妹「そういうことあるよね……」
「分岐のとこをしくじってたみたい。反対側に回り込んでこないようにした」
「まずテクスチャアセットの設定を変えるといいのではないか? というコメントを貰ったので、まずそれをやる。通常のUV値は0.0~1.0の範囲だけど、たとえば1.2とかになった時にどうするか? というのが、ここの設定で変えられる。デフォルト値のWrapだと、1.2なら0.2、-0.2なら0.8という風に変換されて、同じテクスチャがループする感じに見える」
妹「ループしなくするの?」
「しなくする。Clampという設定にすると、0.0~1.0の範囲外の数値を範囲内ギリギリの値に変える。ブループリントのClampノードと同じ考え方」
「あとは普通に動かせばいいんだけど、上方向に動かすとちょっと支障がある気がしたんで、下方向にしずんで、それから元の位置に戻るようにした。あと動きの周期を変えても正常に動くようにちょっとブループリントを整理したけど」
妹「なぜ上に動かすとダメなの?」
妹「これでいいじゃん。元々上に余白ある絵だから、上に動いた方が」
「今回は1色のテクスチャだからいいんだけど、これが模様についたやつの場合、上に動くと一番下のピクセルが引き伸ばされる形になっちゃう。下に動かす場合も一番上のピクセルが引き伸ばされるけど、完全に透明だから問題はない」
妹「伸びても大丈夫な絵にしないとダメなのかな」
「もしくはClampじゃなくてMirrorにするか。ループはするけど、上下や左右を反転させた状態でのループになるから」
「大きく動かすと結局反対側が見えて変になるけど、少し上下に動かす分にはMirrorの方が綺麗にできるかもしれない」
妹「あと、Fmodってノード何だろって気になってたんけど、これモジュロのことだよね? 割り算の余りの」
「そう。FloatのModuloだからFmod。小数の割り算っていうのは、そもそも答えが小数でよければ余りが出さずに割ることも出来るわけで、ちょっと特殊な計算だから区別されてる」
妹「でもブループリントだとfloatでも普通に%になってるけど」
「マテリアルを作るHLSLという言語にはFmodという命令があるから、そっちと統一したんだと思う。最終的にHLSLに変換した時にどうなるか、というのがわかりやすいから。もう1つわかりにくいのが1-xというのはOneMinusという名前のノード。ただの引き算なんだけど、1から何かを引いた値というのはよく使うから、専用で高速な命令が用意されてるので、使える時はコレ使った方がいい」