最近手に入れた「Unityでわかる!ゲーム数学」の簡単なレンダリング(4章)を読んでみました。ShaderForgeを使ってシェーダーを作ったことがあるのですが、計算の意味が説明されていましたので参考になる部分が多かったと感じました。
小数点以下を取り出す frac()
[c] fixed4 col = fixed4(0.0, 0.0, 1.0, 1.0); col.b = frac(i.uv.x - 0.5); [/c]
UVは0 ~ 1.0の値ということでなので、上記のコードを書くと次の画像のようになります。 ちょうど0.5(真ん中)の時に小数点が0になります。
動かす
Timeを使えばUVスクロールができます。 [c] col.b = frac(i.uv.x - (0.5 * Time.g)); [/c]
絶対値を取り出す abs()
[c] col.b = abs*1; [/c]
平方根を使って円の情報を取り出します。
画像を見てわかるように中心点が右上になっています。 UVの位置を調整すると次のように表示されます。 [c] float2 newUv = float2(i.uv.x - 0.5, i.uv.y - 0.5); col.b = frac(sqrt(newUv.x * newUv.x + newUv.y * newUv.y) * 2.0); [/c]
距離 : distance()
先程は平方根を使いましたが、中心点がわかればdistance()で同じようなことができます。 [c] float2 newUv = distance(i.uv, float2(0.5,0.5)); [/c]