【Godot】VisualShader入門 - ノードをつないで作るシェーダー

作成: 2026-07-09

Godotのビジュアルシェーダー(VisualShader)を初心者向けに解説。コードを書かずノードをつないでシェーダーを作る仕組み、主要ノードとOutputへの接続、コード版との対応、使い分けまでを図で学びます。

シェーダーは映像の質を一気に上げてくれる強力な道具ですが、コードで書くシェーダー は数式やGLSLが並び、「難しそう」と感じて手が止まりがちです。そんなときの入口になるのが VisualShader(ビジュアルシェーダー)コードを書かず、ノードをつなぐだけ でシェーダーを組める仕組みです。

この記事では、VisualShaderとは何かから、主要なノードと Output(出力)への接続 、コード版シェーダーとの 対応 、そして 使い分け までを図で解説します。数式が苦手でも、配線でシェーダーの世界に入っていけます。

VisualShaderのイメージ。いくつかのノードをワイヤーでつないで、コードを書かずにシェーダーを組み立てていく

この記事でわかること

  • VisualShader とは(ノードをつないで作るシェーダー)
  • 主要ノードと Output への接続の流れ
  • コード版シェーダー との対応関係
  • VisualShaderとコード、どちらを使うかの 使い分け

Sponsored

VisualShaderとは:ノードでシェーダーを組む

シェーダーの作り方には、 コードで書く 方法と、 ノードをつなぐ 方法(VisualShader)の2つがあります。どちらも最終的には同じシェーダーになりますが、作る体験が大きく違います。

コード版とノード版の対比図。左はコードで数式や�関数が並ぶテキスト、右はノードをワイヤーでつないだグラフ。どちらも同じシェーダー(同じ見た目の結果)を作れる、という対応を示す
  • コード版 :GLSLに近い文法で数式を書きます。自由度が高く複雑なこともできますが、初心者には敷居が高めです。
  • VisualShader(ノード版) :処理を表す ノード を配置し、 ワイヤーでつなぐ だけ。数式を打たなくても、視覚的に組み立てられます。

作り方はかんたんです。オブジェクトのマテリアルに ShaderMaterial を割り当て、その Shader 欄で「新規VisualShader」を作ると、ノードを並べてつなぐ編集画面が開きます。

ノードをOutputにつなぐ

VisualShaderは、 「入力ノード → 加工ノード → Outputノード」 という流れでできています。左から右へ、データを配線していくイメージです。

VisualShaderのノードグラフ構造図。左に入力ノード(UV・Time・Texture)、中央に加工ノード(Mix・Vector演算など)、右にOutputノード。ワイヤーで左から右へつなぎ、最終的にOutputへ結果を流し込む
  • 入力ノード :素材になる値。UV(テクスチャ座標)、Time(時間)、Texture(画像を読む)など
  • 加工ノード :値を計算する。Mix(2つを混ぜる=lerp)、ベクトル演算、ColorRamp(色のグラデーション)など
  • Outputノード :計算結果の行き先。ここにつないだ値が画面に反映されます

例えば「テクスチャをそのまま表示する」なら、Texture ノードの色を Output の色につなぐだけ。「時間で色を変える」なら、Time を計算に混ぜてから Output へ、という具合です。 数式を打つ代わりに、ノードを線でつなぐ ——これがVisualShaderの基本操作です。

Outputノード:2Dと3Dで違う出力先

Outputノードの中身は、2D(canvas_item)と3D(spatial)で変わります。作りたいものに合わせて、正しい出力先へつなぎます。

Outputノードのモードによるつなぎ先の違いの図。canvas_item(2D)のOutputはColorとAlpha、spatial(3D)のOutputはAlbedo・Emission・Normal・Alphaなどの出力先を持つ
  • canvas_item(2D)Color(色)、Alpha(透明度)などが主な出力先です。スプライトやUIのシェーダーはこちら。
  • spatial(3D)Albedo(基本色)、Emission(発光)、Normal(凹凸)、Alpha など、3Dマテリアルらしい豊富な出力先があります。

どのモードで作るかは、シェーダーを付ける相手(2Dスプライトか3Dメッシュか)で決まります。まずは2Dの Color へ色を出すところから始めると、結果が分かりやすいです。

Sponsored

