【Unity】シェーダーグラフで広がる円を描画する

投稿者: | 2020-04-24


Unityのシェーダーグラフで広がる円を描画しました。

シェーダーグラフの全体です。

左上ではPositionノードで取得した座標と(0, 0, 0)との距離を計算しています。

「Direction」等と名付けて、外部から操作できるようにしたものもあります。これらはこの後説明します。

左下では、Timeノードからゲーム中に増え続ける値を取得して、Fractionノードに入れます。Fractionノードからは小数点以下の値だけが出力されるので、0~1の値を繰り返します。

Fractionの前で値を掛けることで、Timeから出力される値を伸縮して、値が増える早さを調節します。

左上と左下の出力を使って、その地点の(0, 0, 0)からの距離が、Fractionから出る1未満の値より大きく、それにThicknessを足した値よりは小さいときに、色が変わるようにします。
すると、基準の(0, 0, 0)が同じ位の距離にあるところだけ色が変わるので、円が描画されます。その距離が増加すれば、円の半径が長くなって円は広がります。

そこから出力された色をMasterノードのBaseColorにつなぎます。Splitノードを使ってAlphaだけを取り出して、Alphaにもつなぎます。

Masterノードの歯車マークをクリックして、Surface TypeをTransparentに変更し、AlphaClippingにチェックを入れます。

これで、AlphaClipThresholdの値を上げると透明になります。

シェーダーグラフを保存して、シーン上のPlaneにこのシェーダーグラフの付いたマテリアルをつけて、プレイ中にインペクタでプロパティの値を変えてみます。

Timeノードの近くに作った「Speed」を変えると、円が広がる早さを変えられます。

Directionは線が広がる方向を決めます。(1, 1, 1)なら円ですが、(0, 1, 1)にすると、どの位置でもX座標が無視されて、Y, Z軸が同じであれば同じ位置にあると判断されるので、まっすぐな横線が描画されます。

(1, 1, 0)だと縦線になりました。

高さのあるオブジェクトに変えて、(0, 1, 0)を掛けると、上下方向に線が広がります。

基準のY座標を下げると、上の様に足元から登るようになります。

Fractionの出力は1未満なので、円の半径を大きくしたいときは、Fractionノードの出力に1より大きい値をかけます。
デフォルトではPlaneの大きさに合わせて10にしましたが、3に下げると円が広がりきらずに戻ります。

Thicknessを変えると、色が変わる範囲が広がって、線が太くなります。

AlphaClipThresholdを上げると透明になります。

PositionノードのSpaceをObjectにしているので、Planeを動かすと基準の(0, 0, 0)も動きます。

コメントを残す

メールアドレスが公開されることはありません。