mcpField
A
axiom-ios-graphics

axiom-ios-graphics

github.com/charleswiltgen開発1.2k192 回インストール今日更新
リポジトリ

axiom-ios-graphics について

iOS の GPU レンダリング、グラフィックス、3D 表示、描画パフォーマンスに取り組む開発者向けのルーティングスキルです。移行、API リファレンス、診断などの作業を、Metal、ディスプレイ性能、RealityKit の各スキルへ振り分けます。

主な機能

  1. 01Metal 移行とシェーダー作業の振り分け
  2. 02GPU 描画問題の診断案内
  3. 03ディスプレイとフレームレートの調整
  4. 04RealityKit と SwiftUI 3D 作業の振り分け
  5. 05設計・リファレンス・トラブル対応の区分

活用シーン

  1. 01OpenGL または DirectX から Metal への移行計画
  2. 02移行後の画面が黒い問題の調査
  3. 03フレームレートや ProMotion の問題の調査
  4. 04SwiftUI での 3D コンテンツ表示方法の選択

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/charleswiltgen/axiom --skill axiom-ios-graphics

インストール後、Claude Code で/axiom-ios-graphicsを入力して読み込まれたか確認します。

詳細

iOS グラフィックスルーター

GPU レンダリング、グラフィックスプログラミング、3D コンテンツの表示、またはディスプレイのパフォーマンスに関する作業では、必ずこのスキルを使用してください。

使用する場面

次のような場合に、このルーターを使用してください。

  • OpenGL/OpenGL ES のコードを Metal に移植する
  • DirectX のコードを Metal に移植する
  • GLSL/HLSL シェーダーを Metal Shading Language に変換する
  • MTKView または CAMetalLayer を設定する
  • GPU レンダリングの問題(黒い画面、色の誤り、クラッシュ)をデバッグする
  • 変換レイヤー(MetalANGLE、MoltenVK)を評価する
  • GPU パフォーマンスを最適化する、または熱によるスロットリングを解消する
  • ProMotion 対応デバイスでアプリが 60fps に固定される
  • CADisplayLink またはレンダーループを設定する
  • 可変リフレッシュレートディスプレイの問題に対処する
  • ゲーム以外の SwiftUI アプリで 3D コンテンツを表示する
  • RealityKit で AR エクスペリエンスを構築する
  • SwiftUI で RealityView または Model3D を使用する
  • 空間コンピューティングまたは visionOS の 3D コンテンツを扱う

ルーティングロジック

Metal への移行

方針の決定 → /skill axiom-metal-migration

  • 変換レイヤーを使うか、ネイティブに書き換えるかの判断
  • プロジェクトの評価と移行計画
  • アンチパターンとよくある間違い
  • 納期に対処するためのプレッシャーシナリオ

API リファレンスと変換 → /skill axiom-metal-migration-ref

  • GLSL → MSL シェーダー変換表
  • HLSL → MSL シェーダー変換表
  • GL/D3D API に対応する Metal API
  • MTKView の設定、レンダーパイプライン、コンピュートシェーダー
  • WWDC の完全なコード例

診断 → /skill axiom-metal-migration-diag

  • 移植後に画面が黒くなる
  • シェーダーのコンパイルエラー
  • 色または座標系の誤り
  • パフォーマンスの低下
  • 診断経路ごとの所要時間分析
ディスプレイのパフォーマンス

フレームレートとレンダーループ → /skill axiom-display-performance

  • ProMotion(120Hz)対応デバイスでアプリが 60fps に固定される
  • MTKView または CADisplayLink の設定
  • 可変リフレッシュレートの最適化
  • システムによる制限(低電力モード、フレームレート制限、熱、適応型電力)
  • フレーム予算の計算(120Hz では 8.33ms)
  • 実際のフレームレートと報告されたフレームレートの測定
RealityKit(ゲーム以外の 3D コンテンツ)

ゲーム以外の SwiftUI アプリで 3D コンテンツを扱う場合、AR エクスペリエンスや空間コンピューティングを行う場合は、RealityKit スキルを使用してください。ゲーム固有の RealityKit パターンには、代わりに ios-games ルーターを使用してください。

アーキテクチャ、ECS、ベストプラクティス → /skill axiom-realitykit

  • Entity-Component-System アーキテクチャ
  • SwiftUI との統合:RealityView、Model3D、アタッチメント
  • iOS での AR:AnchorEntity の種類、SpatialTrackingSession
  • マテリアル、物理演算、インタラクション
  • パフォーマンスの最適化

API リファレンス → /skill axiom-realitykit-ref

  • コンポーネントの完全なカタログ
  • RealityView と Model3D の API
  • マテリアルシステム(PBR、Unlit、Occlusion、Custom)
  • RealityRenderer(Metal との統合)

トラブルシューティング → /skill axiom-realitykit-diag

  • エンティティが表示されない、アンカーがトラッキングされない
  • ジェスチャーに反応しない、パフォーマンスの問題
  • マテリアルの問題、物理演算の問題

