見出し画像

AUTOMATIC1111+ControlNetのつかいかた3(デプスマップで建物を)

キャラをポーズ取らせる方向の記事は他の方に任せて、自分の得意な背景描きの方向で研究しました。
今回の目標は、AI風景画の3D化。
画像からMidasとかで作ったデプスマップはぐにゃぐにゃでとてもポリゴンモデルにできたものではありませんが、ControlNetのDepthならポリゴンから画像を、確実に狙った形にできるのがわかったので、それを利用して背景を3Dポリゴンに焼き込めないかという目論見です。
Blenderでモデリングできて、UVまで作れる人向けの記事です。

BlenderにはすでにDreamTextureというアドオンがありますが
現時点ではまだcontrolnetに対応しておらず、SD1.5しかデプスマップを利用できません。またプロジェクション機能はマテリアルとUVをまるごと書き換えてしまうのも使い勝手が悪いという感想でした。

Blenderでデプスマップを書き出す方法

コンポジターから、「ノードを使用」をオンにして、レンダーレイヤーのDepthをコンポジットの画像ノードに繋ぎ変えれば良いのですが、
Depthの項目がありません。

おま環の可能性がありますが、DreamTextureを入れてると出なくなるのかもです。
レンダープロパティからDreamTextureの項目を開き、「pass inputs」を切り替えるとコンポジターにdepthのノードが出現しました。

深度もしくはカラー+深度

これで、「画像」を「深度」に繋ぎ変えればデプスマップがレンダリングできます。
※DreamTextureを削除してもDepthの項目は戻らず消えたまま、触れなくなりました。絶対おかしいのでこの辺情報どなたか…

次に出力プロパティで、画像サイズをWidth768x512あたりにします。
(適切なサイズはVRAMの容量と相談)

Blenderでポリゴン構築

ビルに見立てた立方体のポリゴンを作ります。UVマップもしっかりつけます。造形が細かいほど精度は上がりますが、作りこみすぎると手間がかかって本末転倒

作ったら、カメラモードにします。右のタブ>ビュー>「ビューをカメラに固定」をオンにしてから、ポリゴンが画面に収まるようにカメラをセットします。できるだけ正面を向けて、しかしほんのりパースがつくように。

複製して側面・裏側を表に向けて並べるのもいいです。解像度を犠牲にしますが、同じシード=絵柄と天気と昼夜の条件がすべて一致した絵が取得できましょう。

斜めのアングルの絵も撮ります。

複数のアングルのカメラを使うするには、カメラを複製するか、タイムラインにカメラとキーフレームを保存します(どっちが良いかは一長一短)

F12を押してレンダリング、デプスマップが生成されることを確認して画像を書き出します。

AUTOMATIC1111+ControlNetで作画

AUTOMATIC1111を起動し、ControlNetを有効化し、preprosessorはnoneのまま、モードはdepthにして画像を生成します。
モデルは建物得意なCounerfeitV2.0。建物に向いたプロンプトは、japan,cityscape, 4f buildiing,window,masterpiece, best quality, cinematic strong lighting,8k,とか…まあcivitaiやAI画像サイトで公開されてるものを参考に、自分で考えて。(綺麗すぎても使い勝手が悪いのだ)

が、これではdepthの影響力が強すぎてほぼディテールのないツルツルの箱のまま生成されてしまいます。Depthのweightを弱めてもほぼ効きません。

ビルには見えない

そこで、テクスチャとレンダーに一手間加えます。
フリーテクスチャサイトで拾った建物の画像、生成した建物絵とかをテクスチャにビルぽく貼って(テクスチャをレタッチするかテクスチャペイントで貼るかして)、ノイズ情報を付与します。

ここまでしなくても、ドアや窓のあたり線を四角く描ければいいはずですが、問題はBlenderのペイント機能はど貧弱で、ドア窓ビルの画像を持ってくるしかない

コンポジターで、深度に画像をわずかにミックスします。

試したけどノーマル、バンプ、ディスプレイスをデプスマップに足すことはできなさげだったのでこんな方法をとりました…まあ、ほしいのはノイズなので雑にカラーをうっすら合成するだけで十分です。多分

うっすらすぎて見えないけど効いてます


これをデプスマップにしてcontrolnetに使えば、ほどよくゴチャッとした建物の壁面が生成できます。

ノイズとは言ったものの、割と元の画像に引っ張られます

