はじめに
メディア研究開発センター(M研)上級研究員 田森です。
まずは一応自己紹介ですが、M研で研究開発の責任者をやっています。キャリアラダーで言うとエンジニアパス側の責任者みたいな感じです。よろしくお願いします。
さて、朝日新聞社アドベントカレンダーをご覧頂きまして、ありがとうございます。16日目の本日は、最近私が注目しているドローンの世界と、3Dモデルについてご紹介したいと思います。
M研では、メディアの将来を見据えて、社に必要な技術ノウハウを蓄積し続けています。AIの技術はもちろんのこと、最近では空間コンピューティング、3Dによる表現についても模索をしています。
今回、私が先陣を切る形で、都内のとあるドローンスクールに3カ月通い、「二等無人航空機操縦者技能証明+限定変更(目視外・夜間)」の国家資格を取得しました。ドローンは操縦に関して、車の運転のような免許が必要なものではありませんが、将来的な自己投資の意味もありますし、そもそもドローンの知識が圧倒的に足りないので、とりあえず取得を目指しました。なお、技能証明は、飛行に関する申請の省略なども受けられるなどのメリットもありますので、将来的に仕事で使うにはあってもいいのかなと思っています。
この投稿では、ドローンで撮影した空撮動画から、立体的なモデルを生成する過程をご紹介したいと思います。モデルの生成には、3D Gaussian Splatting(3DGS)という手法で生成しますが、Postshotという簡単に生成できるツールがありますので、それの利用例も含めてご紹介します。ドローンや3Dモデリングに興味がある方、ぜひお読みください。
ドローン撮影
今回は地形を3Dモデルにしたいと思います。作成するためには、まずはいろんな角度から地形全体を撮影した動画が必要となります。今回撮影した場所は多摩川です。撮影は、DJI Mini 4 Proで撮影しています。
今回の撮影エリアは人口集中地区(DID)で、かつ目視外飛行の条件で撮影しました。国土交通省への事前の許可・承認、及び管轄の警察署や河川管理事務所の許可をあらかじめ得て、事前に国土交通省へ飛行計画を通報し、補助者を配置して撮影をしています。国土交通省等から許可・承認を得ずに、また通報せずに飛行することは航空法など関連する法律に抵触する場合があります。
撮影動画(少し編集済み)
編集で小ぎれいにまとめていますが、実際は20分くらいの動画を撮影しました。あらかじめ川に対して縦横のメッシュ状に飛行するように飛行経路を設定し、自動操縦で撮影をしました。
3Dモデル作成
今回はPostshotというツールをご紹介します。使ってみてわかったのですが、とりあえず撮った動画をそのままドラッグアンドドロップすれば、全自動で3Dモデルを作ってくれる、という素晴らしいソフトです。
3DGSとは
Postshot内で使われている技術である3D Gaussian Splatting(3DGS)という技術について少しだけご紹介します。
3DGSは、複数の写真から3Dモデルを生成する技術です。写真ごとに「どの位置・角度から撮られたのか」を推定しつつ、空間に「ガウス分布をもつ、ふわっとした雲のような点」を配置していきます。さらに、ある写真の視点から見たとき・別の写真の視点から見たときに、その点がどのような色に見えるべきかを、機械学習の手法を用いて何度も調整します。こうした推定と最適化を繰り返すことで、全体の写真とつじつまの合う3Dの点群(ガウスの集合体)が形成され、それが最終的な3Dモデルとして完成します。
空中に向かって吹ける、色と大きさが自由に変えられる「ふわっと広がるカラースプレー」があったとして、それを写真を見比べながら、角度を変えて何度も塗り直し、どこから見ても矛盾しないように立体の色づけを繰り返していく、そんなイメージで空間を構築する技術、といえばいいのでしょうか。

B. Kerbl et al., 3D Gaussian Splatting for Real-Time Radiance Field Rendering
Postshotの実際
それでは、Postshotを利用した3Dモデルの生成をしてみたいと思います。
PostshotはWindows機専用のアプリケーションです。また、GPUが必要です。ライセンスとしては、Postshotは無償でも利用できますが、我々は商用利用可能なIndieプランを今回契約して使っています。試す分には無償でも大丈夫でしょう。
ライセンス登録したうえで起動しますと、下記の画面が出てきます。

真ん中に複数の動画(mp4でいいかと)をエクスプローラからドラッグアンドドロップして、設定のあと「Import」を押すと、自動でモデリングが開始されます。

いろいろと調べながら調整すると、 Max Image Count は100~300くらい、 Max Features/Frame は16(k)くらい、 Max Splat Count は3000(k)、Stop Training after は30(k)くらいがちょうど良さそうです。これ以上増やすと処理に異常に時間がかかるうえ、あまり性能も高くならなさそうです。 Single Lens & Focal Length と Create Sky Model にはチェックを入れましょう。撮影時のレンズや露出が固定かどうか、空がある前提でモデリングするか、というあたりで、ドローンの空撮であれば入れておいてもいいでしょう。
Importを押すと、動画から自動で「どのコマが学習に必要か」というのを自動で処理し、 Max Image Count までの画像を選択してくれます。その後、それらの写真がどこから撮られたか、それに基づいてどのような点を配置していくかを学習していきます。

計算中も可視化してくれる。点に見えるのが「ガウス分布を持ったふわっとした雲」のようなもの。点が少しずつ増えていくのが分かります。

カメラの配置の推論結果。ドローンの飛行経路と同じようなカメラ位置になっていることが分かります。
(実際のドローン飛行経路とは異なります。)
最終的には3Dモデルになるので、その中を自由に探索するような体験ができます。実際、モデル上にカメラを配置し、ドローンと同じようにカメラを動かすことで、Postshot上で動画も作成することができます。
カメラの移動が激しくなっちゃいましたが、かなり自然であることが分かります。Postshot試行錯誤
ChatGPTとやり取りしながら進めましたが、品質を上げるには下記のところを注意するといいようです。今後やってみたいです。
- 動画じゃなく、画像を入れる:mp4などの圧縮が3DGSの性能に影響を与える場合がありそうです。動画ソフトであらかじめ画像をパラパラ漫画化したほうが良さそう
- なるべく4K、HDR:撮影時はなるべく高品質で撮る。DJI機ではd-logモードで撮影し、動画編集ソフトでLUTなどで後処理すると良さそう
- いろんな角度で撮る:いろんな高さや角度で撮るとディテールが再現しやすい。私は今回高さは固定だったので、例えば川の表面に視点を向けるとあまり良い描画はできていませんでした
おわりに
今回は、ドローンの空撮とPostshotによる3Dモデル化について触りの部分をお伝えしました。ドローンの報道へのますますの活用や、表現に関する研究も進めていきたいと考えています。
M研では、年間を通じて頻繁にテックブログを更新中です。こちらもぜひご覧ください。
