⛰️

スマホ3Dスキャンを半年少々楽しんだ知見をまとめる

2022/05/08に公開

2020年発売以降のiPad Proと、iPhone12-13 Proには LiDARスキャナ が搭載されています。

LIDAR(ライダー)(英語:Light Detection and Ranging、
Laser Imaging Detection and Ranging)Lidar あるいは LiDAR とも表記される。
「光検出と測距」ないし「レーザー画像検出と測距」)は、
光を用いたリモートセンシング技術の一つ

https://ja.wikipedia.org/wiki/LIDAR

都市や大空間(数十メートル規模<)をスキャンできる産業機械や自動運転用の数百メートル先をセンシングするものから、数十センチ以下の範囲で精密にスキャンするものまでかなり多岐に渡るようですが、スマートデバイス搭載のLiDARは厳密には別のものではないかとの記載も見かけたことがあります。
iPhoneのはカメラアレイに紛れて搭載できる小型で最大5m程度のレンジにレーザーを飛ばしてスキャンを行います。

この記事は何?

LiDAR搭載機に機種変してから色々スキャンを楽しんだので、そこで得られた知見の備忘録です。

スマホ3Dスキャンについては、スキャンを業務にしておられる方を含め多くの方々が熱心に情報発信しておられ、SNSでも日々新情報が流れてきます。
より技術的・専門的な内容についてはそちらに求めていただくのが確実で、ここではより個人的なホビー寄りなトピックを書き連ねています。

なかには既知・解決済の問題であったりより検証を詰めることができそうな内容もあるかもしれませんが、いまのところは「まあ楽しいからいいか」くらいの軽さで流しています。


環境

  • iPhone 13 Pro / 256GB
  • Scaniverse

https://apps.apple.com/jp/app/scaniverse-lidar-3d-scanner/id1541433223

有料無料含めiPhone用3Dスキャンアプリは非常にたくさんありますが、
目立つものをざっと使ってみて馴染んだ Scaniverse を常用しています。

いろいろ使い比べてみると、おなじ3Dスキャンアプリであっても
思想というか目指す方向性の違いが見て取れて面白いです。
モノを撮るのを重視している・空間を撮るのを重視している、とか
メッシュ化に時間をかけても精度を出す・メッシュ化はざっくりだけど高速に結果が得られる、とか。
スキャン中のユーザーへの見せ方など、スペックではない使い心地・撮り心地のようなところも
アプリ選びのポイントになるのではと思います。

主な用途

モノよりは空間(道とか)を主に撮っています。

ラフに撮ってもそれなりに楽しめる成果が得られ、手軽さと諦めと満足感のバランスがいい感じな一方、モノの3Dスキャンはそうはいかない感があるためです。

※雑な考察ですが、中心視や有効視野など解像度高く捉えられるモノに関しては自然とハードルが上がり、空間の方は逆にパーっとスキャンしても人間の身体性から離れた視覚(猫的・鳥的な)が得られるので満足しやすい、ちょろい、ということだと思います。
「アニメーションの中では『歩き』が一番難しい」(受け手が普段から高頻度・高解像度で目にしている)みたいな話と由来が近い気がしています。

念のためですが、周囲に人がいない、自分もスキャン中にこけないなど最低限の注意をしつつ楽しむ必要があります。

大きな範囲でのスキャン

GPS

スキャン中にGPSを用いているそうで、移動中の車の中などではうまくスキャンできません。
レーザーとカメラ的に得られるデータが10fps分ずつずれた謎の形状が得られます。

なにかの影響

なんの影響でか「停まっているのに移動中かのようにスキャンされる」ことがあります。近くに強烈な機材があってロケーション取得に影響が出ているとかでしょうか? 撮り直すか、ちょっとずれたりすると解消されることがあります。
スキャン中の画面が「車で移動中」と似たようなイリュージョンな感じになるのですぐ分かります。そうなった場合はメッシュ化してもいい結果にはならないのですぐ終了してやり直します。

直線が歪む?

何十メートルもある建物の一辺などを撮ってみると、
おそらく直線なはずなのですがゆるく湾曲します。
普通に作業者が雑なためもありそうですが、なんか地磁気とかコリオリ力とか
そういうのも影響しているのでは?(わかりませんがその方が楽しいため)

長距離を一度に撮るのは楽ですが、その場合は精度にはある程度目を瞑りつつ、
必要であれば細かく撮って後から3DCGツールでつなぐなどを考える必要があります。
(この場合も、作業(者)自体の精度に大きく左右される上に時間的制約もかかってくるため、なにかしら割り切る場面は出てくるかと思います)

円がつながらない