原寸で生成せず、hires.fixをかけると、ディテールが盛られます。
CounterfeitV2.0の場合、設定の目安は
samplingmethod DPM++2M Karras、sampling steps28、
Width768x512,upscaler latent、Upscale by 1.5、Hires step30以上、DenoisingStrength0.5-0.6、そしてClipSkip1
CounterfeitV2.0の場合、解像度が0.5k-1.2k程度かつClipSkipが1でないと、きれいに作画しません。このへんモデルごとに設定が違います。ClipSkipは重要なくせにデフォで表示されないので、settingをいじって常に表示させます。override settingにも注意です

なおV2.5だと、箱モデルが高確率で商品棚とか小物に認識されて使えませんでした

斜め向いた絵の場合、hires.fixがパースを無視しやすくなります。

L字型の箱に注目

生成中は絶対Blenderを使用もしくは起動しないでください。可能な限りGPUを使いそうなアプリは終了させ触らないようにします。

作った画像をBlenderに持ち込み、転写する

生成が終わったら、Blender(の箱モデルを並べたファイル)に戻ります。
カメラモードをオンにし、箱モデルを選び、テクスチャペイントモードで生成した絵を転写します。

画像をテクスチャプロパティからセットし、ブラシのツールタブからテクスチャをセット、「マッピング」を「マスク」モードにして、アス比をあわせ、マスクとなる画像を手動でカメラのフレームに持っていき(同じアス比になってるはず)、
あとは、画像の使えそうなとこを塗っていきます。
他の面を塗りそうなとこ、角度が斜めすぎるとこ、絵柄や光源が違うとこ、気に入らないとこを避けて塗うりわけると…こうなります。

1枚の画像だけでなく、複数の画像を部分部分転写していいとこ取りを狙います。何なら、塗った箱をまたレンダリングしてそれを足がかりにさらに精度の高い画像を生成することも狙えます。

面ごとに絵がバラバラだとチャチさが際立ちます。できるだけ似たデザインで、隣接する面をきれいに回り込んで塗れると見ばえがぐっと上がります。全面それができれば理想ですが…

この記事書き始めたときはカメラ正面を向いてない箇所でもぴったり一致して塗れることを期待してましたが、ControlNetは、絵描きモデルが学習してるパース、構図の中からできるだけ近い絵を探し出して描画させてるようで、真正面を向いてる面以外は完全には一致せず、斜めパースで転写した絵はほぼ歪みます。

まあこれくらいならレタッチで補正できなくもないけど

(だからこそ嘘パースによる魅力が発揮されるとも言える)
かといって、平行投影で正面を向いた面だけデプスマップにしても、建物とみなされません。パースの効いたレイアウトにたまたま正面向いてる箱がある、という体にしないと。
また屋上を真上から見た絵も学習されてないようで、全く生成されませんでした。

箱以外の形状では?

これでは面白くない結果なので、もっと調べます。

こういうもっと作り進めた建物で更に試してみました。
個人商店

一番作画が安定してました。2階建てで1階が店なのはわかってくれましたが、建物両端の壁が矩形でないことは認識できなかった。

曲面の多い建物

hires.fixがかかる段階で確定で曲面が潰れ、箱型な建物にされました。

hires.fixなしにせざるを得なかった。

カートゥーンなゆがんだ建物

Counterfeitはカートゥーンやファンタジーな様式を学習してないのか、デプスを無視して意地でも壁と窓をまっすぐにしようとします。hires.fixなしでもだめ。

日本のアパート

ぼちぼち忠実ですが、ちゃんと窓の形をかかないと2階に玄関ができるようで。
角度によっては瓦屋根が嘘パースになりました。

使えるのかというと

手の込んだ建物モデルを作るためのたたき台、建物モデルのテクスチャにアニメ質感を手早く付与するのに使えそうな感じはします。
建物の形状に合わせた画像を生成できるようになった、というのは地味に大きいはず。ここからポリゴンを細かくして元絵を再現するまで造形しようとしたら、なにもなしで作るよりは難易度はだいぶ下がるはずです。

フォトリアルなテクスチャの自動生成はままあれど、手書き風の自動生成となると非常に少なく、手書きで建物の全部をレタッチはとんでもないコストだし、そういう方向にも意義はあるのでは。

コツをつかめたら、建物を並べまくったシーンまるごとテクスチャに転写(プロトタイピングの粋を超える品質で)も…できたらいいですね。形状と構図次第ではできるかも

この記事が気に入ったらサポートをしてみませんか?