第2章 ARKit 堤 修一/@shu223
図2.17 認識結果のタグ付け
『ARKitはコアな処理のみを行い、実際の描画はSceneKitやSpriteKit、Metalが担当する』ということを本章の冒頭で述べました。Metalを用いたカスタムレンダリングについてはAppleからも"Displaying an AR Experience with Metal"注28)というドキュメントが公開されています。
しかしこのドキュメントでいう「Metalを用いたカスタムレンダリング」は、「SceneKitやSpriteKitを用いる"代わりに"、自前でMetalを用いてレンダリング処理を実装することもできる」という話で、つまりSceneKit/SpriteKitに相当する3D/2Dレンダリングエンジンを自作することを意味します。たとえばSceneKitでは実現できない機能やパフォーマンスを達成したいような場合には有効な選択肢ですが、実装の量も難度も非常に高くなってしまいます。
これとは別に、すべてをMetalで代替するのではなく、3D空間の扱いは基本的にSceneKitを利用し、シーン内ノードのマテリアルの描画にMetalを利用する、という選択肢もあります。
たとえば図2.18のような表現が可能です。この例ではARKitを用いて現実空間の水平面上に設置した仮想オブジェクト(のノードのマテリアル)を、Metalのシェーダを用いて描画しています。
図2.18 SCNNodeのマテリアルの描画にMetalを利用
もっとARらしく現実空間と仮想オブジェクトを融合させた図2.19のような表現も、Metalを用いることで実現できます。