MetalBook
日本語初のMetal解説書「Metal入門」のサンプルコードです。
書籍の概要
iOS/macOSのGPUインターフェース、Metalの入門書です。 GPUを操って高度なグラフィックス処理や大規模な並列演算を行うことにはロマンがありますが、OpenGLやDirectXといった他の低レベルグラフィックスAPIを扱った経験がない開発者にとって、Metalは一歩目のハードルが一番高いのではないかと思います。筆者もそんなGPUプログラミング初心者のひとりで、四苦八苦しながら最初の一歩目を乗り越えました。 本書では、そんな「非」熟練者である筆者だからこその視点から、Metalをかみくだいて解説します。
全136ページ。iOS 17, Xcode 15, Swift 5対応。
書籍の目次
1章 Metal の概要
2章 Metal の基礎
- 2.1 Metalの「最初のハードル」
- 2.2 「背景にある概念」を理解する
- 2.3 Metalの基本クラスとプロトコル
- 2.4 MetalKit
3章 入門その1 - 画像を描画する
- 3.1 描画処理のためのセットアップを行う
- 3.2 画像をテクスチャとしてロードする
- 3.3 描画処理を実行する
4章 入門その2 - シェーダを利用する
- 4.1 Metalシェーダの基礎
- 4.2 「画面全体を一色に塗る」シェーダの実装
- 4.3 CPUプログラム側の実装
5章 入門その3 - シェーダでテクスチャを描画する
- 5.1 テクスチャを扱うシェーダの実装
- 5.2 テクスチャ座標データをシェーダに渡す
- 5.3 テクスチャをシェーダに渡す
- 5.4 ピクセルフォーマットを合わせる
6章 Metal のハードウェア要件
- 6.1 歴代iOSデバイスのMetalサポート状況
- 6.2
MTLFeatureSet
- 6.3 Metal非対応デバイスの判定
7章 GPGPU プログラミング入門
- 7.1 コンピュートシェーダ
- 7.2 スレッドとスレッドグループ
- 7.3 GPGPUの実装例
8章 MSL 入門
- 8.1 Metal のグラフィックスレンダリングパイプライン
- 8.2 .metalファイルと.metallibファイル
- 8.3 FunctionQualifier(関数修飾子)
- 8.4 AttributeQualifier(属性修飾子)
- 8.5 Address Space Qualifiers(アドレス空間修飾子)
- 8.6 型
- 8.7 GLSLをMSLに移植する
9章 Metal Performance Shaders
- 9.1 デバイスがMPSをサポートしているかを確認する
- 9.2 ガウシアンブラー
- 9.3
MPSUnaryImageKernel
を継承する他の画像処理カーネルクラス - 9.4 画像のリサイズ
- 9.5 画像の転置(行と列の入れ替え)
10章 Metal の最適化
- 10.1 スレッドグループサイズの最適化
- 10.2 ArgumentBuffers
11 章 Metal のデバッグ
- 11.1 GPUフレームキャプチャを有効にする
- 11.2 Xcode上でGPUの負荷を確認する
- 11.3 GPUフレームデバッガ
- 11.4 GPUフレームキャプチャをプログラムから制御
- 11.5 InstrumentsのMetalSystemTrace
- 11.6 ラベル
- 11.7 デバッググループ
- 11.8 GPUで利用中のメモリサイズを調べる
12 章 Core Image × Metal
- 12.1 Core ImageとMetalのシームレスな統合
- 12.2 Core Imageのフィルタ結果をMetalで描画する
- 12.3 CoreImageのカスタムフィルタをMetalで書く
- Metalでカーネルを書く利点
- MSLによるカスタムカーネルの実装
- Metalカスタムカーネルを利用するためのビルド設定
13 章 SceneKit × Metal
- 13.1 MetalでSceneKitのマテリアルを描画する
- 13.2 他のSceneKitとMetalの連携機能
14章 ARKit × Metal
- 14.1 マテリアルをMetalで描画する
- 14.2 Metalによるカスタムレンダリング
15章 Core Video × Metal
- 15.1 Metalでリアルタイム動画処理