rn.log

備忘録など

【シェーダーグラフメモ その56】内積を使って任意方向のグラデーションを作る

UV座標と2次元ベクトルの内積 = グラデーション

以下のシェーダーグラフを見てください。

UV座標とベクトル(1, 0.5) の内積をとると、(1, 0.5)の方向へ増加するグラデーションができます。

f:id:r-ngtm:20210102165822p:plain
UVとベクトルの内積

数式による解説

UV座標  p = (x, y) と ベクトル  (1, 0.5)内積を計算すると、  x + 0.5 y になります。

この式がある色の値 g をとると考えた場合、以下のような直線の方程式を得ます。

x + 0.5 y = g

グラデーションの色の値

gの値を変えながら、グラデーションの上に直線x + 0.5y = g を引いてみると以下のようになります。

f:id:r-ngtm:20210102161631p:plain


このグラデーションは直線  x + 0.5y = g (0 \leq  g \leq 1.5) が表す領域であるとも言えます。

ちなみに、直線 x + 0.5y = g はベクトル  (1, 0.5) と垂直になっています。

内積に使用するベクトルは正規化したほうが良い

内積に使用するベクトルの長さが変化すると、内積結果は変わってしまいます。

f:id:r-ngtm:20210102164043p:plain
ベクトルの長さによって内積結果が変わる

内積に使用するベクトルは Normalizeで長さを1にした方が良いでしょう。

f:id:r-ngtm:20210102164314p:plain
Normalizeを使う

3次元の内積

3次元座標と3次元ベクトルの内積をとると、これもベクトル方向へ増加するグラデーションになります。

f:id:r-ngtm:20210102162320p:plain
3次元座標と3次元ベクトルの内積

ベクトル(1, 2, 3)の正規化 と3次元座標の内積をとると、(1, 2, 3) の方向へ増加するグラデーションになります。

f:id:r-ngtm:20210102162707p:plain
ベクトル(1, 2, 3) の方向へ増加するグラデーション

3次元座標とベクトルの内積は平面の方程式を作る

ベクトル(1, 2, 3)と3次元座標(x, y, z)内積x + 2y +3zになります。

この式がある色の値gをとると考えた場合、以下の方程式を得ます。
x + 2y +3z = g

これはベクトル(1, 2, 3)に垂直な平面の方程式になっています。

g = 0 の部分は、Unity上のオブジェクトでは以下のように対応します。
f:id:r-ngtm:20210102165228p:plain