axiom-ios-graphics について
iOS の GPU レンダリング、グラフィックス、3D 表示、描画パフォーマンスに取り組む開発者向けのルーティングスキルです。移行、API リファレンス、診断などの作業を、Metal、ディスプレイ性能、RealityKit の各スキルへ振り分けます。
主な機能
- 01Metal 移行とシェーダー作業の振り分け
- 02GPU 描画問題の診断案内
- 03ディスプレイとフレームレートの調整
- 04RealityKit と SwiftUI 3D 作業の振り分け
- 05設計・リファレンス・トラブル対応の区分
活用シーン
- 01OpenGL または DirectX から Metal への移行計画
- 02移行後の画面が黒い問題の調査
- 03フレームレートや ProMotion の問題の調査
- 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
- エンティティが表示されない、アンカーがトラッキングされない
- ジェスチャーに反応しない、パフォーマンスの問題
- マテリアルの問題、物理演算の問題
判断ツリー
- 変換レイヤーを使うか、ネイティブに書き換えるか? → metal-migration
- コードを Metal に移植/変換する? → metal-migration
- API リファレンス/シェーダー変換表が必要? → metal-migration-ref
- MTKView/レンダーパイプラインを設定する? → metal-migration-ref
- 移植後に問題が発生した(黒い画面、色の誤り)? → metal-migration-diag
- ProMotion 対応デバイスで 60fps に固定される? → display-performance
- CADisplayLink/可変リフレッシュレートを扱う? → display-performance
- フレームレートが期待どおりでない? → display-performance
- SwiftUI で 3D モデルを表示する? → axiom-realitykit
- AR エクスペリエンスを構築する? → axiom-realitykit
- RealityView または Model3D を設定する? → axiom-realitykit-ref
- 3D コンテンツが表示されない、またはトラッキングされない? → axiom-realitykit-diag
- RealityKit コンテンツを Metal でカスタムレンダリングする? → axiom-realitykit-ref(RealityRenderer)
- 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