Blender ウォッチング
画像からAIで生成した深度情報を使ってアーチの彫刻を再現してみた
「Marigold Depth Estimation」をバンプマッピングに利用してみる
2024年1月30日 15:03
本連載では、無料の高機能3Dモデリングツール「Blender」の使い方や関連情報を幅広くお伝えします。
今回も前回に引き続き、「Marigold Depth Estimation」を使用した、画像からの深度生成を色々試してみます。
バンプマッピングへの利用
バンプマッピングとは、形状を変化させずに擬似的に凹凸をつける技術です。横から見ると凹凸がない、あまり奥行のある表現はできない、などの制限はあるものの、モデル形状のデータ量の増加を抑えて簡単にディテールを与えることができるので多用されています。
筆者が「Marigold Depth Estimation」(以下Marigold)を見て最初に思ったのが、このバンプマッピングによる「建築物の装飾が楽にできそう!」でした。
例えば柱やアーチで、時々装飾が施されているのを見かけます。自分で作成するにはなかなか面倒なので、フリーのテクスチャ素材などを探してみたりしていたりするのですが探し方が悪いのか、この手の装飾はあまり見つからず、代わりに写真や陰影付きの図、スケッチをそこそこ見かけました。
これらをそのまま利用すると、影の付いている部分やクロスハッチ(線の組み合わせで陰影を表現する手法)で凹んだりするため、予想されている形状にはなりません。
そこで深度推定により、これらの画像上の陰影を人間のように「立体」として認識させ、深度画像を生成させることで立体的なバンプマッピングを行おうと思いました。
深度画像によるバンプマッピングのセットアップ
それでは実際に深度画像でバンプマッピングしてみます。前回の通り、すでに深度画像は作成・保存(「~_depth_16bit.png」形式)されているものとします。
下図は先ほどと深度画像をバンプマッピングとして適用してみた例です。像の後ろ側のドームや腕、脚などが立体的になっています。
下図は上記のバンプマッピングに利用するノードツリーです。前回の記事同様にマテリアルを追加し、残りのノードを下のようにして追加し、図の通りに各ソケットをつないでください。
- 深度情報である「~_depth_16bit.png」ファイルをドラッグ&ドロップで[画像テクスチャ]ノード(①)として追加
- [追加]-[ベクトル]-[バンプ]メニューで[バンプ]ノード(②)を追加
- [追加]-[ベクトル]-[マッピング]メニューで[マッピング]ノード(③)を追加
- [追加]-[入力]-[テクスチャ座標]メニューで[テクスチャ座標]ノード(④)を追加
さらに各ノードに以下の設定を行います。もしテクスチャの[位置」[方向」[比率」を調整したい時は、[マッピング]ノードの[移動][回転][スケール]も調整して対応してください。
画像テクスチャノード
- [色空間]:[非カラー」
- [端の処理]([リピート」の部分):[クリップ」(繰り返しでいいならそのままでもOK)
深度生成の調整
実際に利用してみると、いくつか問題点が出てきました。
ノイズが乗る
画像では気づきませんが、いざバンプマッピングにしてみると結構ノイズが多いことがわかります。遺跡などの元々凸凹している壁面への装飾ならいいのですが、他の用途では不都合があるでしょう。
Marigoldの深度画像生成時の[Advanced options]に、[Number of denoising steps](デノイズステップ数)というパラメーターがあります。後述の他のオプションもここから操作できます。
とりあえずこの値をデフォルトの「10」から、最大の「20」に増やしてみたのが下の画像です。ノイズが減った部分があるものの、代わりに別の部分に新たな凹凸ができていたりするので、全体的にはノイズの量にあまり差はないように感じられました。画像によってはもっと効果が上がるのかもしれません。
後述の他のオプションとの組み合わせも試してみましたが、結局ある程度のノイズはどうしても消すことができないようです。幸い画像ファイルなので、「Blender」の画像エディターや「GIMP」などのペイントツールを使って手作業で消すくらいしかないのかもしれません。
細部が再現されない
上記の画像では顔が潰れてしまっています。これも上記の[Advanced options]のオプションである程度改善します。
Ensembleを上げる
この[Ensemble]パラメーターはGitHubの説明ページによると、全体の推論の回数だそうです。大きくするとディテールの再現度が上がりますが、計算時間も大幅に増えます。大きさも少し変わっているのが面白いですね。
解像度を「Native」にする
同じくこのオプションの[Native]という項目があります。Marigoldの深度生成のデフォルトの内部解像度([Recommended])はあまり高くなく、この[Native]に変更すれば再現されるディテールが増えます。ちなみに出力される画像ファイル自体の解像度は同じです。
実際に上記の画像を[Native]で出力してみると、画像サイズが大きめ(1,056×2,625)だった所為か、顔の情報が生成されていたものの、背景のドーム部分の奥が平らになってしまい、さらに中央部に変な穴が開く結果になりました。すべての画像で起こるわけではないようですが、あまり大きな画像にしない方がいいのかもしれません。
また、生成時間はデフォルトの30秒から約6分とかなり長くなり、[denoising]と[Ensemble]を両方20にした時は計20分弱にもなります。
終わりに
筆者としては当初の目的を果たせて満足したのですが、実用にはもう少し、といったところでした。とはいえ、元々概念実証的なページだと思われますし、素晴らしい技術であるのは確かです。
次回は再び立体化について模索していきたいと思います。
ではまた。