0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPTでつくったGodotのシェーダーをAIは直せるか?フォーラムの実際のシェーダーでZivaを検証

0
Posted at

この記事は、GDShaderの実践ガイド https://ziva.sh/blogs/godot-shaders のうち、AIによるシェーダー修正のテストの節の日本語版です(英語の原文はZiva.shが2026年11月10日に更新)。

検証:ChatGPTでつくったシェーダーを、AIがエディターの中で直す

チャットのアシスタントはGDShaderを書けますが、書いたコードをコンパイルすることはできません。コードをGodotに貼り付け、エラーをコピーして戻し、それを繰り返すことになります。エディターの中で動くエージェントなら、変更のたびにコンパイルし、実行中のシーンを見ることができます。このループを、実際に壊れたシェーダーを使ってZivaでテストしました。

シェーダーは、2025年12月(Godot 4.5)のGodotフォーラムの投稿のものです。投稿者は「made the individual parts with the help of ChatGPT」(個々の部分はChatGPTの助けを借りてつくった)と書いており、背景の除去、ぼかし、オーバーレイテクスチャー、色補正の各部分を1つのcanvas_itemシェーダーにつなぎ合わせていました。すべてのモジュールが既定値のままでも、スプライトは「much more contrasty」(コントラストがずっと強い)状態になり、「a lot of brightness」(かなりの明るさ)が失われていました。フォーラムのページからコピーしたシェーダーは、コンパイルすら通りません。フォーラムの書式によって一部の*記号が消えている(6.0 * dが6.0dになっている)からです。

そのテキストをそのままプロジェクトに入れ、Godotのアイコンを2つ置きました。1つはそのままのスプライト、もう1つはシェーダーを適用したスプライトです。そのうえで、投稿者の文章を言い換えたプロンプトで、既定値のときは画像が変わらないように修正し、2つのスプライトを並べて見せるようZivaに依頼しました。Zivaがしたことは次のとおりです。

  1. 壊れたトークン(6.0d、c.x6.0、2.0boなど)を挙げ、8つの編集を一度に送りました。ほとんどは1つのトークンを直す編集です。編集はすべて却下されました。Zivaは編集のたびにシェーダーをコンパイルし、Godotがエラーを報告するとその編集を元に戻しますが、そのときほかの壊れた行がまだ残っていたためです。そこでZivaは、ファイル全体を一度に書き直しました。この元に戻す動作はZivaのバグで、すでに報告済みです。
  2. 書き直したシェーダーはエディターではエラーなく読み込まれましたが、シーンを実行すると失敗しました。TEXTUREとCOLORをヘルパー関数の中に移していたためで、canvas_itemシェーダーではヘルパー関数からこの2つを読めません。Zivaは実行時のエラーを読み、2つを引数として渡すように直しました。
  3. 次の実行で、投稿者の問題が再現しました。シェーダーを適用したスプライトのほうが暗く、コントラストが強くなっていました。Zivaは原因を切り分けるために、小さなテスト用のシーンをいくつかつくりました。1行だけのシェーダーCOLOR = texture(TEXTURE, UV);は元の画像と一致しましたが、マット処理だけのバージョンと色補正だけのバージョンは、すでに暗くなっていました。
  4. Godotのシェーディングのドキュメントを確認しました。そこには、fragment()の中では入力のCOLORがすでにテクスチャーと乗算されていると書かれています。つなぎ合わせたシェーダーはvec4 col = texture(TEXTURE, UV) * COLOR;で始まっていて、テクスチャーを2回適用していました。フォーラムのメンバーが手作業で突き止めたのと同じ行です。
  5. Zivaはその行を書き直してシーンを実行し、使い捨てのピクセルチェックで2つのスプライトを比べ、10個のデバッグ用ファイルを削除して、最後のスクリーンショットを見せました。

Zivaの実行時のスクリーンショット2枚。左:コンパイルエラーの修正後、シェーダーを適用したスプライトは元の画像より暗い。右:COLORの修正後、2つのスプライトは同じに見える。

かかったのは12分、ツールの呼び出しは48回で、既定のモデルZiva SmartでのZivaの使用量は$0.12でした。修正後のシーンを描画する別のスクリプトで独自にチェックしたところ、既定値では2つのスプライトにピクセルの違いはありませんでした。コントラスト、色相、ぼかし、背景の除去の値を上げると、シェーダーを適用したスプライトは期待どおりに変化したので、試した4つのモジュールは引き続き動作していました。

同じ症状がある場合の修正は1行です。canvas_itemシェーダーでは、texture(TEXTURE, UV) * COLORではなくCOLORから始めてください。

vec4 col = COLOR; // already texture color * modulate

ZivaはZiva.shが開発しており、このテストもZiva.shが作成しました。

テストは2026年11月10日に、Linux上のGodot 4.7.2とZivaの開発ビルドで実行しました。1つのシェーダーで1回だけ実行した結果なので、ベンチマークではなく1つの例として見てください。

このループがなければ、ChatGPTにコードを貼り付け、エラーメッセージをコピーして戻すことになります。フォーラムの投稿者は、助けを求める前に、つなぎ合わせたChatGPTのコードをエラーなしで動かそうと「quite a while」(かなり長い間)取り組んでいました。

Godotの制作工程で使えるAIツールをより広く調べた記事は、Best AI Tools & Plugins for Godot Game Engine(英語)です。

よくある質問

AIはGodotのシェーダーを書いたり直したりできますか?

GDShaderを書くことはできますが、チャットのアシスタントは書いたコードをコンパイルできないので、エラーは自分で見つけることになります。Godotエディターの中で動くエージェントなら、変更のたびにコンパイルし、結果を見ることができます。Godotフォーラムにあった、投稿者がChatGPTでつくったシェーダーでZivaをテストしました。Zivaはコンパイルエラーを直し、スプライトが暗くなる原因を見つけ、2つのスプライトを並べて見せました。独自のピクセルチェックでも、2つは同一でした。かかったのは12分で、既定のモデルでのZivaの使用量は$0.12でした。

Godotのcanvas_itemシェーダーでスプライトが暗くなるのはなぜですか?

よくある原因は、fragment()の中のtexture(TEXTURE, UV) * COLORです。canvas_itemシェーダーでは、COLORにはすでにテクスチャーの色と頂点カラーを掛け合わせた値が入っているので、もう一度テクスチャーを掛けると2回適用されることになります。モジュレートの色が必要な場合を除き、COLORをそのまま使うか、余分なCOLORを掛けずにtexture(TEXTURE, UV)を使ってください。

この記事の原文(英語):https://ziva.sh/blogs/godot-shaders

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?