Blender ウォッチング

画像からAIで生成した深度情報を使ってアーチの彫刻を再現してみた

「Marigold Depth Estimation」をバンプマッピングに利用してみる

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

どこかの遺跡風建築物。バンプ用の深度画像はすべて最後の「Native」で作成、後述の穴はペイントツールで修正済み

 今回も前回に引き続き、「Marigold Depth Estimation」を使用した、画像からの深度生成を色々試してみます。

バンプマッピングへの利用

 バンプマッピングとは、形状を変化させずに擬似的に凹凸をつける技術です。横から見ると凹凸がない、あまり奥行のある表現はできない、などの制限はあるものの、モデル形状のデータ量の増加を抑えて簡単にディテールを与えることができるので多用されています。

バンプマッピングの例

 筆者が「Marigold Depth Estimation」(以下Marigold)を見て最初に思ったのが、このバンプマッピングによる「建築物の装飾が楽にできそう!」でした。

 例えば柱やアーチで、時々装飾が施されているのを見かけます。自分で作成するにはなかなか面倒なので、フリーのテクスチャ素材などを探してみたりしていたりするのですが探し方が悪いのか、この手の装飾はあまり見つからず、代わりに写真や陰影付きの図、スケッチをそこそこ見かけました。

 これらをそのまま利用すると、影の付いている部分やクロスハッチ(線の組み合わせで陰影を表現する手法)で凹んだりするため、予想されている形状にはなりません。

単に写真をそのままバンプマッピングしてみた例。単なるスジ彫りにしかなっていない。写真はWikimediaの物を加工

 そこで深度推定により、これらの画像上の陰影を人間のように「立体」として認識させ、深度画像を生成させることで立体的なバンプマッピングを行おうと思いました。

深度画像によるバンプマッピングのセットアップ

 それでは実際に深度画像でバンプマッピングしてみます。前回の通り、すでに深度画像は作成・保存(「~_depth_16bit.png」形式)されているものとします。

 下図は先ほどと深度画像をバンプマッピングとして適用してみた例です。像の後ろ側のドームや腕、脚などが立体的になっています。

深度画像をバンプマッピングに使用した例。前述とは違い、像の後ろ側のドームや腕、脚などが立体的になっている

 下図は上記のバンプマッピングに利用するノードツリーです。前回の記事同様にマテリアルを追加し、残りのノードを下のようにして追加し、図の通りに各ソケットをつないでください。

  1. 深度情報である「~_depth_16bit.png」ファイルをドラッグ&ドロップで[画像テクスチャ]ノード(①)として追加
  2. [追加]-[ベクトル]-[バンプ]メニューで[バンプ]ノード(②)を追加
  3. [追加]-[ベクトル]-[マッピング]メニューで[マッピング]ノード(③)を追加
  4. [追加]-[入力]-[テクスチャ座標]メニューで[テクスチャ座標]ノード(④)を追加

 さらに各ノードに以下の設定を行います。もしテクスチャの[位置」[方向」[比率」を調整したい時は、[マッピング]ノードの[移動][回転][スケール]も調整して対応してください。

画像テクスチャノード

  • [色空間]:[非カラー」
  • [端の処理]([リピート」の部分):[クリップ」(繰り返しでいいならそのままでもOK)

バンプノード

  • [反転]:ON
深度画像をバンプマッピングに利用するノードツリー。画像をドラッグ&ドロップで[画像テクスチャ]ノード(①)、[追加]メニューから[バンプ]ノード(②)、[マッピング]ノード(③)、[テクスチャ座標]ノード(④)を追加し、それぞれのソケットをつなぐ

深度生成の調整

 実際に利用してみると、いくつか問題点が出てきました。

ノイズが乗る

 画像では気づきませんが、いざバンプマッピングにしてみると結構ノイズが多いことがわかります。遺跡などの元々凸凹している壁面への装飾ならいいのですが、他の用途では不都合があるでしょう。

 Marigoldの深度画像生成時の[Advanced options]に、[Number of denoising steps](デノイズステップ数)というパラメーターがあります。後述の他のオプションもここから操作できます。

Marigoldの[Advanced options]

 とりあえずこの値をデフォルトの「10」から、最大の「20」に増やしてみたのが下の画像です。ノイズが減った部分があるものの、代わりに別の部分に新たな凹凸ができていたりするので、全体的にはノイズの量にあまり差はないように感じられました。画像によってはもっと効果が上がるのかもしれません。

「Number of denoising steps」が「10」と「20」の違い。生成される画像は違うが、正直なところノイズが減ったようには見えない

 後述の他のオプションとの組み合わせも試してみましたが、結局ある程度のノイズはどうしても消すことができないようです。幸い画像ファイルなので、「Blender」の画像エディターや「GIMP」などのペイントツールを使って手作業で消すくらいしかないのかもしれません。

細部が再現されない

 上記の画像では顔が潰れてしまっています。これも上記の[Advanced options]のオプションである程度改善します。

Ensembleを上げる

 この[Ensemble]パラメーターはGitHubの説明ページによると、全体の推論の回数だそうです。大きくするとディテールの再現度が上がりますが、計算時間も大幅に増えます。大きさも少し変わっているのが面白いですね。

Ensembleが「10」と「20」の比較。顔の目鼻ははっきりしないままだが、だいぶ顔らしくなっている。脚なども改善されている

解像度を「Native」にする

 同じくこのオプションの[Native]という項目があります。Marigoldの深度生成のデフォルトの内部解像度([Recommended])はあまり高くなく、この[Native]に変更すれば再現されるディテールが増えます。ちなみに出力される画像ファイル自体の解像度は同じです。

 実際に上記の画像を[Native]で出力してみると、画像サイズが大きめ(1,056×2,625)だった所為か、顔の情報が生成されていたものの、背景のドーム部分の奥が平らになってしまい、さらに中央部に変な穴が開く結果になりました。すべての画像で起こるわけではないようですが、あまり大きな画像にしない方がいいのかもしれません。

 また、生成時間はデフォルトの30秒から約6分とかなり長くなり、[denoising]と[Ensemble]を両方20にした時は計20分弱にもなります。

Nativeで生成してみた例。顔の鼻と口、台座の模様までも再現されているが、背景ドームの奥が平らになり、中央に変な穴が開いてしまった。右側は[denoising]と[Ensemble]を両方20にした物

終わりに

 筆者としては当初の目的を果たせて満足したのですが、実用にはもう少し、といったところでした。とはいえ、元々概念実証的なページだと思われますし、素晴らしい技術であるのは確かです。

 次回は再び立体化について模索していきたいと思います。

 ではまた。