T.TAO
Back to Works
2026/engineering / engineering

MetalCaster

Apple プラットフォーム専用の game engine。GenAI を第一級市民として設計されています。

GameEngineRenderingMetal
MetalCaster

Metal Caster は、Apple ecosystem における game engine の設計を第一原理から再考しようとする私の試みです。

あらゆるプラットフォームや workflow に対応する汎用エンジンを作るのではなく、Metal Caster は意図的に強いこだわりを持っています。Swift + SwiftUI + Metal + ECS を採用し、Apple プラットフォームに特化。そして AI をエンジンへの第一級 interface としています。

このエンジンは open source であり、GitHub からアクセス可能です。

開発の動機

多くのエンジンは、柔軟性や cross-platform での規模拡大を最適化します。 Metal Caster は、それとは異なるものを最適化します:

  • 終わりのない設定よりも、優れた default 設定
  • portability よりも、Apple Silicon への深い最適化
  • 手動の boilerplate よりも、AI-native な制作 workflow
  • 機能の肥大化よりも、視覚的な明快さとツールの優雅さ

核心となる考え方はシンプルです:

やりたいことを記述する -> AI がエンジンのツールを通じて構築する -> editor で視覚的に微調整する。

私は、このエンジンが精密機械のように感じられることを望んでいます。focused で minimal、そして高速であることです。

エンジンアーキテクチャ

Metal Caster は 10 個のライブラリモジュールと 2 個の実行可能ファイルからなる Swift Package として構成されており、エンジン・エディタ・ツール群を合わせて約 6.3 万行の Swift で書かれています:

モジュール責務
MetalCasterMathベクトル、行列、クォータニオン、AABB/OBB/フラスタム、レイとプリミティブの交差判定(Möller-Trumbore、slab テスト、SAT)、スプライン
MetalCasterCoreECS ワールド、エンジンループ、イベントバス、プロファイラ
MetalCasterRendererMetal 抽象化、レンダーグラフ、シェーダーコンパイルとキャッシュ、PBR マテリアル、ポストプロセス
MetalCasterSceneシーングラフ、USD インポート、カメラ/ライト/メッシュシステム、ライト&リフレクションプローブ
MetalCasterAssetアセットパイプライン、MSL → .metallib プリコンパイル、テクスチャ圧縮、.mcbundle
MetalCasterAIマルチプロバイダー LLM レイヤー、9 つの専門 agent、orchestrator、エンジンスナップショット
MetalCasterPhysics剛体、sort-and-sweep broadphase、コライダーに対する CPU レイキャスト
MetalCasterAudio / Input空間オーディオ、クロスプラットフォーム入力抽象化

レンダリングスタック

最近の作業の大半はここに注ぎ込まれています。レンダラーは、レンダーパスとコンピュートパスを混在させて順次実行するレンダーグラフを中心に構築され、2 つのレンダーパスを選択できます:

  • Forward パス —— Shadow → Skybox → Mesh + Lighting → Post-Process → Blit
  • Deferred パス —— Shadow → G-Buffer(MRT) → スクリーンスペース Deferred PBR ライティング → Skybox → Post-Process

G-Buffer は albedo+metallic(RGBA8 sRGB)、normal+roughness(RGBA16F)、ワールド座標(RGBA32F)、そして Depth32F ターゲットをパックしています。

物理ベースシェーディング

コアのマテリアルモデルは Cook-Torrance です:GGX 法線分布、Smith 幾何項、Fresnel-Schlick を、metallic/roughness のマテリアルプロパティとテクスチャで駆動します。同じ BRDF が forward のマルチライトシェーダーと deferred ライティングパスの両方で動作します。

MSLfloat3 F0 = mix(float3(0.04), albedo, metallic);
float  D  = distributionGGX(NdotH, roughness);   // GGX NDF
float  G  = geometrySmith(NdotV, NdotL, roughness);
float3 kD = (1.0 - F) * (1.0 - metallic);

ライティングとグローバルイルミネーションの基盤

  • シャドウマッピング:専用の depth-only パス(前面カリング + 深度バイアス)
  • ライトプローブ:L2 球面調和関数を格納し、シェーダー内で評価してディフューズ GI に使用
  • リフレクションプローブ:box/sphere 形状、視差補正付き cubemap 投影をサポート
  • プロシージャル大気:Rayleigh + Mie 散乱、および頂点変位によるアニメーション水面

ポストプロセススタック

ping-pong HDR ターゲット上で動作する Volume ベースのポストプロセスチェーン:

SSAO → ハイトフォグ → Bloom(mip チェーンのダウンサンプル/アップサンプル) → 被写界深度 → モーションブラー → Panini 投影 → カラーグレーディング → ビネット / 色収差 / フィルムグレイン → FXAA

