【よくわかる3Dスキャン講座 vol.3】3DスキャンデータのUnityへのインポートについて
前回はiPhoneと3Dスキャンアプリ(Scaniverse)を使って、3Dスキャンデータを測定する手順についてご紹介しました。
今回のテーマはデータの二次利用についてです。データの閲覧や簡易的な編集作業はScaniverseでも可能ですが、3Dデータを使ってゲームやアニメーションなどのコンテンツを作成したい時には、Unity(ゲーム開発エンジン)を使うのが一般的です。
そこでScaniverseで測定した3DスキャンデータのUnityへのインポート手順についてキャプション画像を使いながら、わかりやすく紹介したいと思います。
事前準備
Unityのダウンロードおよびインストールについてはこちらをご参考ください。
Unity Hubで作成した新規プロジェクトを起動すると以下のような画面が表示されます。ここで見やすさのため、赤枠内の設定を変えて画面配置を変更します。
画面を構成するウィンドウの名称と役割は以下の通りです。
Scene: 作成中の3Dビュー
Game: シーンのカメラを通して描画されたゲームシミュレーションのビュー
Hierarchy: Sceneに配置しているオブジェクトの一覧
Project: プロジェクトに属するアセットの一覧
Inspector: 選択中のオブジェクトやアセットのプロパティ
Scaniverseからのデータ移行
Scaniverseからobj形式でエクスポートしたzipファイルを解凍して、解凍したフォルダごとUnityのProjectウィンドウのAsset配下にドラック&ドロップします。この時、Projectウィンドウに水色のアイコンが作成されますが、この水色のアイコンをプレハブといいます。
次にプレハブをSceneウィンドウにドラック&ドロップするとScene上に座標軸が現れ、Hierarchyウィンドウにプレハブと同様の水色のアイコン(プレハブから作成されたオブジェクト)ができます。しかし肝心のスキャンデータが見当たりません...そんな時にはHierarchyウィンドウのアイコンをクリックして、Inspectorウィンドウに表示されるTransformでオブジェクトの座標を確認してみましょう。
どうやら、オブジェクト自体は配置されているものの、PositionとScaleに問題があったようです。そこでPositionを(X,Y,Z)=(0,0,0)、Scaleを(X,Y,Z)=(10,10,10)にそれぞれ変更してみます。
これでスキャンデータが目視で確認できる大きさになりました。でもまだ少し気になるところがあります。本来スキャンデータの中心と座標軸は一致しているべきですが、実際には座標軸はデータの中心よりかなり下の方に位置しています。
Pivotについて
この座標軸はPivotと呼ばれており、Pivotの原点はオブジェクトの移動や回転の中心点となります。今回、オブジェクト(スキャンデータ)とPivotの位置がずれてしまっているのは、スキャンデータに台座のデータが残っているためです。台座のデータ自体はScaniverseのCROP機能で削ったものの、Pivotの原点は台座を含んだ形で計算されており、対象物と台座の2つのデータの中心がPivotの原点となっています。
Pivotの原点とオブジェクトの中心がずれていると、オブジェクトの回転軸がずれてしまい、期待する動作とならないため、Unityにインポートする前にPivot位置を修正しておく必要があります。
Pivot位置の修正
Pivot位置の修正については幾つか方法がありますが、MeshMixerを使うのが簡単です。
MeshMixerにスキャンデータ(.obj)をインポートした直後の状態です。データと赤丸(Pivot座標の原点)がずれているのがわかると思います。
編集→位置合わせ→適用を押すだけで、データの中心と赤丸が揃います。
修正したデータをobj形式でエクスポート保存して、再度Unityで読み込んでみましょう。
今度はPivotとスキャンデータの中心が一致するようになりました。
まとめ
いかがでしたでしょうか?
Scaniverseで測定した3DスキャンデータをUnityへ取り込む際には、
PositionとScale
Pivot位置
が不揃いとなることがありますが、その際の対応方法について簡単に紹介させていただきました。
最後に少しだけ宣伝です。この度iPhoneのLidarスキャナーで撮影した3Dスキャンデータについて展示用のサイトを作成しましたので、よかったらぜひ覗いてみてください!