https://gyazo.com/2e5257b7d23188715fea274c2d50aaf9

NYARtoolkitとは

ARToolkitをベースに開発された拡張現実ライブラリがNyARToolkitです。 ゲーム開発環境であるUnityで利用可能なNyARToolkit for Unityの導入方法を紹介します。 ここでは、Unityのバージョンは5.3.5NyARToolkit for Unity のバージョンは5.0.8を対象とします。 また、NyARToolkitのライセンスはLGPLv3**となっています(商用ライセンスもあるようです)。 このライセンスは、「著作権の表示」を条件に、商用利用や配布が認められています(詳細はWikipediaを参照)。

プロジェクトの作成

Unityで新しいプロジェクトを作成します。 ここでは、プロジェクト名を「ARPictureBook」としています。 また、ゲーム環境は「3D」を選択しておきます。

https://gyazo.com/9ae7841a8b5e60e29fa188d720233a19

次に、「NyARToolkit for Unity」のパッケージをインストールします。 パッケージは下記URLからダウンロードできます。

https://github.com/nyatla/NyARToolkitUnity/releases

ツールバーから[Assets]-[Import package]-[Custom package]をクリックして、 ダウンロードしたパッケージを選択します。 ファイルの読込み後に、ダイアログが表示されたら、 全てのファイルにチェックを入れた状態でimportをクリックしましょう。

https://gyazo.com/41c82ec0e5615956d15ab370e89d9df6

ファイルの取り込みが終わると、プロジェクトのAssetsには6つのフォルダが展開されます。 Assetとは、ゲームを構成する最小の構成単位のことです。 例えば、シーン、キャラクター、画像ファイル、音楽ファイルなどもAssetです。 ここでは、sampleフォルダに含まれるSimpleLiteを試しに実行してみましょう。

https://gyazo.com/437a91006f9cd595dfa6858abea68a7f

SimpleLiteを実行する前に下記の準備が必要です。 ウェブカメラは標準的なモノであれば問題ないと思われます。 また、マーカーはパッケージに付属しているMarkerHiro.pngを利用しますが、 NyARToolkit用のマーカーは、tarotaroorg氏が公開している オンラインのツールを利用して、自由に作成することも可能です。

  • ウェブカメラ(CMS-V30SETBKを使用)
  • マーカーが印刷された紙(resourceフォルダに含まれるMarkerHiro.pngを印刷します)

https://gyazo.com/db1012d7fb080f08837227f061cf9e59

準備が整ったら、画面上部にある再生ボタンをクリックします。 すると、ゲーム画面にカメラ映像が映し出されます。 このカメラにマーカーを印刷した紙を映すと、マーカー上に赤色の立方体(Cube)表示されることを確認してください。 これが、拡張現実と呼ばれる技術です。

https://gyazo.com/7689ddc54a3e6082d72b735f9615d670

https://gyazo.com/bc2e0ab988e7cd96ef7187864f8105e6

フォルダのコピー

Assetsフォルダに新規フォルダを作成し、SimpleLiteのフォルダに含まれる2つのファイルをコピーします(ARCameraBehaviorはC#のスクリプト、simpleLiteはシーンと呼ばれるファイルです)。 ここでは、C#スクリプトをARPictureCamera、シーンをARPictureSceneにファイル名を変更しておきます。 次に、ARPictureSceneをダブルクリックし、HierarchyのCameraをクリックします。 シーンに関連付けられたコンポーネントが表示されているので、 ARCameraBehaviorを削除(Remove Component)します。 さらに、Add Componentをクリックし、コピーしたARPictureCameraを選択しておきます。 これで、ARPictureCameraに記述したスクリプトが、ARPictureSceneに関連付けられます。

https://gyazo.com/c76c89590c52f16a808bb631bc4f078f

https://gyazo.com/bd71e3bde3b27e733bdc02e20cbad63a

しかし、このままではARPictureCameraがエラーとなり実行できません。 これは、変更したファイル名とスクリプトのクラス名が一致しないことが原因です。 そこで、ARPictureCameraのソースコードを表示し、 クラス宣言部にあるクラス名を、ARCameraBehaviorからARPictureCameraに修正し、エラーを取り除きましょう。 最後に、再生ボタンをクリックして、SimpleLiteと同様の実行結果になることを確認してください。

public class ARPictureCamera: MonoBehaviour

NyIDマーカー

NyARToolkitでは、JPGやPNGなどの一般的な画像以外にも、NyIDマーカーと呼ばれるマーカーを利用することができます。 NyIDマーカーはMODEL2とMODEL3の2種類有りますが、ここではMODEL2の1番のマーカーを利用してみます。

https://gyazo.com/9dbf5709c05d9131793f092f19eb085a

ARPictureCameraをクリックして、ソースコードを表示します。 デフォルトでは、Resroucesフォルダに含まれる”MarkerHiro.png”を、検出するマーカーとして設定しています。 ソースコードを確認すると、addARMaker()メソッドの引数として”MarkerHiro”が設定されていることが分かります。

mid=this._ms.addARMarker((Texture2D)(Resources.Load("MarkerHiro", typeof(Texture2D))),16,25,80);

そこで、上記のコードをコメントアウトし、下記のコードに置き換えます。 NyIDマーカーを利用するには、addNyIdMarker()メソッドを利用して、 引数にマーカーの番号と、マーカーの物理サイズをmm単位で指定します。 ここでは、マーカーの番号は1、マーカーの物理サイズは80[mm]としています。 再生ボタンをクリックして、SimpleLiteと同様の実行結果になることを確認してください。

mid = this._ms.addNyIdMarker(1, 80);

https://gyazo.com/648918e161ae1f0c13cfaf045845fd1f

球体(Sphere)オブジェクトの表示

デフォルトでは、マーカーが検出されると赤色の立方体(Cube)が表示されます。 これを、青色の球体(Sphere)に変更してみましょう。 Hierarchyで、[Create]-[3D Object]-[Sphere]を選択すると、新しいSphereオブジェクトが作成されます。 このSphereオブジェクトをドラッグして、MarkerObjectの直下に配置します。 このとき、デフォルトで設定されている、Cubeオブジェクトは削除しておきます。 再生ボタンをクリックすると、球体がマーカー上に表示されることを確認してください。

https://gyazo.com/e51508abab2945d56d01b07570934b6d

次に、球体に色や質感を与えてみましょう。 Assetsフォルダで、[Create]-[Material]を選択し、新規にマテリアルを作成します。 このマテリアルの名前をBlueに変更しておきます。 また、InspectorからAlbedoを選択し、マテリアルの色を青系に変えましょう(Albedoは太陽光を反射する割合のことだそうです)。

https://gyazo.com/cfbb905b17d5d87c7ffac15ee90bfc62

次に、SphereオブジェクトのMaterialsをクリックして、作成したBlueを選択しておきます。 再生ボタンをクリックすると、青色の球体がマーカー上に表示されることを確認してください。

https://gyazo.com/2466ea3a6aa95e741d6b227dd36abde9

https://gyazo.com/fb0e0e8b4ef3e3dbf0a9f2116f6fb5a4

UnityにNyARToolkitを導入する方法の説明は以上です。 次回はテクスチャを利用した画像の表示や、3Dオブジェクトの表示に挑戦してみます。

参考書籍