Unity ShaderGraph備忘録 part1-UVとUVスクロール
※URPの2D前提で書いてます。
UVって何?

3Dモデル界隈でよく出てくる、このグラデーションの画像のこと
紫外線ではない
平面画像の話に限って言うと、「画像の見え方を決めるときに参照する座標」と言える
xyzは3Dの座標で使ってるので、被らないようにuとvの値を使っている
赤がu軸で、緑がv軸

u軸の赤とv軸の緑がグラデーションで足されて、右上の部分は黄色で表されている
光の三原色の赤+緑と同じ原理

UnityではUVの左下が(0,0)、右上が(1,1)で
対応する画像の色情報を参照している

画像にUVを重ねたイメージ図
それぞれ0~1の位置に対応した画像の色が参照される
※ピクセル数は参照していない

なのでUVをねじったりすると、画像も同様にねじれる
UVオフセット
UVに数値を足す(Add)と位置が移動する

値はx = u, y = vにそれぞれ対応している
- xに足すとuvは左方向に移動する
- yに足すと下方向に移動する
- xとyに同じ値を足すと対角線上の左下に移動する
引き算(Subtract)すると、足し算とは逆方向に移動する
どゆこと?
「方眼紙をカメラで撮ってる」と思うと分かりやすいかもしれません
0~1の範囲が収まってた画面に、1が加わる事で方眼紙がずれて1~2の範囲が収まる
0~1の範囲は1~2が画面に入ってくる方向とは逆方向に去っていきます

座標が移動したUVを画像に適用した時に
2D画像のインポート設定の中にある「wrap mode」で出力が少し変わる
- Clampモードだと画面端のピクセルが引き延ばされる見た目に
- Repeatモードにすると画像が繰り返され
- Mirrorモードにすると鏡面で反転されつつ画像が繰り返される
等。
UVスクロール
UVの各値に足す数値にtimeノードを繋ぐと、
時間経過が足されるのでUV位置が変わり続ける = UVがスクロールする


UVタイリング

UVに数値を掛けると(Multiply)画像の大きさが変わる
- xは横方向に
- yは縦方向に
- xとyに同じ値を掛けると縦横均等に大きさが変わる
0.5などの、1以下の正の小数を掛けると画像が拡大される
こちらもオフセット同様、「wrap mode」の設定で出力が少し変わる
なんで1以下を掛けてるのに拡大されるの?
UV座標を縮めると、同じ画像領域が引き伸ばされて見える
(例えば0~1の範囲まで見えてたものが、0~0.5の範囲にフォーカスされる)
なので画像は拡大されたような見た目になります
Tiling And Offsetノード

これまで話した
タイリング(Tiling) = 掛け算
オフセット(Offset) = 足し(引き)算
に、対応しているノード。このノード1つで2つの操作を同時に行える

Tiling and offsetノードの
- Tilingに繰り返したい数、
- offsetにtimeノードを繋げると

レトロなゲームの背景っぽい画像が作れる
縦横いずれかの移動方向を変えたい場合は
0からtimeを引いたノードをx または y につなぐ


xに繋いだので、さっきとは逆方向に移動するようになる
Discussion