TECHブログ


小型3Dスキャナー作成したモデルをWebブラウザのビューアーで確認できるようにする

はじめに

メタバースが注目されてきて、仮想空間に3Dモデルを配置するという機会が増えてきました。業務でVRやMRのアプリケーションを作成していますが、今までは必要最小限の3Dモデルを配置できればよかったのが、ビルの一室や店舗などを丸ごと仮想空間に再現したいといった要望が増えています。そうなると、部屋全体だけでなく小物の3Dモデルも多く必要になってくるのですが、弊社では3Dモデル制作は行っていないため、通常はモデル制作を依頼しています。せめてメインのモデル以外だけでも手軽にモデルを用意できないかということで、3Dスキャナーを利用してのモデル作成を試しました。
また、3Dモデルはリアルタイムコンテンツで使用する想定なので、スキャンしたデータをUnityで作成したWebGLの3Dモデルビューアーで確認します。

使用する3Dスキャナーについて

今回は、3Dスキャナーでクラウドファンディングを実施して注目を集めていた、Revopointの「POP2 3Dスキャナー」を使用することにしました。

本体は3Dスキャナーとしてはかなり小型の部類で、Webカメラより一回り大きいくらいのサイズです。
赤外線センサーからレーザー光を照射し対象物を認識するのはiPhoneにも搭載されているLiDARセンサーと同様ですが、より3D形状をスキャンすることに特化したデバイスになります。
同様の3Dスキャナーが最近いくつか登場していますが、以下のような理由が今回このデバイスを選んだ決め手になりました。

  • 小型で持ち運びがしやすく、値段が安い
  • 小型の3Dスキャナの中では精度が高く、自動で高発色のテクスチャも作成してくれる
  • スキャンから3Dデータの出力までの一連のプロセスが簡単にできる専用アプリがある

スキャン実施

今回、スキャンの対象物として土偶を使用させて頂きました。土偶は表面に凹凸が多く形状が特徴的で、素材が土なので反射してしまうことも無く、比較的綺麗にスキャンすることができる被写体になります。
スキャンの際の操作はかなり簡単で、専用アプリでスキャン済みの箇所を確認しながら、対象物と適切な距離を保ってスキャンをしていくだけです。スキャン完了後のデータをポリゴン化してobjファイル出力するまでの一連の処理も、アプリが行ってくれます。専用アプリはPC(Windows/MAC)用とスマートフォン(Android/iOS)用がそれぞれ用意されているので、デバイスをどれに接続するかを決めて予めインストールしておきます。

操作自体は簡単と言っても、対象物に対して3Dスキャナーをかざして即スキャン開始というわけではなく、スキャンする前に準備が必要になります。対象物を配置するためにターンテーブルの上に置いたり、適切な明るさになるようにライトを設定したり、余計な映り込みを無くすために黒いシートを敷いたり、とスキャンをしやすい環境づくりをします。手で持ってスキャンしたい場合には、指がスキャンされないように黒い手袋をしたりといった工夫も必要になります。

使用した感想

  • 対象物の底をスキャンしたい場合、特徴点を捉えていれば横に倒しても対象物を認識し続けてくれるので楽
  • 特徴点が少ない対象物は、どの部分をスキャンしているか見失ってしまうため失敗しやすい
  • 一度にスキャンできる範囲はそれほど広くはないので、対象物が大きい場合は時間がかかる
  • かなり細かい箇所の凹凸までスキャンされるので、出力されたモデル形状の精度は高い
  • スマートフォン接続でのスキャンもできて便利だが、処理負荷が高い対象物の場合スキャン後の処理で失敗することがある
  • 出力されるテクスチャ画像は1ファイルなので、対象物が大きいと全体的に解像度が落ちる

実際にスキャンをしてみて、使い勝手の良い部分も悪い部分もありました。
他の赤外線センサーデバイスと同様に、黒い物や反射率の高いものをスキャンすることは苦手です。スプレーを吹き付けることでスキャンができるようになりますが、元の質感のままというわけにはいきません。被写体に特徴点が少ないとスキャン中に形状を見失ってしまいますが、マーカーシールを貼る方法で対処はできます。ただ、マーカーをどの位置に貼り付ければよいのか決めづらく、スキャンをしながらマーカー位置を調整するということを繰り返し試す必要がありました。
また、対象物が大きい場合は、スマートフォンに接続して手に持ってスキャンしたほうが扱いやすいのですが、スキャンデータが大きくなるため、スペックが高いPCと接続したほうが処理が速いです。データが大きいと処理しきれずに失敗する可能性もあるため、安定して使用するには高スペックなPCと接続して作業したほうが無難だという印象でした。
デバイスを使いこなすには一朝一夕では難しく、何度も試して慣れが必要です。とは言っても、これまで3Dスキャンはもっと高額で大がかりな機材を用意して行うものだったことを考えると、多少の準備が必要なことや気を付ける点があったとしても、ここまで気軽に3Dデータを作成できれば十分な機能を持っていると言えます。