実践:ノードでヒットフラッシュを作る

アクションの被弾、シューティングの敵ヒット、RPGのダメージ演出——「攻撃が当たった瞬間、キャラが白く光る」ヒットフラッシュは定番のエフェクトです。これをVisualShaderのノードで組んでみましょう。

ヒットフラッシュのノードグラフ図。Textureノード(元の絵)と白色(1,1,1)を、Mixノードで混ぜる。混ぜ具合はuniformのflash_amountで制御し、その結果をOutputのColorにつなぐ。flash_amountが1に近いほど白く光る

仕組みはシンプルです。 元のテクスチャの色 を、Mix ノードで混ぜ、その 混ぜ具合を uniform(外から変えられる値) で制御します。

  1. Texture ノードで元の絵の色を取る
  2. Vector(白 = (1, 1, 1))を用意する
  3. Mix ノードで「元の色」と「白」を混ぜる。混ぜ具合は flash_amount(uniform)
  4. 結果を OutputColor につなぐ

あとはスクリプトから flash_amount を上げ下げするだけ。被弾した瞬間に1へ、すぐ0へ戻せば、パッと白く光ってすぐ戻ります(値をなめらかに戻すなら Tween が便利です)。

ポイントは2つです。

  • Mix は「混ぜる」の万能ノード :2つの色(や値)を割合で混ぜる Mix(lerp)は、フラッシュ・フェード・色変化など、あらゆる演出の土台になります。まずこれを覚えると応用が利きます。
  • uniformで「外から動かせる穴」を作るflash_amount のようなuniformを1つ用意すれば、同じシェーダーをスクリプトから自在に制御できます。これは コード版シェーダーuniform と同じ考え方です。

同じ処理を色を掛けるだけで済ませたいなら modulateによるホワイトフラッシュ の方が手軽です。シェーダーは「もっと凝った加工」がしたくなったときの選択肢、と捉えてください。

コード版との使い分け

VisualShaderとコード版は、どちらが上ということはなく、 場面で使い分け ます。

VisualShaderとコード版の使い分けの図。VisualShaderは試作・数式が苦手・視覚的に確認したいときに向く。コード版は処理が複雑・同じシェーダーを量産・細かく最適化したいときに向く、という2つの適性を並べる
VisualShader(ノード)コード版
向いている場面試作・数式が苦手・視覚的に組みたい処理が複雑・量産・細かく最適化したい
強み直感的・つなぐだけ・結果が見やすい自由度が高い・使い回し・差分管理しやすい

おすすめは、 VisualShaderで感覚を掴み、慣れたらコードへ という流れです。ノードで「テクスチャを混ぜる」「時間で動かす」を体験しておくと、コード版の mix()TIME を見たときに「あのノードのことか」とすっと理解できます。逆に、ノードが増えて配線がスパゲッティになってきたら、コード版へ移すサインです。

おまけ:先に知っておくと良いこと

  • プレビューで結果を確認 :多くのノードは、その場で結果の色を小さくプレビューできます。配線しながら「今どうなっているか」を目で確かめられるのが、VisualShaderの大きな利点です。
  • 困ったら公式のノード一覧 :ノードの種類は豊富です。やりたいことに合うノードは、公式ドキュメントのノード一覧から探すのが早道です。
  • 画面全体のエフェクトは別テクニック :画面全体にかけるアウトラインや色収差などは、hint_screen_texture を使ったポストプロセスの領域です(コード版が中心ですが、考え方はVisualShaderにも通じます)。

まとめ

  • VisualShader は、コードを書かず ノードをつないで シェーダーを作る仕組み
  • ShaderMaterialShader 欄で「新規VisualShader」を作り、 入力→加工→Output の順に配線する
  • Outputは 2D(canvas_item)ならColor/Alpha、3D(spatial)ならAlbedo/Emission など
  • Mix と uniform を使えば、ヒットフラッシュのような演出がノードだけで作れる
  • 試作・数式が苦手ならVisualShader、複雑・量産ならコード版 と使い分ける

まずは2Dスプライトに TextureOutput.Color をつなぐだけの最小シェーダーから始めてみてください。「線をつなぐと絵が変わる」感覚が掴めれば、シェーダーはもう怖くありません。

さらに学ぶために