エディタ級の GPU 機能

  • GPU オブジェクトピッキング:各エンティティが自身の ID を r32Uint ターゲットにレンダリングし、ピクセル精度の選択を実現。同じバッファがエッジ検出ベースのアウトラインポストエフェクトも駆動します。
  • GPU プロファイリングMTLCounterSampleBuffer によるパスごとのタイムスタンプ収集。エディタに表示され、Optimize agent が利用します。
  • ランタイム MSL コンパイル + パイプラインキャッシュ:ユーザーや agent が書いたシェーダーをエンジン再起動なしにホットリロード。
  • Compute パスが Scene Composer の地形ツールを支えます:ハイトマップ生成、水食シミュレーション、法線導出、スカルプトブラシがすべて Metal compute kernel として動作します。

エンジンインターフェースとしての AI

AI システムはチャットのサイドバーではなく、エディタと同じ API を通じてエンジンを操作する制御レイヤーです。

  • 9 つの専門 agent:Scene、Render、Shader、Asset、Optimize、Analyze、Art、Audio、Composer——それぞれがスコープの限定されたツールセットを持ちます(合計 30 以上、例:createEntityaddPostProcessmodifyShaderprofileFramegenerateColorPalette)。
  • マルチ agent orchestrator:プランナー LLM がリクエストを優先度付きの委任に分解し(「建物エンティティを 12 個作成」→ Scene、「ネオングローのマテリアル」→ Shader、「色付きポイントライト」→ Render)、順番に実行します。
  • スナップショット駆動のコンテキスト:毎回の呼び出し前に、エンジンが EngineSnapshot——エンティティ階層、コンポーネント、レンダー状態、ドローコール、フレームタイミング——をシリアライズし、agent が実際のワールド状態に基づいて推論できるようにします。
  • コードの投げ捨てではなくツール:agent は型付きでフェイルセーフなツール呼び出しを通じてワールドを変更し、構造化された結果を返します。すべての AI 操作が検査可能かつ取り消し可能です。
  • PromptScript:自然言語の振る舞い記述を Swift の ECS コンポーネントとシステムにコンパイルするコンパイラ。プレビューランナー付き。
  • マルチプロバイダー:OpenAI、Anthropic、Gemini のバックエンドを単一インターフェースの下に統合。

ツール群:Shader Canvas と SDF Canvas

エンジンから生まれ、独立したプロジェクトに成長した 2 つのコンパニオンツール:

  • Metal Shader Canvas —— レイヤー式シェーダーオーサリングとエージェント編集ループを備えた、スタンドアロンのリアルタイム MSL ワークベンチ(専用ページ参照)。
  • SDF Canvas —— sphere tracing の MSL を生成するノードベースの符号付き距離場エディタ:生成されたフラグメントシェーダーが SDF シーンをレイマーチングし、ソフトシャドウ(64 ステップの shadow marching)とレイマーチング AO をサポートします。エディタには "Pro" バージョンも組み込まれています。

現在のステータスと正直なギャップ

Metal Caster は現在、活発な pre-alpha / architecture-hardening の段階にあり、すべてのコアシステム——ECS ランタイム、デュアルパスレンダラー、macOS エディタ(マルチパネルワークスペース、ビルド&プレイワークフロー)、アセット/ビルドパイプライン、agent システム——で動作する vertical slice が完成しています。

ロードマップ上に残っている項目を率直に述べると:

  • ハードウェアレイトレーシング(MTLAccelerationStructure)とプローブを超える本格的な GI ソリューション
  • 専用のパーティクル/VFX システム
  • Composer agent の地形ツールとビューポート空間クエリの agent パイプラインへの接続
  • より広いテストカバレッジと大規模シーンのプロダクション強化

野心

Metal Caster は、次なる「何でもできるエンジン」を目指しているわけではありません。 その野心はより具体的です:

  1. Apple プラットフォームにおける最高の native エンジン体験となること
    iOS, macOS, tvOS, visionOS において、Metal-first な performance と Swift-native な操作感を提供します。

  2. AI を主要な制作 interface にすること
    単なるチャットのサイドバーではなく、状態を検査し、ツールを呼び出し、scene/material/system を安全に構築できる、真のエンジン制御レイヤーです。

  3. USD-native な共同作業 workflow の構築
    実際のチーム開発に適した、構成可能で version 管理しやすい asset としての scene データ。

  4. Open であり、検査可能で、performance が透明であること
    明確な package 境界、測定可能な runtime の挙動、そして人間と agent の両方が理解できる API。

もし成功すれば、Metal Caster は game engine 界の Leica のように感じられるはずです。その領域において、focused であり、思慮深く、妥協のない存在です。