判断ツリー

  1. 変換レイヤーを使うか、ネイティブに書き換えるか? → metal-migration
  2. コードを Metal に移植/変換する? → metal-migration
  3. API リファレンス/シェーダー変換表が必要? → metal-migration-ref
  4. MTKView/レンダーパイプラインを設定する? → metal-migration-ref
  5. 移植後に問題が発生した(黒い画面、色の誤り)? → metal-migration-diag
  6. ProMotion 対応デバイスで 60fps に固定される? → display-performance
  7. CADisplayLink/可変リフレッシュレートを扱う? → display-performance
  8. フレームレートが期待どおりでない? → display-performance
  9. SwiftUI で 3D モデルを表示する? → axiom-realitykit
  10. AR エクスペリエンスを構築する? → axiom-realitykit
  11. RealityView または Model3D を設定する? → axiom-realitykit-ref
  12. 3D コンテンツが表示されない、またはトラッキングされない? → axiom-realitykit-diag
  13. RealityKit コンテンツを Metal でカスタムレンダリングする? → axiom-realitykit-ref(RealityRenderer)
  14. 3D ゲームを構築する? → 代わりに ios-games ルーターを使用してください

アンチ・合理化

考え実際
「シェーダーを1行ずつ翻訳すればいいだけ」GLSL→MSLには型、座標、精度の違いがあります。metal-migration-refには変換表があります。
「MetalANGLEがすべて処理してくれる」翻訳レイヤーには、本番環境で使うには重大な制限があります。metal-migrationでトレードオフを評価できます。
「ただの黒い画面だから、たぶん単純なバグだろう」黒い画面の原因は6種類あります。metal-migration-diagなら、30分以上かかる診断を5分で行えます。
「アプリは60fpsで動いているから問題ない」ProMotion対応デバイスは120Hzをサポートしています。display-performanceで適切なフレームレートを設定できます。
「3DモデルにはSceneKitを使えばいいだけ」SceneKitはソフト非推奨です。最新の方法はRealityViewとModel3Dです。axiom-realitykitではSwiftUIとの統合を解説しています。
「3Dモデルが1つだけならECSは必要ない」Model3DならECSを一切使わずにモデルを1つ表示できます。RealityViewは複雑なシーンにも対応できます。axiom-realitykitでは両方の方法を解説しています。

重要なパターン

metal-migration:

  • 手早くデモを作るには翻訳レイヤー(MetalANGLE)を使用
  • 本番環境向けにはネイティブMetalに書き換え
  • 状態管理の違い(GLはステートフル、Metalは明示的)
  • 座標系に関する注意点(Y反転、NDCの違い)

metal-migration-ref:

  • シェーダーの型の完全な対応表
  • API相当機能の一覧表
  • MTKViewとCAMetalLayerの選択
  • レンダーパイプラインのセットアップパターン

metal-migration-diag:

  • GPU Frame Captureのワークフロー(推測に30分以上かける代わりに2~5分)
  • 変数を調べるためのシェーダーデバッガー
  • APIの誤用を検出するMetal検証レイヤー
  • パフォーマンス低下の診断

display-performance:

  • MTKViewのデフォルトは60fps(preferredFramesPerSecond = 120の設定が必要)
  • 明示的なフレームレート制御にはCADisplayLinkのpreferredFrameRateRangeを使用
  • システムによる制限:低電力モード、フレームレート制限、熱制限、Adaptive Power(iOS 26)
  • 120Hzのフレーム予算は8.33ms
  • UIScreen.maximumFramesPerSecondの値は当てになりません。正しい値はCADisplayLinkで確認できます。

axiom-realitykit(ゲーム以外の3D):

  • RealityViewのmake/updateクロージャーパターン
  • シンプルなモデル表示にはModel3D
  • AnchorEntityによるARアンカリング
  • マテリアルの選択(SimpleMaterial、PBR、Occlusion)

axiom-realitykit-ref(API):

  • RealityKitコンテンツをカスタムMetalでレンダリングするRealityRenderer
  • マテリアルプロパティの完全なリファレンス
  • RealityViewのジェスチャー統合

呼び出し例

ユーザー:「MetalANGLEを使うべきですか、それともネイティブMetalに書き換えるべきですか?」 → 呼び出し:/skill axiom-metal-migration

ユーザー:「projectMをOpenGL ESからiOSに移植しています」 → 呼び出し:/skill axiom-metal-migration

ユーザー:「このGLSLシェーダーをMetalに変換するにはどうすればよいですか?」 → 呼び出し:/skill axiom-metal-migration-ref

ユーザー:「MTKViewを初めてセットアップしています」 → 呼び出し:/skill axiom-metal-migration-ref

ユーザー:「移植したアプリに黒い画面が表示されます」 → 呼び出し:/skill axiom-metal-migration-diag

ユーザー:「Metalへの移植後、パフォーマンスが低下しました」 → 呼び出し:/skill axiom-metal-migration-diag

ユーザー:「iPhone Proでアプリが60fpsから上がりません」 → 呼び出し:/skill axiom-display-performance

ユーザー:「CADisplayLinkを120Hzに設定するにはどうすればよいですか?」 → 呼び出し:/skill axiom-display-performance

ユーザー:「MetalアプリでProMotionが機能しません」 → 呼び出し:/skill axiom-display-performance

ユーザー:「SwiftUIアプリに3Dモデルを表示するにはどうすればよいですか?」 → 呼び出し:/skill axiom-realitykit

ユーザー:「USDZモデルを表示したいです」 → 呼び出し:/skill axiom-realitykit

ユーザー:「RealityViewをセットアップするにはどうすればよいですか?」 → 呼び出し:/skill axiom-realitykit-ref

ユーザー:「RealityViewに3Dモデルが表示されません」 → 呼び出し:/skill axiom-realitykit-diag

ユーザー:「RealityRendererをMetalと一緒に使うにはどうすればよいですか?」 → 呼び出し:/skill axiom-realitykit-ref

ユーザー:「アプリにARを追加したいです」 → 呼び出し:/skill axiom-realitykit

コメント