動画で紹介したNyRToolkitでUnityちゃんを動かすデモの作り方です。
以下の順で説明します。
- 開発環境の準備
- 機材とデータの準備
- プログラムの改造
- テスト
- NFTデータセットの作り方
開発環境の準備
NyARToolkitでUnityちゃんを表示するためのプロジェクトを準備します。
- 新しいプロジェクトを作る
- NyARToolkit for Unityをインポートする
- SDUnityChanをインポートする
新しいプロジェクトを作る
Unityを起動して、空のプロジェクトを作成してください。(Unityのバージョンは5.3.4以降を使います)
NyARToolkit for Unityをインポートする
NyARToolkit for Unityのパッケージをダウンロードして、Unityへドラック&ドロップしてインポートします。
https://github.com/nyatla/NyARToolkitUnity/releases
SDUnityChanをインポートする
SDUnityChanのパッケージをダウンロードしてインポートします。
http://unity-chan.com/download/releaseNote.php?id=SDUnityChan&lang=jp
2つのパッケージを導入すると、projectは以下のようになります。
機材とデータの準備
デモには、PC以外に以下の機材が必要になります。
- ウェブカメラ
- Unityライセンスロゴを印刷した紙
- UnityライセンスロゴのNFTデータセット
ウェブカメラ
1つ以上のカメラがPCに接続されている必要があります。USBカメラなどを接続しておいてください。カメラ内蔵のPCの場合は必要ありません。
Unityちゃんマークを印刷した紙とNFTデータセット
これらはUnityライセンスのロゴイメージから作ることもできますが、必要なデータをセットにしたzipファイルを用意したのでダウンロードしてください。
zipファイルの中にあるUCLlogo180mm.pdfをA4用紙に印刷してください。このpdfは、Unityライセンスロゴを幅18cmで印刷した用紙です。
NFTターゲットデータは、同じくzipファイルの中にある、unitychan.nftdatasetを使います。
元の画像UCLlogo.pngから自作する場合は、解説の最後にあるNFTデータセットの作り方を参照してください。
プログラムの改造
ここから本編です。先ほど準備した開発環境にあるsample/SimpleNftシーンを改造して、Unityちゃんを表示するようにします。
オブジェクトツリーの編集
SimpleNftシーンを開いてください。シーンのHierarchyタブにあるMarkerObjectを展開すると、Cubeオブジェクトがあるので削除します。
UnityChan/SD_unitychan/Prefabにある、SD_unitychan_humanoidのPrefabをMarkerObjectの子にドラック&ドロップします。MarkerObjectはNFT位置に合わせて姿勢変換行列が更新されるオブジェクトです。この下に配置したオブジェクトがマーカの上に表示されます。
NFTデータセットのコピー
unitychan-demodata.zipの中にあるunitychan.nftdatasetを使います。unitychan.nftdatasetは、幅180mmのUnityライセンスロゴ用のNFTデータセットファイルです。自作した場合は置き換えて進めてください。
まず初めに、ファイルの拡張子を.nftdatasetから.bytesに変更します。これはUnityでバイナリファイルを埋め込むために必要な手順です。
次に、unitychan.bytesをAssetのResourceディレクトリにドラッグ&ドロップしてコピーします。これでUnityからリソースファイルを読むことができるようになります。
Unityちゃんの設定
NyARToolkit for Unityでは、マーカのスケール値1が1mmとして扱われます。また、中心座標は画像の左下を起点にXY方向で表現されています。Unityちゃんの位置とサイズを調整して、ロゴマークの中央にUnityちゃんが立つように設定します。
また、SpringManagerが有効だとうまく動かないので、チェックを外します。
コードの編集
最後に、C#コードを2か所書き換えて完成です。SimpleNFTのディレクトリにある、NftCameraBehaviour.csをダブルクリックして、開きます。変更箇所は2か所です。
NFTデータセットの変更
NFTデータセットをinfinitycatから先ほど追加したunitychanに書き換えます。また、画像の横幅を160から180(単位はmm)に書き換えます。
Cubeを操作する行の削除
削除したCubeに関わる行を削除します。
テスト
完成したらUnityのプレイボタンを押してみてください。画面にカメラ映像がでたら、印刷しておいたUnityちゃんロゴを撮影してみましょう。ユニティライセンスのロゴはやや認識しにくいので、ロゴ全体が撮影されるようにカメラを構えてください。
NFTデータセットの作り方
認識対象にするNFTデータセットは、ツールを使って画像ファイルから作ることができます。
ツールはNyARToolkit for UnityのData/toolディレクトリにあるNftFileGenerator.jarです。エクスプローラなどでNyARToolkit for UnityのAssetsディレクトリを開くと以下のファイルが見つかります。
Windowsでは.batファイルをダブルクリックして下さい。その他のシステムでは、以下のようにターミナルから実行してください。
java -jar NftFileGenerator.jar
ツールが起動したら、元となる画像を読み込みます。メニューからImportを選択して、LoadImageを選択します。ダイアログが開くので画像をロードして、MakeFeatureSetを押してください。
データセットの生成には数分間かかります。しばらくお待ちください。出来上がると特徴点が表示されます。
出来上がったら、メニューからExport→Save NyARTK NFT dataset fileを選択してデータセットファイルを保存してください。(Save Feature Set Fileで保存したファイルはUnityでは使用できません。)
データセットのパラメタについて
- SourceDPI – 画像のDPI値を設定します。特に変更する必要はありません。
- Iset DPIs – ピラミッド画像の解像度セットです。AUTOはSourceDPIから自動で計算します。Customの場合は下段のカンマ区切りの数値の解像度セットを使います。特に変更する必要はありません。
- FSET parametor – トラッキング特徴点(赤□)を検出するパラメータです。Lvが大きいほど検出する特徴点が多くなります。特徴点が多すぎる/少なすぎる場合に調整してください。
入力できる画像サイズはVGAサイズ以下にしてください。大きな画像を使いたい場合は、事前に縮尺してから使用してください。
Unityロゴのようなコントラストの強い白黒画像はNFTデータセットにあまり向いていません。自然画等のほうが良いデータセットができる確率が高くなります。