Swift Playgroundsで学ぶiOSプログラミング 第96回
非現実の3D世界の部分を理解
SceneKitの基礎シーンビュー、シーン、ノードを理解する
2018年07月25日 17時00分更新
前回まで、3回にわたってARKitを使った「拡張現実」の基本的なプログラミングに取り組んできました。その中では、カメラで撮影する現実世界の映像に映る水平面を検出し、それに沿って非現実の3Dオブジェクトを配置してみました。それによって、拡張現実の基本的な機能を動かしてみることはできたものの、応用的なプログラムを作成できるようになるまでにはまだギャップがあると感じた人も少なくなかったでしょう。
そう感じられるのは、ARKitならではの現実世界の検出に関する部分ではなく、むしろそこに重ねて表示する3Dオブジェクトの方の扱いに慣れていないからだと思われます。これまでにも説明したとおり、ARKitでは、非現実の3D世界の部分については、従来からiOSに備わっていたSceneKitを利用しています。つまり、ARKitで3D世界を自由に操るためには、SceneKitの使いこなしが不可欠であるということになります。
今となっては意外に感じられるかもしれませんが、SceneKitは、iOSよりも2年も早くMac OS(macOS)に搭載されたのでした。具体的には、2012年に登場したMac OS X 10.7 Lionで初めて利用可能になりました。iOSでは、2014年のiOS 8から使えるようになっています。いずれにしても、iOSのフレームワークの中でも、もはや歴史のあるものの1つに数えられます。それだけに安定した技術となっています。
この連載では、これまでSceneKitを扱ってきませんでしたが、この機会に基本的な部分だけでも使えるようにしておきましょう。それによって、特にiOSに限らず一般的な3Dグラフィックスに対する理解も得られます。もちろん、iOS上でSceneKitを利用したゲームやARKitを利用したアプリを開発するためにも不可欠な予備知識となります。
今回は、SceneKitの基本中の基本ということで、「シーン」と「ノード」、そしてそれらを画面に表示するための「シーンビュー」の基礎を取り上げます。
シーンとは何か?
SceneKitを扱ううえで必要な最も基本的な理解は、その名前の由来ともなっているシーンについてのものです。日本語でも「シーン」という語は「映画のシーン」といった組み合わせでよく使います。SceneKitのシーンも、まさにそのシーンです。
例えば「その時の状況を映画の1シーンのようにはっきりと憶えている」というフレーズがあります。この「シーン」には、どこに何があって、誰がどこにいた、といったようなその場の人や物の配置だけでなく、その場の状況をどこか特定の場所から見た映像というニュアンスが含まれています。つまり、シーンを構成する重要な要素としてはカメラも含まれていることになります。それはSceneKitのシーンも同じです。さらに言えば、その状況の雰囲気を醸し出す光の具合も重要です。映画のシーンで言えば、明るかったのか、暗かったのか、どの方向からどのような光が差し込んでいたのかといった状態です。やはりSceneKitのシーンでも光源の設定が重要です。
以上のことから、シーンを構成する3大要素を挙げるとすれば、その場にある物体(床や地面、壁も含む)、その場を照らす光源、それを撮影するカメラということになります。もちろんそれらは同じ3次元空間内に配置されています。SceneKitのあるシーンをXcodeのシーンエディタで開いた例を示します。
大きな水平面で表された床の上にテーブルというオブジェクトが配置されていて、その上のちょっとずれた位置に光源が配置されています。また、それを少し離れた位置に置かれたカメラで撮影していることも見て取れます。単純ながら、これがシーンの典型例です。
今回はまだそこまで話が進みませんが、シーンの構成要素は、時間の経過とともに変化(変形)したり移動したりすることもできます。その場合には、時間軸も含めた4次元の空間を考える必要があるでしょう。
この連載の記事
- 第100回 SceneKitの物理現象シミュレーションとアニメーションをARKitに持ち込む
- 第99回 「物理学体」と「物理学場」を設定して物理現象をシミュレーション
- 第98回 SceneKitのノードに動きを加えるプログラム
- 第97回 いろいろな形のノードをシーンの中に配置する
- 第95回 現実世界の床にボールや自動車のモデルを配置する
- 第94回 ARKitを使って非現実世界との融合に備える
- 第93回 ARKitが使えるiPadを識別するプログラム
- 第92回 Swift Playgrounds 2.1での問題点をまとめて解消する
- 第91回 iPadの内蔵カメラで撮影した写真を認識するプログラム
- この連載の一覧へ