Blender ウォッチング

1枚の写真から高速で3Dオブジェクトを生成できる「TripoSR」の凄さを確認する

 本連載では、無料の高機能3Dモデリングツール「Blender」の使い方や関連情報を幅広くお伝えします。

サンプルの一つ「tiger_girl.png」(画像名はgithub内の物)で生成した3Dモデル

 今回は機械学習により1枚の画像から3Dモデルを生成可能な「TripoSR」を試してみたいと思います。そのパフォーマンスや実用性、そして 「たった1枚の画像から3Dモデル生成という無茶振りをどう処理するつもりなのか」 を探っていきたいと思います。

TripoSRとは

 「TripoSR」は、Tripo AIStability AIが共同で開発した、画像から3Dモデルデータを高速・低リソースで生成する、高速3Dオブジェクト再構築モデルだそうです。

公式紹介ページ

デモページによる利用

 まずは手軽に試せるデモページを使用してみましょう。

デモページ。執筆時はバナーが壊れていた模様

 手持ちの画像をアップロードできますが、まずは下の方にあるサムネイルをクリックしてみましょう。「Input Image」にその画像が表示された後、あっというまに画像処理後のデータが「Processed Image」に、3Dモデルがその右側に表示されます。

下の「Examples」のサムネイル画像をクリックすると、自動的にモデルが生成される

オプション

 「Marching Cubes Resolution」でメッシュモデルのグリッドの解像度を変更できます。

 指定可能な値は「32」から「320」で、デフォルトは「256」です。大きい値ほど足などの細い部分や曲線状の部分の表現が改善します。

左から「32」「256」「320」で生成したモデル。ちなみにこのモデルの場合、それぞれの頂点数は約「900」「6.8万」「10.8万」

背景付き画像のアップロード

 背景付き画像をアップロードして[Generate]ボタンを押すと、サンプル画像と同じようにすぐに3Dモデルを表示できます。デフォルトでは自動的に背景を削除してくれます。細い脚などはあまり得意ではありませんが、思ったよりうまく切り抜いてくれる印象です。

以前の記事の女性像を読み込ませてみた例。手と頭の間の空間以外はほぼ意図通りに切り抜いてくれている模様。なお3Dモデルは解像度の問題で割愛

 逆にサンプル画像のように、すでに背景を削除済みの画像の場合、「Remove Background」オプションを切ると品質が向上するとのこと。

 その下の「Foreground Ratio」はモデル化する形状が画面中で占める割合を決める物です。「0.5」から「1」までが指定可能で、大きくすると余白部分が減り、モデルの品質も改善されるそうです。

 そして実際に上記2つのオプションを試してみたのが下図です。それぞれに頂点数に違いはあるものの、Foreground Ratioが「0.5」の場合を除き、他のモデルに大きな違いは認められませんでした。元の画像によってはもっと差が感じられる結果になるのかもしれません。

「Foreground Ratio」の「0.85」「0.5」「1.0」、そして「Remove Background」を無効にしたモデルの比較。「0.5」以外に大きな差はないように見える

モデルの利用

 「Blender」でダウンロードしたモデルを確認してみましょう。
 モデルを読み込むには、[ファイル]メニューから[インポート]で[Wavefront (OBJ)]または[glTF 2.0 (.glb/.gltf)]を実行します。

 モデルにはテクスチャはなく、代わりに「頂点カラー」で色付けされています。以前の「Luma AI」の「Interactive Scenes」同様、実際に使用するにはマテリアルを付加し、[カラー属性]ノードを追加してやる必要があります。

インポートしたモデルに「マテリアル」と「カラー属性ノード」を追加した例

モデルの構造と推論について

 「TripoSR」が出力するモデルの生成には「torchmcubes」というライブラリを使用しており、「Blender」でいう分割数(解像度)の決まっている「スカルプトモデル」にような構造になっています。そのため、端がギザギザしており、曲線もなめらかではありません。逆にいえば「Blender」での「スカルプティング」のベースモデルとして活用するのに適しているのかもしれません。

 推論に関してはまだ学習が足りないのか、改善の余地はかなりありそうです。

 たとえばサンプルの「marble.png」では、腕で隠れた胸部がえぐれているように凹んでいたり、スズメの画像を食わせてみたところでは、横からの写真では比較的うまくモデル化していたにもかかわらず、前からの写真の場合では平べったい何かができてしまいました。

前からのスズメの画像を処理させた結果。スズメとは認識されていなかったのかもしれない

 背面の処理ですが、腕や脚のような筒状の物は思ったよりうまく生成されている印象を受けました。ただ、上記のように学習されていない物でも同じように処理してくれる保証はありません。そもそも1枚の写真で立体物を生成するのが無茶なので、この辺は仕方ないでしょう。

「marble.png」と「tiger_gir.png」から生成したモデルの後面。腕や脚の輪状の模様が裏側にも生成されている。翼が背中から生えていないのはご愛敬

ローカル環境での利用

 ローカル構築で利用することもできます。GPUで高速生成するには「ビデオメモリが6GBのCUDA対応(NVIDIAの)ビデオカード」が必要ですが、CPUでもそこそこの速度で生成可能です(メインメモリが同様に必要)。

 導入にはコマンドプロンプトや各種設定の知識があり、多数のライブラリを扱う都合上、トラブルを自力で解決できることが望ましいです。

 詳しいインストール方法や使用方法についてはまたの機会に。

終わりに

 実用にはまだ足りないものの、文字列から生成物を提示していくのではなく、2Dのように画像から作成する物を推測していくアプローチは面白いと感じました。

 画像を1枚用意するだけで生成時間やリソースも少なめで気軽に色々試せる利点もあります。

 ではまた。