nokの雑記

技術的な内容にしようと思ったけど無理でした。

(フィギュアの)現代3Dスキャン技術はどうなっているのか?

興味です。

2024年4月より、Epic社が提供するハイエンド写真測量ソフトであるReality Captureのライセンスが変更され、事実上無償化されました。(※売り上げがたくさんあると有償です)

Reality Captureはこちら: https://www.capturingreality.com/

また、近年はSfM (Structure from Motion)やMVS (Multi-View Stereo)とは異なる三次元シーンの復元技術がかなりの高品質を叩きだしています。

さらに、ProシリーズのiPhone/iPadに搭載されたLiDARを利用した3Dスキャンアプリが出ていることもあり、手軽に3Dスキャンを行えるようになりつつあります。

このエントリでは、比較的小型の立体物(要はフィギュアやプラモデル・ジオラマ)を題に、各技術がどんな感じでスキャンを行えるのかを見ていこうと思います。 (このエントリの背景には、ワンフェスでの3Dスキャン禁止あたりの要素もあります。どれくらいのクオリティで行えてしまうのか、またどうしたら防げるか、逆に出展側が何かに利用できないかを検討できないか、ということです)


各手法の概要

※以下の説明は間違っている可能性があります。

雑に画像にまとめてみました。下の長い説明は興味があったら読んでください。

デジタル万引き的な視点から覚えてほしいのは、SfM, MVSとLiDARスキャンでは3Dモデルが作られてしまい、NeRF, GSでは(まだ)難しいという点です。

3Dスキャン技術まとめ

SfM, MVS

古典的?な手法で、あるシーンを撮影した画像群から、画像同士(撮影視点)の位置関係を計算して、シーンの形状を復元する技術です。

まず、画像上の特徴点(コントラストの強い場所やエッジなど)を抽出し、各画像のマッチングを行います。 その後、特徴点同士がどう分布するかをもとに撮影時のカメラ位置を計算します。 最終的に、特徴点の空間的な(疎な)分布を求め(Structure from Motion; SfM)、それらを元に密な点を生成し(Multi-view Stereo; MVS)、メッシュを張るとBlenderなどで利用可能な3Dモデルを取得できます。

冒頭で紹介したReality Captureはこの原理を使うソフトウェアです。有償・無償・商用・研究用を問わず様々なソフトウェアが開発されています。また、この技術は写真測量やフォトグラメトリとも呼ばれ、様々な分野で利用されています。

画像同士の対応を計算するため、手ブレに弱い、一部が動いている物体に弱い、特徴のないのっぺりした物体やガラス・鏡に弱い、他の物体に隠れて見えない部分は復元できないなどの苦手はありますが、良く研究されており、厳密に調整されたカメラではかなりの精度をたたき出します。

FFXVの料理モデルに利用されていたりhttps://jp.ign.com/cedec-2018/28299/news/ffxvcg、広域を撮影したものがVR空間として公開されていたりhttps://note.com/thedesignium/n/n4b6a9d2d5c01します。

NeRF, GS

NeRF (Neural Radiance Field)は2020年に提案された手法で、GS (Gaussian Splatting)は2023年に提案された手法であり、両者は新しい技術です。あるシーンを撮影した画像群とカメラ姿勢を入力に、各視点からのシーンの見え方を機械学習技術で学習し、もともとのカメラ視点とは異なる視点の画像を生成できます。

まず、シーンの画像をもとに、SfMなどでカメラの姿勢を計算します。それを入力として、NeRFの場合は空間上の各点における色・透明度をニューラルネットワークに学習させます。GSの場合は空間中にGaussian (ラグビーボールみたいなもの)を散らし、その大きさ・色・透明度を機械学習技術で最適化します。シーンの空間的な表現を学習するため、最終的に、未知の視点からシーンがどう見えるかを画像でレンダリングできます。

機械学習技術を利用して未知視点を合成する(Novel-view Synthesis; NVS)ため、対象の3Dモデルは直接的には得られません(3Dモデルの形で取り出すのは不可能ではありませんが面倒です)。しかし、見え方そのものを学習しているため、ガラスや鏡にも比較的強く、写実的なレンダリングになります。盛んに研究されている最新技術であるため、日進月歩で新手法が発表されています。

最新技術であるので商用ソフトはまだ多くありませんが、Gaussian SplattingによるNVSWindows向けではPostShotというアプリがβ版で提供されていたり、スマートフォン向けの3Dスキャンアプリに実装されていたりします。

映像製作で使われるようになりつつあります。https://cgworld.jp/article/nerfarata-fukoe.html

LiDARスキャン

専用のセンサを使って、対象の三次元的な形状を直接取得してしまう手法です。使うセンサはLiDAR (Light Detection And Ranging)に限りませんが、便宜上LiDARと書きました。iPhone ProシリーズにLiDARが搭載され、アプリからその情報を利用できるようになったため、一気に身近になりました。

