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)、スプライン |
MetalCasterCore | ECS ワールド、エンジンループ、イベントバス、プロファイラ |
MetalCasterRenderer | Metal 抽象化、レンダーグラフ、シェーダーコンパイルとキャッシュ、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 以上、例:
createEntity、addPostProcess、modifyShader、profileFrame、generateColorPalette)。 - マルチ 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 は、次なる「何でもできるエンジン」を目指しているわけではありません。 その野心はより具体的です:
-
Apple プラットフォームにおける最高の native エンジン体験となること
iOS, macOS, tvOS, visionOS において、Metal-first な performance と Swift-native な操作感を提供します。 -
AI を主要な制作 interface にすること
単なるチャットのサイドバーではなく、状態を検査し、ツールを呼び出し、scene/material/system を安全に構築できる、真のエンジン制御レイヤーです。 -
USD-native な共同作業 workflow の構築
実際のチーム開発に適した、構成可能で version 管理しやすい asset としての scene データ。 -
Open であり、検査可能で、performance が透明であること
明確な package 境界、測定可能な runtime の挙動、そして人間と agent の両方が理解できる API。
もし成功すれば、Metal Caster は game engine 界の Leica のように感じられるはずです。その領域において、focused であり、思慮深く、妥協のない存在です。