ある範囲をぐるっとスキャンして同じ地点に戻ってきた時、スキャンデータ内の空間でも同じ地点にピッタリ一致していることは稀(多分皆無)です。


▲例えばこれは円形の花壇?を撮ってみたケースですが、
目印にした看板がずれています。▼

また、もう少し小さい像的なものの台座を回ってみた場合でも
開始と終了がずれています。


▲分かりづらいですが、高さも一致しませんでした。

もう少し小さい範囲(半径2m程度のぐるり)でもなかなかピタリとは合いません。

対応としては、 3DCGツールへ持ち込んで修正 を前提に、
開始点と終了点のデータが混ざることが無いように、開始点にある程度戻ってきたらその手前でスキャンを一旦やめ、繋ぎ用として開始点〜終了点をかぶるようにスキャンする、あたりが現実的だと思います。

開始点と終了点がずれた状態で混ざってメッシュ化されてしまうと、綺麗にするのはほぼ不可能かコストに見合わない(形状面ではモデリングくらい時間がかかるし、テクスチャ面では再ベイクもかなり難航すると思います)ため、禁忌扱いくらいでいいと思います。
ずれるのは仕方ないとしても、混ざってさえいなければ3DCGツール側でなんとかできます。

それかつながらなくてもそういうもんだと諦めます。

形状の反復

建築物の構造や、またはカーペットの模様などで、特徴的な視覚情報が反復する場合があります。
これらによってスキャン位置が誤認されてしまうことがあり、位置が戻される・面が重複するなどの不整合の原因になります。
広い範囲をスキャンしているときは致命傷で、これが発生したらそのスキャンはおしまいです。

柵や階段、また逆に情報量が少なすぎる壁・床が長く続く場合も対象になります。

回避する方法としては、

  • 細かく分割してスキャンする
  • 折々上下左右違う方向にも向けて、紛らわしい視覚情報を取得させない

あたりが考えられます。
どちらも手間と時間がかかり、雑スキャン勢としては苦しいものがあります。

スキャン距離を限定する

Scaniverseでは、デフォルトで5mまでのスキャン結果を点群化しようとします。このレンジは5mが最大で、最低0.2m(20cm)まで設定可能。おそらくほかのアプリでも同様の設定があるかと思います。


▲レンジを1mにした場合。Scaniverseでは境界線が赤く表示されます。

iPhoneのカメラ付近のさして大きくない一点からレーザーを飛ばして受け取っているわけで、5m向こうではレーザーはスカスカ、精度も好ましくありません。

それでも撮れるだけOKという場合もあれば、
撮らない方がノイズにならなくていい場合もあります。

特に広い空間をうろついてスキャンしている時には、ある箇所について「5mの距離から低精度で1回」「近距離から再度」と二度スキャンされてしまうことで、メッシュが多重化してしまったりする原因になります。

対象に近づいてスキャンできる場合など、必要でなければ5mより狭めてスキャンするのが良いと思います。

そこそこな範囲でのスキャン

後からスキャンした内容が優勢

スキャンしながら同じ箇所を擦ると、前のデータが後のデータで上書きされます。
例えば、たまたま人が歩いてきてスキャン範囲に入ってしまった場合ノイズとして取得されてしまいますが、そのまましばらく待つなり、別の方向をスキャンして戻ってくるなりすると、結果的に消すことができます。

露出補正とテクスチャ

映っているものによってカメラが露出補正を掛けるのは動画撮影時と同様です。
画角全体が暗ければ露出が開き、光源が映り込んでいれば絞られます。
それがテクスチャ生成時に使われるため、1回のスキャン内で露出が大きく変わっている場合、テクスチャの色がパッキリ割れてしまう場合があります。

前項に関連して、同じところを二度擦ってしまった時に露出が変わっていると、
テクスチャにパッキリが起きてしまう可能性が高まります。

大抵の場合、光源や照らされている壁の明るさは上から下に向かって変化しているため、
上下方向にスキャンしながら空間を移動していくと露出が頻繁に「開」「絞」を繰り返すことになり、テクスチャ生成結果も白黒します。
同じ高さのスキャンをできるだけ長く続けられるよう、スキャン開始時に見込みが立てられるとベストな気がします。

二度スキャンと位置ずれ

同じ箇所を二度スキャンしてしまうケースについて、
「同じ箇所だ」と認識してもらえればスキャン中に上書き更新されて収まりますが、
既に述べたように大きく移動してきて戻ってきた場合などに、微妙にずれていることもあります。
その場合、3DCGツールに取り込んでみると二重メッシュになっているなんていうこともあり、非常に厄介です。

できるだけ同じ箇所は一度だけスキャンできるよう、開始前に流れを考えておけるといいんじゃないかと思います。

その他

節電

