MacOSX
iOS
OpenGL
Metal
Swift
MetalDay 10

Metalを基礎から日本語で学べる書籍

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)を販売しております。

Screen Shot 2018-06-06 at 12.35.08.png

サンプルコードは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入門できた気がする!
(今まで適当に書いてたけど意味分かって書けてきた気がする)

「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のサイトにて電子書籍・紙の書籍ともに販売されています。

iOS 11 Programming

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川克己,所 友太,永野 哲久,加藤 寛人,
  • 発行日: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」では、新しい事項が一気に出てこないよう、かなり苦労して解説する内容を精査し、順序を考えました。

そして、それでも「新しい概念」はたくさん出てくるので、本書ではそのへんを「なにをやっているのか」「なぜこの手順が必要なのか」ということがわかるように解説して、納得感を得ながら前に進められるようにしています。

後半は、同書の第2章で解説しているARKitと組み合わせて用いる方法について、またiOS 11から利用できるようになった"[Argument Buffers]"について解説しています。

ちなみにArgument Buffersは、Metal利用アプリケーションのパフォーマンス改善に寄与するMetal 2の新機能です。

全体的なおすすめポイントは以下の記事にも書きました。

他の章も他著やネットではなかなか得られない濃い情報が詰まっているので、気になった方はぜひサンプルPDFもあるので見てみてください。

おまけ: Metalについて日本語で解説した動画

本書の執筆の真っ最中、iOSDC 2017にてMetalについて「興味ない人向けに」解説したときの動画です。『まったくMetalさわったことないけどわかった』という感想を多くいただきました。


  1. 私も購入しました。2015年に出た書籍なのでサンプルコードが少し古いところもありますが、Metalについてひと通り解説されており、良書だと思います。ただし通読はまだしてなくて、Appleの解説がよくわからないときの副読本的に使用しています。