NyARToolkit for UnityでUnityちゃんを動かす

[English]

動画で紹介したNyRToolkitでUnityちゃんを動かすデモの作り方です。


以下の順で説明します。

  • 開発環境の準備
  • 機材とデータの準備
  • プログラムの改造
  • テスト
  • NFTデータセットの作り方

開発環境の準備

NyARToolkitでUnityちゃんを表示するためのプロジェクトを準備します。

  1. 新しいプロジェクトを作る
  2. NyARToolkit for Unityをインポートする
  3. SDUnityChanをインポートする

新しいプロジェクトを作る

Unityを起動して、空のプロジェクトを作成してください。(Unityのバージョンは5.3.4以降を使います)

1

 

NyARToolkit for Unityをインポートする

NyARToolkit for Unityのパッケージをダウンロードして、Unityへドラック&ドロップしてインポートします。
https://github.com/nyatla/NyARToolkitUnity/releases

2

SDUnityChanをインポートする

SDUnityChanのパッケージをダウンロードしてインポートします。
http://unity-chan.com/download/releaseNote.php?id=SDUnityChan&lang=jp

3

 

2つのパッケージを導入すると、projectは以下のようになります。

6

 

機材とデータの準備

デモには、PC以外に以下の機材が必要になります。

  1. ウェブカメラ
  2. Unityライセンスロゴを印刷した紙
  3. UnityライセンスロゴのNFTデータセット

ウェブカメラ

1つ以上のカメラがPCに接続されている必要があります。USBカメラなどを接続しておいてください。カメラ内蔵のPCの場合は必要ありません。

Unityちゃんマークを印刷した紙とNFTデータセット

これらはUnityライセンスのロゴイメージから作ることもできますが、必要なデータをセットにしたzipファイルを用意したのでダウンロードしてください。

unitychan-demodata.zip

zipファイルの中にあるUCLlogo180mm.pdfをA4用紙に印刷してください。このpdfは、Unityライセンスロゴを幅18cmで印刷した用紙です。

NFTターゲットデータは、同じくzipファイルの中にある、unitychan.nftdatasetを使います。

元の画像UCLlogo.pngから自作する場合は、解説の最後にあるNFTデータセットの作り方を参照してください。

 

プログラムの改造

ここから本編です。先ほど準備した開発環境にあるsample/SimpleNftシーンを改造して、Unityちゃんを表示するようにします。

 

オブジェクトツリーの編集

SimpleNftシーンを開いてください。シーンのHierarchyタブにあるMarkerObjectを展開すると、Cubeオブジェクトがあるので削除します。

7

UnityChan/SD_unitychan/Prefabにある、SD_unitychan_humanoidのPrefabをMarkerObjectの子にドラック&ドロップします。MarkerObjectはNFT位置に合わせて姿勢変換行列が更新されるオブジェクトです。この下に配置したオブジェクトがマーカの上に表示されます。

9

NFTデータセットのコピー

unitychan-demodata.zipの中にあるunitychan.nftdatasetを使います。unitychan.nftdatasetは、幅180mmのUnityライセンスロゴ用のNFTデータセットファイルです。自作した場合は置き換えて進めてください。

まず初めに、ファイルの拡張子を.nftdatasetから.bytesに変更します。これはUnityでバイナリファイルを埋め込むために必要な手順です。

次に、unitychan.bytesをAssetのResourceディレクトリにドラッグ&ドロップしてコピーします。これでUnityからリソースファイルを読むことができるようになります。

17

Unityちゃんの設定

NyARToolkit for Unityでは、マーカのスケール値1が1mmとして扱われます。また、中心座標は画像の左下を起点にXY方向で表現されています。Unityちゃんの位置とサイズを調整して、ロゴマークの中央にUnityちゃんが立つように設定します。

また、SpringManagerが有効だとうまく動かないので、チェックを外します。

18

 

コードの編集

最後に、C#コードを2か所書き換えて完成です。SimpleNFTのディレクトリにある、NftCameraBehaviour.csをダブルクリックして、開きます。変更箇所は2か所です。

NFTデータセットの変更

NFTデータセットをinfinitycatから先ほど追加したunitychanに書き換えます。また、画像の横幅を160から180(単位はmm)に書き換えます。

10

Cubeを操作する行の削除

削除したCubeに関わる行を削除します。

11

 

テスト

完成したらUnityのプレイボタンを押してみてください。画面にカメラ映像がでたら、印刷しておいたUnityちゃんロゴを撮影してみましょう。ユニティライセンスのロゴはやや認識しにくいので、ロゴ全体が撮影されるようにカメラを構えてください。

19

 

NFTデータセットの作り方

認識対象にするNFTデータセットは、ツールを使って画像ファイルから作ることができます。

ツールはNyARToolkit for UnityのData/toolディレクトリにあるNftFileGenerator.jarです。エクスプローラなどでNyARToolkit for UnityのAssetsディレクトリを開くと以下のファイルが見つかります。12

Windowsでは.batファイルをダブルクリックして下さい。その他のシステムでは、以下のようにターミナルから実行してください。

java -jar NftFileGenerator.jar

ツールが起動したら、元となる画像を読み込みます。メニューからImportを選択して、LoadImageを選択します。ダイアログが開くので画像をロードして、MakeFeatureSetを押してください。

14

データセットの生成には数分間かかります。しばらくお待ちください。出来上がると特徴点が表示されます。

15

出来上がったら、メニューからExport→Save NyARTK NFT dataset fileを選択してデータセットファイルを保存してください。(Save Feature Set Fileで保存したファイルはUnityでは使用できません。)

 

データセットのパラメタについて

  • SourceDPI – 画像のDPI値を設定します。特に変更する必要はありません。
  • Iset DPIs – ピラミッド画像の解像度セットです。AUTOはSourceDPIから自動で計算します。Customの場合は下段のカンマ区切りの数値の解像度セットを使います。特に変更する必要はありません。
  • FSET parametor – トラッキング特徴点(赤□)を検出するパラメータです。Lvが大きいほど検出する特徴点が多くなります。特徴点が多すぎる/少なすぎる場合に調整してください。

入力できる画像サイズはVGAサイズ以下にしてください。大きな画像を使いたい場合は、事前に縮尺してから使用してください。

Unityロゴのようなコントラストの強い白黒画像はNFTデータセットにあまり向いていません。自然画等のほうが良いデータセットができる確率が高くなります。