専用のセンサは、電磁波(光)を用いてセンサ位置からの奥行き(距離)を取得できる点が特徴的です。センサの姿勢変化と取得した奥行きをマッピングすることで、対象の三次元的な形状を取得できます。色情報については、調整が施されたカメラをセットにして扱うことで取得可能です。

得られるモデルの出来は、使うセンサの精度や使い手の技量に左右されやすいです。光を用いて距離を取得することから、ガラスや鏡は苦手です。また、SfMやNeRFなどと異なり、専用センサという点もネックです(が、iPhoneが使えてしまいます)。iPhone Proシリーズでスキャンを行う場合はなんといっても手軽であるため、デジタル万引き的には注意が必要です(iPhoneで写真を撮っているか、LiDARでスキャンをしているかは判別しづらいです)。なお、iPhoneのLiDARは専用のスキャナと比較すると性能がかなり低いため、細かい物体のスキャンは苦手です。

iPhone向けには多数のアプリが出ており、Twitterでひたすらそれらを宣伝している人もいます。


実際にやってみよう

ターゲットとデータ取得

フィギュア類は一切買わないと自分に制約を課していた筆者が唯一買ってしまったフィギュアこと、芹沢 あさひ 空と青とアイツVer.をターゲットにします。公式から持ってきた画像↓

芹沢 あさひ 空と青とアイツVer.公式画像

画像としては、一眼レフカメラで(おもに正面方向から)撮影した100枚を使います。(もちろんiPhoneでも可です) 撮影では、F値を大きくする(パンフォーカス)、撮影ごとにカメラ位置をずらす(同じ場所からパン振りしてはダメ)、画像のオーバーラップを大きくすることが必要です。また、360度から撮影する必要があります。

LiDARスキャンでは、iPhone13ProでScaniverseというアプリを使います。

こんな感じで100枚撮影しました。

SfM, MVS

冒頭でも書いた、Reality Captureを使いました。(Windows向けでイージーに試すなら、MeshroomやCOLMAPなども利用可能です。Reality Captureも含め、いずれもnVIDIA GPUが搭載されている必要があります。)

使い方としては、画像をメイン画面にD&Dして、Alignment → Mesh model → Textureでモデルが完成します。 処理を行うコンピュータの性能によりますが、この規模だと数時間もかからないでできます。 下のスクショを見ると、主に正面から撮影したのがわかるカメラ姿勢となっていますね。

Reality Captureでの復元

操作しているときの動画をTwitterに置いておきました。

.obj形式で出力して、Blenderに持ってきてみました。 周囲を一周するように出力した例です。

一目見て分かると思いますが、本来のフィギュアには存在しないモコモコができています。 SfM/MVSで十分に復元できなかった部分にメッシュを張ったためにできたと思われるモコモコです。 また、単色でテクスチャに乏しい帽子の庇・信号機の日よけは穴が開いてしまっています。

NeRF, GS

同じ画像群を、PostShotをいうアプリで処理して出力しました。アプリ設定は、長辺2000px、特徴点9.6k、学習90kです。 plyファイルをexportし、プラグイン経由でBlenderに読み込んだものがこちらになります。(レンダリングの都合で、これだけエンジンがCyclesです)

偽色が出ている(これもレンダリングの都合です)ものの、形状や色が非常に正確で、綺麗にフィギュアを再現できていることがわかります。 また、後ろからの見た目も(後ろからの写真がほとんどないわりには)比較的綺麗に出力できています。

生成を行ったソフトのPostShotの機能で作成した動画がこちらになります。(こっちのほうが品質が数段高いです)

LiDAR

ScaniverseのMeshスキャン、Small Objectモードを使いました。メッシュ化処理はDetailで行っています。 スキャンでは、全方位からまんべんなく撮影を行っています。 Blenderに突っ込んで出力したものがこちらです。

直接モデリングが行われているだけあって台座部分も含めて大きな破綻はないモデルとなっています。 しかし、全体的に細部のディティールを欠いています。

さいごに

さて、肌感としては、どの方式でも(とくにテクスチャをつけたまま見る分においては)かなり綺麗にスキャンを行えているように見えますね。 デジタル万引き的な視点で言えば、展示会のその場で十分な品質で全方位からのデータ収集をさせないように対策するのが大事だと思われます。 3Dプリンティングも可能だと思われる(ソリッドモデルにできれば)ので、品質の是非は別として海賊版を作られてしまう可能性があります。

逆に、プロモーション的に利用できればおもしろいかもしれません。 Gaussian Splattingでは驚くほどの写実的なレンダリングが可能なので、プラモデルやジオラマをスキャンしてカメラワークをつけて動画出力すれば、作者直々にディティールまでふくめて、現実では難しいカメラワークで魅せることができるかもしれません。