このページの本文へ

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のシーンエディタで開いた例を示します。

Xcodeに内蔵されたシーンエディタで、あるシーンファイルを開いた状態です。床を表す平面の上にテーブルの3Dオブジェクトが乗っています。その上方には黄色いボールのような光源が配置され、少し離れた位置に、テーブルの方を向いたカメラがあるのがわかります

 大きな水平面で表された床の上にテーブルというオブジェクトが配置されていて、その上のちょっとずれた位置に光源が配置されています。また、それを少し離れた位置に置かれたカメラで撮影していることも見て取れます。単純ながら、これがシーンの典型例です。

 今回はまだそこまで話が進みませんが、シーンの構成要素は、時間の経過とともに変化(変形)したり移動したりすることもできます。その場合には、時間軸も含めた4次元の空間を考える必要があるでしょう。

この連載の記事

週間ランキングTOP5

ASCII倶楽部会員によく見られてる記事はコレだ!

ASCII倶楽部の新着記事

会員専用動画の紹介も!