昨日、共著で執筆したiOSの技術書「iOS 11 Programming」の販売が開始されました!
私は ARKit と Metal の章の執筆を担当しました。
7月頭のクラウドファンディング成立を機に執筆を開始し、脱稿まで約4ヶ月。技術書の執筆期間としては長くはないですが、がんばりました。基本的に週末はほぼ執筆、有休は使い果たしましたし、どこかに出かけてもずっと執筆してました。
(こういう箱に入って届きます。装丁カッコイイです)
本記事では自分の担当章を中心に、「iOS 11 Programming」を紹介させていただきます。
第2章: ARKit
ARKitは、ちょっと試すだけなら超簡単です。APIはシンプルだし、Xcodeのテンプレートからサクッと動くものがつくれます。
しかしまた、ものすごく奥深くもあります。レンダリングはSceneKitやMetalと組み合わせられるので、これだけで3Dプログラミングのほぼあらゆるテクニックが使えるということになりますし、カメラからの生の入力データ`CVPixelBuffer`にもアクセスできるので、Core Image, Core ML, Vision, OpenCV, GPUImage, etc…と組み合わせて、シーケンシャルな画像を入力とするあらゆるテクニックを駆使できるということにもなります。ARKitが検出している特徴点データにもアクセスできます。
そんな手軽さも奥深さも兼ね備えるARKit、ネット上ではiOS 11の正式リリースを待たずして多くのデモが公開され、開発者の間だけではなく一般ユーザーの間でも話題になっていました。
(ARKitで巻尺のように実寸を測るデモ動画)
本章では、そういったARKitの「超簡単な導入」から始めて、最終的にはネットで話題になっていたようなアイデアを実装できるようになるところまでをカバーするように構成しました。
- 2.1はじめに
- 2.2ARKit入門その1 - 最小実装で体験してみる
- 2.3ARKit入門その2 - 水平面を検出する
- 2.4ARKit入門その3 - 検出した水平面に仮想オブジェクトを置く
- 2.5ARKit開発に必須の機能
- 2.6特徴点(Feature Points)を利用する
- 2.7AR空間におけるインタラクションを実現する
- 2.8アプリケーション実装例1: 現実空間の長さを測る
- 2.9アプリケーション実装例2: 空中に絵や文字を描く
- 2.10アプリケーション実装例3: Core ML + Vision + ARKit
- 2.11Metal + ARKit
最初の「ARKit入門」では、はじめの一歩として、最小実装でARKitを体験します。実にシンプルな実装で強力なAR機能が利用できることを実感していただけることでしょう。
その後は平面を検出する方法、その平面に仮想オブジェクトを設置する方法、そしてその仮想オブジェクトとインタラクションできるようにする方法…と、読み進めるにつれて「作りながら」引き出しが増えていき、最終的にはARKitを用いた巻尺(メジャー)や、空間に絵や文字を描くといったアプリケーションの実装ができるようになっています。
(本章で作成するサンプル)
ARKitのAPIはシンプルとはいえ、リファレンスだけから実装方法を汲み取るのは難しい部分もあります。またAppleのサンプルは動かして試してみたり、ちょっと改変してみたりして用いる分にはいいですが、実装内容は結構複雑で初心者には意図がわかりにくいものになっている面があります。「ARKitには興味があるけどなかなか手を動かせていない」「サンプルを動かしただけで止まっている。どこから始めていいかわからない」といった方には、本章は合っているかなと思います。
一部だけですが、PEASKの本書のページでサンプルPDFを読めるので、気になった方はぜひ試し読みを。
第13章: Metal
クラウドファンディング当初は「Metal 2」と題されており、iOS 11のMetalの新機能の紹介を中心とするような章タイトルでしたが、そもそもほとんどのiOSエンジニアがMetalのAPIを自分でたたいて何かを書いたことがないであろう中で新機能についても仕方がないのでは・・・と考え、がっつりMetalの基礎から書きました。
- 13.1はじめに
- 13.2Metalの概要
- 13.3Metalの基礎
- 13.4MetalKit
- 13.5Metal入門その1 - 画像を描画する
- 13.6Metal入門その2 - シェーダを利用する
- 13.7Metal入門その3 - シェーダでテクスチャを描画する
- 13.8ARKit+Metalその1 - マテリアルをMetalで描画する
- 13.9ARKit+Metalその2 - MetalによるARKitのカスタムレンダリング
- 13.10Metal 2
- 13.11Metalを動作させるためのハードウェア要件
正直なところMetal 2の機能紹介は多くはありません。なので、従来のMetalについて熟知し、iOS 11での変更点を中心に知りたい方には物足りないかもしれません。
しかし2017年11月現在、Metalについての日本語でのまとまった情報はこれが唯一かと思います。そして、OpenGLやDirectXでGPUに近いレイヤでのグラフィックスプログラミングに親しんで「いない」人達にはMetalはかなりとっつきにくいと思うのですが、そういう方達にとってのわかりやすさにおいては英語の情報ソース含めても随一なのではないかなと勝手に自負しております。
なぜなら、他のMetalについての書籍はそういう方面(グラフィックスまわり)に詳しい方達が書いていて、本書はそのあたりにほとんど知見がなく、四苦八苦しながら勉強した僕が書いたから(胸を張って言うことではないですが)。「グラフィックスプログラミングの達人による解説」ではありませんが、同じ目線で苦労した人による「わからないところがわかる」解説にはなってるのではないかなと。
具体的には「Metalの基礎」「入門その1〜その3」。ここは、新しい事項が一気にブワーッと出てこないように、かなり苦労して解説する内容を精査し、順序を考えました。ブリットコマンドエンコーダから解説するMetalの書籍(記事も含め)はあんまりないんじゃないかなと。普通はレンダーコマンドエンコーダから始めることが多いのですが、シェーダを使うと「初心者にとってのおまじない」が爆発的に増えるのです。
そして、それでも「新しい概念」はたくさん出てくるので、本書ではそのへんを「なにをやっているのか」「なぜこの手順が必要なのか」ということがわかるように解説して、納得感を得ながら前に進められるように書いています。
堤さんのMetalの章が端的に言って神
— みつよし (@vespid) 2017年11月7日
なぜなんのために置かれているコードなのかわかるようになる
(クラウドファンディング版を読んだ方からの声)
(iOSDC 2017にてMetalについて「興味ない人向けに」解説しました。『まったくMetalさわったことないけどわかった』という感想を多くいただきました)
PEASKの本書のページのサンプルPDFは他の章は基本的に冒頭2ページの公開となっていますが、Metalの章は僕個人の希望で5ページ読めるようにしていただいてます。Metalが気になる方はぜひお試しください。
全体のPR
ここから本書全体の話。まず、各執筆陣の素晴らしさと、その担当章の組み合わせの妙については以前に書いた記事をご参照ください。
各章のご紹介は著者様ご自身での記事にお任せしつつ、ここで僕が声を大にして言いたいことは、
本書はiOS 12, 13, 14...が登場しても価値を持ち続ける
ということです。
なぜかというと、多くの章で、他の書籍には載っていない、あるいはググってもまとまった情報は見つかりづらい内容について解説しているからです。
たとえばHomeKitの章。長らく謎に包まれていたHomeKit、対応デバイスもなかなか登場しなかった当然それについて書かれた書籍もありませんでした。そしてポツポツとデバイスが出揃ってきた今、満を持しての所さんによる56ページに及ぶ入門〜実践の解説!他の章に用がなくてもHomeKitに興味がある人はこの本はずっと「買い」です。
岸川さんによるSiriKitの章も、以前からあるフレームワークでありつつ「動作のしくみ」から解説されていますし、僕の書いたMetalの章も新機能だけじゃなくて基礎から解説しています。
Core ML、Core NFC、PDF Kit、MusicKit、ARKitといった新フレームワーク、Drag and Drop等の新機能も、まとまった解説は現時点では(そして恐らく当面の間)本書でしか得られないのは同様でしょう*1。
しかも、著書やカンファレンスでの講演に定評のある著者陣による執筆です。たまーに見かける、APIリファレンスを翻訳しただけのような、あるいはさわりをちょろっと解説しただけみたいな章はひとつもありません。それぞれが興味深く読めて、ちゃんと頭に入ってきて、実際の現場で役立つように各著者によって噛み砕かれ、再構成されています。
ひさびさに出た「非入門者向け」の「iOS SDK解説書」*2にして、かなりの良書では、と思います。
謝辞
ARKit、Metalの章ともに、同僚の登本さんにチェックしていただきました。というかそもそも(ARKitで大いに必要となる)3Dプログラミングの基礎は彼から教えてもらいました。またMetalの章は後藤氏にもチェックしていただきました。Metalのレビューをお願いできる人はなかなかいないので非常に助かりました。改めてお礼を申し上げます。
また非常に精密な校正をしてくださった加藤さん、このお話をくれて、完成まで導いてくれたPEAKSの永野さん、共著者のみなさま、クラウドファンディングで購入してくださったみなさま、アーリーアクセスでコメントいただいたみなさま、どうもありがとうございました!
そして本書について知らなかったけどちょっと気になってきた、というみなさま。本書はPEAKSのサイトで購入可能です:
何卒よろしくお願いいたします。