3Dスキャンは各種センサーをぶんまわしつつグラフィックパワーも使うためか、バッテリーがみるみる減る感じがします。

簡単にできる節電を二点実施しています。

  • メッシュ化をすぐしない。 Scaniverseではスキャン後にメッシュ化せずに保存することができるため(多分ほかのアプリもそうだと思いますが)、一旦ほっといて次のスキャンに移ります。メッシュ化に費やされるパワーや時間を節約できます。ただしメッシュか前後で10:1くらいファイル容量がかわるため、ストレージにある程度の余裕が必要です。難点は、メッシュ化を忘れた状態でついつい放置してしまうことです。
  • モバイルWiFi持参。 モバイルデータ通信で局を探したりする分をささやかに節約するために、モバイルWiFiに接続してスキャンしています。気休めな気もします笑

省電力モード時の挙動

なんとなくですが、スマホのコンパスの精度とかが下がるとか、センサーがデータを取得する頻度が下がるとか、そういう挙動に変わる感があります。
そのためメッシュ化してみると失敗している、繋がるはずの面がずれているデータが多くなります。

きちんと調べたわけではないので、実は気のせいでスキャン作業者(自分)の所為とか、
または回避する設定があるとか、検証の余地がありそうです。

階段は下りより上りが得意

階段は水平の面と垂直の面が連続していますが、
下りながら撮ると水平の面にしかレーザーが当たりません。
これをメッシュ化すると、補完具合によっては階段状ではなくヌルっとなめらかな面として処理されてしまいます。

上りの場合は、垂直の面にも十分レーザーが当たりつつ、上っていくうちに水平の面も見えてくるので概ね正しく階段状の形状が得られます。

下りながら段々が撮りたい場合は、進行方向ではなく横にスマホを向けておくと、壁と階段の接触箇所などスマホ的にも構造を把握しやすいようです。

葉っぱ、棒

「細いもの」「薄いもの」「細かい形状の束(樹木の葉の部分)」のスキャンで精度を出すのはかなり難しいです。
レーザーがヒットしづらいため、消えてしまうか、正しい形状が得られません。

また逆に 金網 などは、スカスカなくせにそこそこヒットするのか、壁のような扱いでスキャンされがちです。

少なくとも正しく金網状にヌケたスキャン結果にはなかなかなりません。

その場合、金網から透けている「本来ずっと向こうにあるはずの景色」などがテクスチャとして取得されるため、でろでろに溶けたような謎の図像になりがちです。

Scaniverseのサンプルを見ていると植木の葉など 薄いもの も上がっているので、頑張れば撮れるのだろうと思います。

Scaniverseの Processing Mode

スキャン後は「Speed」「Area」「Detail」の三つから処理を選択でき、おすすめには「RECOMMENDED」がつきます。
また、スキャン範囲が大きすぎる場合には「Detail」は選択できなくなります。

基本的には右に行くほど処理に時間がかかりますが、「Speed」「Area」は 「LIDAR」 、「Detail」は 「PHOTOGRAMETRY」 と書かれている通り、処理方法が全く違います。
フォトグラメトリは純粋にいろいろな向きの図像から特徴点を割り出してメッシュを生成しようとするため、「Detail」が「RECOMMENDED」になっていても、撮る時にそれを意識していない場合には「Area」より低精度の結果になる場合もあります。

処理後に保存するかどうかを訊かれますが保存するまでは何度でも試せるので、気になる場合は「Area」「Detail」両方試してみるのがいいと思います。
「Speed」は使ったことがありません。

リメッシュやUVの整理、テクスチャベイク

出来上がったデータを見てみると、
人間からすればひとつの平らな面に見えても、UVが細かく刻まれてテクスチャが生成されていたりします。またポリ数も多いです。
メッシュやUVを綺麗にして、その上でテクスチャを再生成する必要があります。

Meshroomで減メッシュしてBlenderでテクスチャ焼き直す例

https://youtu.be/-dc4KN2bdrw

焼き直しを3Dcoatでやっている例

https://youtu.be/_hpRVnIz-C4

Houdiniを使う例

https://youtu.be/5jtOMCAp1jc

こちらは動画内で使っている木のデータをダウンロードできるので、Houdiniさえあればすぐ練習できます。
上の動画内で登場するsidefxのフォーラム投稿はこちら
https://www.sidefx.com/forum/topic/79582/

RealityScan

著名フォトグラメトリツールである「RealityCapture」のモバイル版 「RealityScan」 が、現在 limited beta 中です。

https://www.capturingreality.com/introducing-realityscan

気づいた時には応募が終わっていたので試している人が羨ましい状態ですが、
春の終わりにはiOS版のRealityScan Early Accessがくるとのことなので、楽しみにしてます。

Discussion