iOS/macOSのGPUインターフェース、Metalについて書かれた書籍は、英語だと下記2冊がありますが、
2018年9月現在、まだこれらの日本語版は出ていません。Appleのドキュメントも、Metalに関するものは、まだ日本語化されたものはありません。
個人出版ではありますが、日本語では次に紹介する「Metal入門」があります。日本語初のMetal解説書であるとともに、自著なので手間味噌にはなりますが、評判も上々です。
「Metal入門」の紹介
OpenGLやDirectXといった他の低レベルグラフィックスAPIを扱った経験がない開発者にとって、Metalは一歩目のハードルが一番高いのではないかと思いますが、筆者もそんなGPUプログラミング初心者のひとりで、四苦八苦しながら最初の一歩目を乗り越えました。 本書では、そんな「非」熟練者である筆者だからこその視点から、Metalをかみくだいて解説しています。
全128ページ。iOS 10.3, Xcode 9.3, Swift 4.1対応。
個人で出版しており、Boothというサイトで電子版(PDF)を販売しております。
サンプルコードはGitHubよりダウンロード可能です。
「Metal入門」の目次
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によるARKitのカスタムレンダリング
15章 Core Video × Metal
- 15.1 Metalでリアルタイム動画処理
「Metal入門」の評判
ニッチな書籍ですが、読んだ方には好評をいただいております。
「Metal入門」は入門書とは思えないほどのボリュームと内容です。自分でアプリを作っていて描画をもっとGPUにやらせたい!と思う事が多々あるので勉強してみたいと思っています。まだ読み始めたばかりですが、 ここまで初心者にも分かりやすくMetalを解説する本は世界中探してもなかなかないのでは。
1章2章を読むだけでもかなり価値があると思います。 GPUとCPUが、iPhoneの中でどうなっているのかという全体感を掴めただけでも大きな収穫になりました!
このボリュームとわかりやすさで1500円!
Metalに興味ある人全員必読では
Metal入門ざっと読了。
— nsʇ‾ɐʞ‾ɐʇ (@ta_ka_tsu) 2018年4月29日
まだSceneKitとMetalの連携の部分など理解しきれてない部分もあるけど、このあたりはサンプルコード弄りながら理解していこう。
同人誌ながらMetalに関して一通り網羅されてる良書。はっきりいって安い。
ちゃんとMetal入門できた気がする!
(今まで適当に書いてたけど意味分かって書けてきた気がする)
「Metal入門」読みながら遊んでたら、目がしぱしぱするやつできた。寝よ。 pic.twitter.com/kT42tsTgnL
— 3toshu (@3toshu) 2018年9月5日
シェーダープログラミングに興味を持つ事があって、そういえばいつかの技術書典でMetal入門とかいうメタリカロゴ風の表紙のカッコいい本あったなと思い出し読んだら面白すぎた。Processingやめます。
— Ibanez RGIX27FESM (@ohataken) 2018年9月2日
Metal入門を読み始めて、ちょっとMetalについてわかってきた気になってきたhttps://t.co/76a9heNGz2
— へんてこ@MagicaVoxel本発売中 (@henteko07) 2018年9月2日
日本語で読める書籍としてはかなり貴重で分かりやすいです。これからMetal触る方はぜひに https://t.co/tXl5l4UTxz
— noppe(俺コン/技術書典) (@noppefoxwolf) 2018年9月2日
Metalについての日本語の書籍て中々無かったから有り難い。OpenGLの非推奨を機にMetalを勉強する人に十分にオススメできる。しかも安い
— モーリー (@cloud_gate0125) 2018年6月17日
Metal入門 | shu223 https://t.co/IwSxFKW5ey #booth_pm
「iOS 11 Programming」のMetalの章の紹介
iOS 11 Programmingという本にもMetalについて基礎から解説した章があります。Metal以外の他のトピックにも興味がある方はこちらの方がいいかもしれません。
- 第1章 iOS 11 概要
- 第2章 ARKit
- 第3章 Core ML
- 第4章 Swift 4の新機能とアップデート
- 第5章 Xcode 9 の新機能
- 第6章 Drag and Drop
- 第7章 FilesとDocument Based Application
- 第8章 レイアウト関連の新機能及び変更点
- 第9章 Core NFC
- 第10章 PDF Kit
- 第11章 SiriKit
- 第12章 HomeKit入門とiOS 11のアップデート
- 第13章 Metal
- 第14章 Audio関連アップデート
PEAKSのサイトにて電子書籍・紙の書籍ともに販売されています。
- 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川克己,所 友太,永野 哲久,加藤 寛人,
- 発行日:2017年11月16日
- 対応フォーマット:製本版,PDF
- PEAKSで購入する
書籍のタイトルにはiOS 11とありますが、MetalについてはiOS 11で入った新機能の紹介だけではなくて、基礎からじっくり解説しています。Metalの章だけで37ページもあります。
「iOS 11 Programming」のMetalの章の目次
Metalの章の目次です。
- 13.1 はじめに
- 13.2 Metalの概要
- 13.3 Metalの基礎
- 13.4 MetalKit
- 13.5 Metal入門その1 - 画像を描画する
- 13.6 Metal入門その2 - シェーダを利用する
- 13.7 Metal入門その3 - シェーダでテクスチャを描画する
- 13.8 ARKit+Metalその1 - マテリアルをMetalで描画する
- 13.9 ARKit+Metalその2 - MetalによるARKitのカスタムレンダリング
- 13.10 Metal 2
- 13.11 Metalを動作させるためのハードウェア要件
Metalは「画像を描画する」というシンプルなことをやるにも手順が多く、(1年前の僕のような)グラフィックスプログラミング初心者は混乱してしまいがちなので、「Metalの基礎」「入門その1~その3」では、新しい事項が一気に出てこないよう、かなり苦労して解説する内容を精査し、順序を考えました。
そして、それでも「新しい概念」はたくさん出てくるので、本書ではそのへんを「なにをやっているのか」「なぜこの手順が必要なのか」ということがわかるように解説して、納得感を得ながら前に進められるようにしています。
堤さんのMetalの章が端的に言って神
— みつよし (@vespid) 2017年11月7日
なぜなんのために置かれているコードなのかわかるようになる
後半は、同書の第2章で解説しているARKitと組み合わせて用いる方法について、またiOS 11から利用できるようになった**"[Argument Buffers]"**について解説しています。
ちなみにArgument Buffersは、Metal利用アプリケーションのパフォーマンス改善に寄与するMetal 2の新機能です。
全体的なおすすめポイントは以下の記事にも書きました。
他の章も他著やネットではなかなか得られない濃い情報が詰まっているので、気になった方はぜひサンプルPDFもあるので見てみてください。
おまけ: Metalについて日本語で解説した動画
本書の執筆の真っ最中、iOSDC 2017にてMetalについて「興味ない人向けに」解説したときの動画です。『まったくMetalさわったことないけどわかった』という感想を多くいただきました。
— kenta.nakai (@urouro_n) 2017年9月17日
堤さんのトークでMetalがだいぶ身近になった!ちゃんと勉強してみたい #iosdc #b
— Yuichi Kobayashi (@imk2o) 2017年9月17日
Metal簡単なのではという気持ちになってきた #iosdc #b
— setoh (@seto_hi) 2017年9月17日
-
私も購入しました。2015年に出た書籍なのでサンプルコードが少し古いところもありますが、Metalについてひと通り解説されており、良書だと思います。ただし通読はまだしてなくて、Appleの解説がよくわからないときの副読本的に使用しています。 ↩