shader-programming について
ゲームやリアルタイムグラフィックスの開発者向けの、OpenClaw 用シェーダープログラミングスキルです。GLSL または HLSL の生成、最適化、デバッグに対応し、バージョンやハードウェアとの互換性も確認します。
主な機能
- 01GLSL・HLSLコードの生成
- 02シェーダー性能の分析と最適化
- 03コンパイルエラーや実行時の描画問題の診断
- 04バージョンとハードウェア互換性の確認
活用シーン
- 01ゲームの視覚効果用シェーダーの作成
- 02モバイルゲームの GPU 負荷軽減
- 03開発中のシェーダーのデバッグ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill shader-programmingインストール後、Claude Code で/shader-programmingを入力して読み込まれたか確認します。
詳細
目的
このスキルを使うと、OpenClaw はゲームエンジンのリアルタイムグラフィックス向けに、GLSL または HLSL シェーダーを生成、最適化、デバッグできます。頂点シェーダー、フラグメントシェーダー、コンピュートシェーダーの作成や、OpenGL、Vulkan、DirectX などの API との互換性確保といったタスクに重点を置いています。
使用する場面
ユーザーが、視覚効果、パフォーマンスの調整、ゲームエンジンとの統合を目的にカスタムシェーダーを求めている場合に、このスキルを使用します。具体的には、以下のような場合です。
- GPU 負荷を軽減するため、モバイルゲーム向けにシェーダーを最適化する(例:テクスチャサンプルを最小限に抑える)。
- Unity や Unreal などのツールで、水の描画やポストプロセスなどの高度なエフェクトを作成する。
- ゲーム開発の反復作業中にシェーダーコードをデバッグする。
主な機能
- ユーザーの仕様(シェーダーの種類、入力、出力など)に基づいて、完全な GLSL/HLSL コードスニペットを生成します。
- コードを分析、変更して、命令数の削減や精度修飾子の使用などにより、シェーダーを最適化します。
- 修正方法を提案し、コンパイルエラーや実行時のアーティファクトなど、よくある問題をデバッグします。
- GLSL 330 や HLSL 5.0 などのシェーダーバージョンに対応し、ハードウェア互換性を確認します。
使用パターン
OpenClaw でこのスキルを呼び出すには、コマンド openclaw execute shader-programming --task <task-type> --input <details> を使用します。シェーダー言語(例:--lang glsl)と対象プラットフォーム(例:--platform vulkan)を必ず指定してください。コード生成では、次のような JSON 設定を指定します:{"type": "vertex", "inputs": ["position", "normal"], "outputs": ["gl_Position"]}。次のパターンに従います。
- 明確なタスクから始めます。例:
openclaw execute shader-programming --task generate --lang hlsl --input '{"features": ["lighting"]}'。 - 最適化するには、既存のコードをパイプで渡します。例:echo "existing shader code" | openclaw execute shader-programming --task optimize --lang glsl。
- 認証が必要な場合(外部コンパイラーを使う場合など)は、コマンドを実行する前に環境で $OPENCLAW_API_KEY を設定します。
よく使うコマンド/API
シェーダータスクでは、OpenClaw に統合された以下のコマンドを使用します。
- GLSL シェーダーをコンパイルする:OpenClaw のサブプロセス経由で
glslangValidator -V -o output.spv input.vertを実行します。例:openclaw execute shader-programming --subprocess "glslangValidator -V -o myShader.spv myShader.vert"。 - HLSL シェーダーをコンパイルする:
fxc /T vs_5_0 /E MainVS /Fo compiled.bin input.hlslを使用し、openclaw execute shader-programming --subprocess "fxc /T vs_5_0 /E MainVS /Fo output.bin input.hlsl"として呼び出します。 - API エンドポイント:JSON ペイロードを指定して OpenClaw の /api/shader/generate に POST します。例:curl -H "Authorization: Bearer $OPENCLAW_API_KEY" -d '{"lang": "glsl", "type": "fragment"}' https://api.openclaw.com/api/shader/generate。
- 設定形式:入力には JSON を使用します。例:{"shader": {"version": "330", "precision": "highp float"}}。エラーチェックを行うには、コマンドに --validate などのフラグを含めます。例:
openclaw execute shader-programming --task validate --input "shader code" --flags "--validate"。
統合に関する注意
生成したシェーダーをプロジェクトのワークフローに組み込んで、このスキルを統合します。Unity では、GLSL/HLSL ファイルを Assets/Shaders ディレクトリに保存し、マテリアルから参照します。Unreal では、HLSL に .usf 形式を使用します。OpenClaw の呼び出しは必ずスクリプトでラップします。例として Python では、import subprocess; subprocess.run(["openclaw", "execute", "shader-programming", "--task", "generate", "--lang", "glsl"]) のようにします。複数のエンジンとの互換性を確保するには、設定でプロファイルを指定します(例:モバイル向けの {"profile": "gles3"})。外部ツールを使用する場合は、認証を必要とする API 呼び出しが失敗しないよう、$OPENCLAW_API_KEY が設定されていることを確認します。
エラー処理
コンパイラの出力を解析して、シェーダーのエラーに対処します。GLSL の場合は、glslangValidator のログを確認し、「ERROR: 0:5: 'undeclared identifier'」のようなパターンを探してから、たとえば不足している変数を追加するなど、修正案を提示します。コードでは、try { subprocess.run(["glslangValidator", "-V", "input.vert"]) } catch e { print(e.stderr); if "syntax error" in e.stderr: return "Fix line 5 with correct syntax" } のようにします。HLSL の場合、「error X3004: undeclared identifier」のような fxc のエラーには、変数を再宣言して対処する必要があります。OpenClaw の組み込み検証機能を使用します:openclaw execute shader-programming --task debug --input "shader code" を実行すると、{"errors": ["Line 10: missing semicolon"]} のような JSON が返されます。エラーは必ずタイムスタンプ付きで記録し、入力を修正して再試行してください。
具体的な使用例
-
シンプルな 3D オブジェクト用の基本的な GLSL 頂点シェーダーを生成します:
openclaw execute shader-programming --task generate --lang glsl --input '{"type": "vertex", "inputs": ["vec3 position"]}'を実行します。次のコードが生成されます:attribute vec3 aPosition; void main() { gl_Position = vec4(aPosition, 1.0); } -
既存の HLSL フラグメントシェーダーをパフォーマンス向けに最適化します:
openclaw execute shader-programming --task optimize --lang hlsl --input "float4 PSMain(float2 uv : TEXCOORD) : SV_Target { return float4(uv, 0.0, 1.0); }"を実行します。出力例:float4 PSMain(float2 uv : TEXCOORD) : SV_Target { return float4(uv.x, uv.y, 0.0, 1.0); } // Optimized by inlining.
グラフの関係
- 関連先:game-dev クラスター(例:レンダリングパイプライン向けの graphics-programming とノードを共有します)。
- リンク先:graphics-programming(より広範な API 統合向け)、rendering-engines(エンジン固有のシェーダーフック向け)、performance-optimization(シェーダーのチューニング手法向け)。