LoginSignup
4
4

More than 3 years have passed since last update.

【Godot】VisualShaderの基本的な使い方

Last updated at Posted at 2021-02-24

概要

この記事では、ノードをつないでシェーダーを作成する視覚的にわかりやすい「VisualShader」に基本的な使い方について紹介します。

シェーダー確認用のプロジェクトの作成

まずはプロジェクトを作成し、2Dシーン(Node2D)を追加して、"icon.png" をSpriteとして登録します。
Godot_Engine_-_TestVisualShader____.png

VisualShaderエディタの起動

作成した iconノードのインスペクタから CanvasItem > Material > Material > [空] をクリックして、「新規 MaterialShader」を選びます。
Godot_Engine_-_TestVisualShader____.png

作成した MaterialShaderをクリックして、Shader > [空]をクリックして、「新規 VisualShader」を選びます。
Godot_Engine_-_TestVisualShader____.png

作成した VisualShaderをクリックすると、「VisualShaderエディタ」が表示されます。
Godot_Engine_-_TestVisualShader____.png

VisualShaderエディタの設定

VisualShaderエディタを起動した直後は、Shader > Modeが「Spatial」(3D空間で有効)になっているので「CanvasItem」(2Dで有効)に変更しておきます。
Godot_Engine_-_TestVisualShader____.png

点滅するアニメーションを作る

まずは画像が点滅するアニメーションを作ってみます。
エディタ上の何もないところで右クリックするか、左上の「ノードを追加」をクリックします。
Godot_Engine_-_TestVisualShader____.png
シェーダーノードの作成ダイアログが表示されるので、以下の操作を行います。

  1. 検索ボックスに「time」と入力します
  2. 「Time」ノードをダブルクリックで選択します

Godot_Engine_-_TestVisualShader____.png
すると、Input > Timeノードが追加されます。

Godot_Engine_-_TestVisualShader____.png

簡単にこれらのノードについて説明すると、「Input」は入力パラメータです。そして「Time」ノードは時間経過によって増加するパラメータなので、テスト用の値として動作を確認するパラメータとして最適です。
そして「Output」が最終的な出力値です。例えばOutput > Color に赤色を設定すると最終的な画像は「赤色」になります。
Godot_Engine_-_TestVisualShader____.png

点滅アニメーションの続きに戻ると、Input > Timeノードの右側にある「青い丸」を右側にドラッグして離します。
Godot_Engine_-_TestVisualShader____.png
すると、シェーダーノード作成ダイアログが表示されるので、検索ボックスに「sin」と入力して、Scalar > Functions > Sinを選択します。
Godot_Engine_-_TestVisualShader____.png
すると、ScalarFunc > Sin ノードが作成されます。
Godot_Engine_-_TestVisualShader____.png
ここで、Sinのとなりにある「閉じている目アイコン」をクリックします。
Godot_Engine_-_TestVisualShader____.png
すると以下のように点滅状態が確認できます。これは Input > timeが時間経過で値が増加して、それをSinカーブで変化させることで、「-1.0〜1.0」の値となっているためです。
shot.gif
このように、VisualShaderを使うメリットは、計算途中の状態が見た目でわかることです。

Sinの動きが確認できたところで、Sinノードを Output > Alpha に接続します。
Godot_Engine_-_TestVisualShader____.png

すると画像が点滅するようになったのですが、単色になってしまっています。
shot.gif
これは色情報が設定されていないためです。

ノードエディタの何もないところで右クリックしてシェーダーノード作成ダイアログを表示します。
そして、"texture"で検索して、Textures > Functions > Texture を選択します。
Godot_Engine_-_TestVisualShader____.png

Textureのドロップダウンから「Texture2D」を選びます。
Godot_Engine_-_TestVisualShader____.png

最後に、Texture > rgb から Output > Color に接続します。
Godot_Engine_-_TestVisualShader____.png

これで点滅処理は実装できたのですが、色味が変わっていますね……。
shot.gif

これは Alpha の値がマイナスになっているためです(sin() の戻り値は -1.0〜1.0)

Alphaを 0.0〜1.0になるように修正します。
Scalar > Functions > Absノードを追加します。
Godot_Engine_-_TestVisualShader____.png

Sinノードから Absノードに接続し、 AbsノードからOutput > Color に接続するようにします。
Godot_Engine_-_TestVisualShader____.png

すると、正しく点滅処理を行うようになります。
shot.gif

参考

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4