3Dモデルデータの編集

今回POP2 3Dスキャナーの専用アプリで出力した3Dモデルは、Unityで使用する想定でobjファイル形式で出力しました。ただ、出力したファイルをそのままUnityで使用すると問題が生じてしまいます。3Dモデルのデータを編集して最適化する必要がありますがUnity上で編集を行うことが難しいため、3DCGソフト(Maya、3dsMax、Blender等)を用いて、Unityにimportする前に編集作業を行います。

モデルのピボットを調整

出力された3Dモデルのピボット(原点)は、モデルから離れた位置になってしまっています。おそらく、スキャンを開始した時点の3Dスキャナーの位置が、3D空間の原点となっていると思われます。また、モデルの向きも傾いてしまっているので、ピボットをモデルの中心位置に調整をしたうえで、モデルを水平に調整して正面(UnityだとZ軸の方向)を向くようにします。

ポリゴンのリダクション

今回の土偶をスキャンした3Dモデルのポリゴン数は、約180万ポリゴンありました。ワイヤーフレーム表示で見ると一つ一つのポリゴンがとても小さく、高精細なスキャンできていることが分かります。3Dプリンターで出力する等の用途であれば、そのまま利用すればよいですが、Unityにimportしてリアルタイムで扱うことを考えると、このままではポリゴン数が多するため、ポリゴン数を削減(リダクション)します。
データサイズはできるだけ軽くしたいところですが、形が変わってしまっては意味がないので、形状を保持しつつリアルタイムで動かしても問題ないポリゴン数にまで落としていきます。また、リダクション時にはテクスチャがズレてしまわないように、UV座標にも気を付けて編集します。

リダクションをした結果、ポリゴン数が約10.5万ポリゴンまで減り、データサイズもかなり小さく抑えることができました。元のデータと比べると、細かな凹凸は失っていますが、大きく形状が変わることなく調整できています。

3Dモデルビューアー作成

最適化した3DモデルデータをWebブラウザで確認できるようにするため、Unityでビューアーを作成します。

開発環境

  • Unity2021.3.xx (LTS)
    ※WebGL向けビルド設定
  • Visual Studio 2019

実装

ビューアーはマウスやタッチ操作によって、モデルを自由に回転をさせて確認するイメージですが、
実装の仕組みとしては、モデルは一切動かず、カメラをモデルの周囲の軌道を衛星にように動かします。

デモ

<操作方法>

  • 回転
    • マウスの左ドラッグ操作
    • 指1本でのスワイプ操作
      ※縦方向の回転には制限がかかってます
       (上方向は土偶の頭頂部まで。下方向は土偶の穴が少し見える程度まで)
  • ズーム
    • マウスのホイール操作
    • 指2本でのピンチイン/アウトの操作
  • テクスチャ表示
    • スペースキーで表示のON/OFFを切り替え(PCのみ)

まとめ

今回紹介した土偶以外の対象物もスキャンを試してみましたが、どれも想像以上に3Dモデルとして作成できていました。3Dスキャナーの特性を理解できていなかったり、デバイスの扱いに不慣れである理由で、上手くスキャンできないこともありますが、正しく理解して使用すれば大半の対象物は3Dモデル化できると感じました。慣れてくればスキャンして3Dモデルデータを最適化するまで1時間程度で行うことができそうです。
ただし、作成した3Dモデルは、あくまでコンテンツにおけるメインの3Dモデルではなく、サブとして背景などに配置するという使用に限ります。スキャン結果の3Dモデルはリダクションしたとしても、ポリゴンの分割が汚いため後から3DCGソフトを使っても形状を変形しようとするのは至難の業です。モデルをアニメーションさせることも難しいため、基本的には不動の置物としての使用用途になります。また、UV展開とテクスチャ画像作成を自動的で行ってくれますが、これも同様に後から編集できるものではありません。モデルの一部のカラーを変更したいと思っても、テクスチャ画像のどの部分を調整すればよいか判断できません。
ですので、作成したモデルは後から大きく変更できないと考えておいたほうがよさそうです。3Dスキャナーでモデルを作成する前に、どのような使い方をするのか確認しておく必要があります。今回試した小型のス3Dキャナーの場合は、3D空間の背景に配置する小物としての用途であれば、十分使用できるのではないでしょうか。
これまでの3Dスキャナーといえば、何十万、何百万円とする高額なものでしたが、一般ユーザーでも購入が可能な値段(2022/10時点で10万円ほど)のもので、小型とはいえ高精度なスキャンが可能であることは驚きでした。今後さらに機能面と操作面が改良された製品が登場すれば、より気軽に3Dモデルの作成ができるようになるのではないかと期待しています。