平面、球、そして一握りのキューブが、2つの崖の間の島にある灯台になります。このガイドは最初から最後までを扱います。基本的なBlenderのブロックアウト、深度パス、深度ControlNetを使ったStable Diffusionによるフォトリアルな画像、そしてレンダリングを3Dの形に戻してカメラを動かせるようにするカメラプロジェクションです。Stable Diffusionが初めての人向けです。
このプロセスで気に入っているのは、最終的な構図を自分で制御できることです。プロのアーティストとして、実現する時間より常にアイデアのほうが多くありました。この方法なら、比較的少ない手間で、多くを試せます。
ポイント
- ブロックアウト: 海は平面、島はUV球、崖と灯台はキューブ。33 mmのカメラ。
- 深度パス: Zパス → Map Range → Invert Color。view transformはRaw、16ビットPNG。
- Stable Diffusion: AUTOMATIC1111にepiCPhotoGasmとControlNet拡張:Depth、プリプロセッサーdepth_zoe、weight 0.75。
- プロジェクション: UV Project from View、Backgroundシェーダー、十分なサブディビジョン。
- プロジェクトファイル: BlenderシーンはGumroadで無料です。
この動画ではAUTOMATIC1111を使いました。同じ発想をComfyUIで、カメラを動かしながらライブで行うには、BlenderとStable Diffusionによるリアルタイムのコンセプトアートをご覧ください。
1. Blender 4.3でシーンをブロックアウトする
Blender 4.3のインターフェースは、以前のバージョンと少し異なります。ここにあるのは、すべて最も基本的なものです。
- 海: Shift+A → Mesh → Plane。Gで動かし、Sで拡大してずっと大きくします。
- 島: UV Sphereを平面に沈め、Shade Smoothにします。
- 灯台: 背を高く拡大したキューブ。小さな建物をいくつか、まばらに足します。多すぎないように。
- 崖: さらにキューブをShift+Dで複製し、傾けて拡大します。
カメラを追加します。2つ目のビューポートを下にドラッグし、カメラビュー(View → Cameras → Set Active Object as Camera)にして、カメラを見失わずに移動できるようLock Camera to Viewを有効にします。焦点距離は33 mmで、風景には少し広角です。
その後、島の周りに崖を置いて開けた空間を作り、真ん中に小さな島を置きます。灯台、城、SFの塔などです。私はここで最も時間を使い、岩を動かして拡大します。大きな形と小さな形の間の大きなコントラストと、主要な被写体に目が引かれることを求めます。この構図はシンプルで、被写体はちょうど真ん中に置きます。
空: 平面を複製して、R(Ctrlを押しながらスナップ)で垂直に回転させます。遠すぎないようにしてください。非常に遠い平面は、深度の値を歪めることがあります。
Output Propertiesで、Stable Diffusionが速く動くように解像度を**50%**に下げます。
2. 深度パスをレンダリングする
深度パスでは、白いピクセルが近く、黒いピクセルが遠くです。
- View Layer Properties → Passesで、Zを有効にします。
- Compositingワークスペースに切り替えて、Use Nodesをクリックします。
- 1回レンダリングします。シーンのライトは深度パスに影響しないので、シンプルなライトで構いません。
- Viewerノードを追加して、レンダリングのDepth出力を接続します。最初は画像が露出オーバーです。
- その間にMap Rangeを追加し、グラデーションが適切に見えるまでFromとToの値をドラッグします。私は、欲しい見た目になるまでスライダーを左右に動かしただけです。
- Invert Colorを追加します。このパスは、そのままでは正しい向きになりません。
- Render Properties → Color Management → View Transform: Raw。 より柔らかく、明確な範囲が得られます。
- Invert ColorをCompositeノードに接続してレンダリングし、**PNG、16ビットのカラー深度、圧縮0%**で保存します。16ビットのほうが、より豊かな画像になります。
3. Stable DiffusionとControlNetをインストールする
AUTOMATIC1111の最も簡単なインストールは、v1.0.0-pre releaseです。sd.webui.zipだけをダウンロードし、解凍して、run.batを実行します。追加のパッケージのダウンロードに1分以上かかるので、時間をかけてください。
- モデルは、Stable Diffusionのmodelsフォルダに置きます。私はCivitaiで見つけました。よく使ったのは、リアルな画像に最適なepiCPhotoGasmです。他のスタイルはCivitaiで検索して、同じフォルダに入れてください。
- ControlNet拡張: web UIで、Extensions → Install from URLに進み、
https://github.com/Mikubill/sd-webui-controlnetを貼り付けてインストールします。その後、Installed → Check for updates → Apply and restart UI。 - ControlNetモデル: Hugging Faceのlllyasviel/ControlNet-v1-1から、拡張のmodelsフォルダにダウンロードします。私は主にdepthを使います。canny(線の検出)もダウンロードしましたが、このガイドで使うのはdepthだけです。
ControlNet自体は、Adding Conditional Control to Text-to-Image Diffusion Models(Zhang et al., 2023)で説明されています。
4. 画像を生成する
txt2imgタブで次のようにします。
- チェックポイント: epiCPhotoGasm。
- 幅 × 高さ: レンダリングに合わせて960 × 540。
- Seed: 10、固定。調整中にバリエーションが欲しくないからです。
- ControlNet: パネルを開き、DepthをクリックしてEnableにチェックを入れます。プリプロセッサーを、デフォルトのdepth_midasよりずっと良いdepth_zoeにします。深度のPNGをドラッグして入れます。
- Control weight: 0.7から始めます。低い値ではバリエーションが増え(0.2では、結果がシーンとまったく違います)、1.0でも壊れます。0.5〜0.9にとどめてください。
プロンプトは、見えたままです:「canyon, lighthouse, small island, sea, sunny day, limestone」。「limestone」をIrelandのような国に入れ替えると、まったく違う風景になります。
形の周りのハローは、たいていControlNetのweightが原因です。0.6に下げると一部は消えましたが、失敗が出ました。0.75がちょうど良く、0.8では手前にビーチが加わりました。
Hires. fixは解像度を2倍にします。VRAMによって、動いたり失敗したりします。たいてい数分かかり、きれいに実行するためにコンピューターを再起動する必要があることもあります。2K版は品質がずっと高くなりますが、ディテールが1K版から変わります。一貫性を保つ方法はまだ分かりません。ご存知なら、動画にコメントしてください。
すべてはweb UIのoutputsフォルダに自動で保存され、試行の終わりのないギャラリーになります。
途中でうまくいかなかったこと
- Weight 1.0で画像が壊れました。0.5前後で溶け込み始めます。
- Depth Midasは、島とまったく関係のない、全然違うものを生成しました。
- 弱い深度グラデーションは、手前にビーチを作ったり、中景のオブジェクトを前景に溶け込ませたりしました。Rawのview transformと良好なMap Rangeを使ってください。
- ごちゃごちゃした背景: きれいな背景を得るには、プロンプトを変え、Blenderで島とディテールを動かす必要がありました。
depth_zoeと良好なweightを得てから、良い画像が出始めました。陰鬱な中世の城、ヨルダンやイエメンのような国、近未来の城も試し、かなり現代的な見た目になりました。そこでの前景の岩は私のキューブで、ブロックアウトに本当によく従います。
5. レンダリングをシーンに投影し直す
- カメラとライト以外のすべてのオブジェクトを選択し、Tabを押して、Aで全選択します。
- UV → Project from Viewを、カメラから実行します。
- 1つのオブジェクトに新しいマテリアルを与え、Principled BSDFからBackgroundシェーダーに切り替えます。反射はなく、テクスチャの平面的な投影です。
- Shadingワークスペースで、Stable Diffusionのレンダリングを入れたImage Textureを追加して接続します。
- 見えているものをすべて選択し、最後にテクスチャを付けたオブジェクトを選択して、Ctrl+L → Link Materialsを押します。
最初は、投影がずれて見えます。メッシュをサブディビジョンします(球はすでに十分密なので除き、崖、空、水に)。Edit ModeでSubdivideを数回行ってから、もう一度Project from Viewします。すべてが正しく見えるまでに、もう一度サブディビジョンが必要でした。これでカメラを動かすと、3Dシーンとして読み取れます。
ブロックアウトに足りないものを直す
- 灯台の上部: キューブが届いていませんでした。Shift+右クリックで3Dカーソルを置き、円柱を追加して、空間を埋めるように拡大・テーパーし、Backgroundマテリアルを与えて、もう一度Project from Viewします。ヤシにも仮の球で同じことをしました。後で、ハローを取り除くために、上部を円柱に分けました。
- 空: Photoshopで、レンダリングの空からきれいなグラデーションを作りました。マテリアルのユーザー数(17)をクリックすると単独ユーザーのコピーが作られるので、そこで新しい画像に入れ替えました。
- 岩のエッジは、カメラが動くと見えます。岩を少し後ろに下げると、小さな動きではクリッピングがずっと目立たなくなります。
6. 水とカメラムーブ
海の平面では、マテリアルをroughness 0の新しいPrincipled BSDFに置き換えます。HDRIを反射するので、Render Propertiesでレイトレーシングをオンにして(4.3では少し動作が異なります)、シーンの鏡面反射を得ます。
次にさざ波を足します:Noise Texture → Bump(カラーをHeightへ、NormalをシェーダーのNormalへ)。その前にTexture CoordinateとMappingを置きます。Mappingのlocationにフレーム1でキーフレームを打ち、フレーム250で動かして再びキーフレームを打ちます。最初の試みは速すぎたので、動きを0.1 mまで下げて、控えめなアニメーションにしました。
レンダリング前に:
- ビューポートのサンプルを256に上げます。
- view transformをRawからStandardに戻し、レンダリングのImage(depthではなく)をCompositeノードに接続して、解像度を**100%**に戻します。
- 岩をいくつか水に沈め、水を前景に持ってきます。
- カメラにフレーム1でキーフレームを打ち、フレーム150で少し近づけて再びキーフレームを打ち、出力フォルダにRender Animationします。速くするため、動画ファイルとしてレンダリングしました。
その後、グリーンランドやタイのような他のプロンプトを試し、フォルダ内のテクスチャを入れ替えて、同じシーンの新しいバージョンを作りました。Blenderのシーンは私のGumroadで無料です。
動画版を見る (23:27)
上の内容はすべて動画でも説明しています。画面を見ながら進めたい方はこちらをどうぞ。 動画は英語です。
よくある質問
ControlNet用に、Blenderから深度マップを書き出すにはどうしますか?
View Layerのプロパティで、Zパスを有効にします。次にCompositorで、DepthをMap RangeとInvert Colorに通し、近くが白、遠くが黒になるようにします。View transformをRawにして、圧縮なしの16ビットPNGとして保存します。
深度マップには、ControlNetのweightをいくつにすべきですか?
0.5〜0.9です。1.0では画像が壊れ、0.6では失敗が出ました。0.75がちょうど良く、0.8では手前にビーチが加わりました。
Depth ZoeとDepth Midasのどちらですか?
Depth Zoeです。Midasでは、結果が島とまったく関係のないものになりました。
中景のオブジェクトが前景に溶け込むのはなぜですか?
深度マップのグラデーションの変化が足りないからです。View transformをRawにして、Map Rangeを調整し、均一で良好なグラデーションにしてください。
