箱を拡大すれば、銃が大きくなります。この構成では、Blenderで直接、キューブと円柱から小道具をデザインしながら、ComfyUIがビューポートを完成したコンセプトアートにライブで変えます。パーツを動かすと、レンダリングが更新されます。SDXLでもFluxでも動きます。Fluxは遅いものの、出力はより鮮明で高品質です。
オープンソースで、サブスクリプションも検閲もありません。ここでは、ワークフロー全体をゼロから構築します。
ポイント
- キャプチャ: MixlabのScreen Shareノードが、Blenderのウィンドウを取り込みます。
- モデル: 高速なSDXLモデルのJuggernaut XL Lightning:6ステップ、CFG 1.5。
- 深度: Depth Anythingと、SDXL depth ControlNet、強度は約0.55。
- 速度: 更新1回につき、VRAM 4GBのノートPCで約25秒、24GBで15秒。
- コツ: グラウンドプレーンを足し、極端な角度を避け、1つの被写体にすべてのピクセルを与えます。
ワークフローを構築する
1. デフォルトのテンプレートから始める
ComfyUIを開き、Workflow → Browse Templatesに進んで、基本的な画像生成テンプレートを選びます。モデルがすでにあるなら、モデルが見つからないという警告は無視してください。
2. 高速なモデルを使う
ライブ作業では、速度が重要です。私は**Juggernaut XL Lightning**を使います。CFG 1〜2で4〜6ステップしか要らない、非常に高速なSDXLモデルです。KSamplerを次のように設定します。
- Seed: increment。レンダリングに巨大なランダム値ではなく、1、2、3と番号が付きます。
- Steps: 6。
- CFG: 1.5。
- Sampler / scheduler: euler / normal。
- Denoise: 1.0。 denoiseは、元の画像を結果に混ぜる量です。ここで下げると、グレーのBlenderキャプチャが、ただのよりグレーなレンダリングになるだけです。
3. 画面キャプチャを追加する
MixlabノードからScreen Shareを検索します(パックはCustom Nodes Managerからインストール)。多くのノード名が重複するため、Managerが他のパックとの競合を警告することがありますが、ワークフローが巨大でなければ、たいてい問題ありません。
これはJavaScriptのノードで、少しバグがあります。インターフェースがノードの境界の外に描画され、ワークフローを切り替えると、虹色に固まることがあります。ブラウザを再読み込み(Ctrl+R)すれば直ります。これはページの再読み込みで、ComfyUIの再読み込みではありません。
4. リサイズとエンコード
- (Essentialsの)Image Resizeが、キャプチャ画像を1920 × 1088にします。Fluxでもこの数字を使っていて、SDXLでもうまく機能します。今回は、正方形だけでなく横長の画像が欲しかったのです。
- VAE Encodeが、ピクセルを潜在空間に変換します。チェックポイントのVAEを接続し、latentをKSamplerに送ります。Empty Latent Imageノードは削除します。
5. 深度とControlNet
- Depth Anything: モデルをModel Managerから入手し(最大のものが最高の品質になるはずです)、ブラウザを再読み込みして、解像度を短辺の1088に設定します。縦向きに切り替えても、そのまま機能します。
- 深度マップを見るためのプレビューノード。
- Apply ControlNet、すべての入力を支配するノードです。深度画像、VAE、両方のプロンプトがここを通ってKSamplerに行きます。
- SDXL depth ControlNet(これもModel Managerにあります)を使ったLoad ControlNet Model。
この時点でワークフローを保存します。読みやすいように、プロンプトノードの名前を「Positive Prompt」と「Negative Prompt」に変えます。
ライブにする
Blenderとブラウザを、2つの画面か、1つの画面を分割して(Win+左 / Win+右)並べます。Blenderで小道具を単独表示にして、Nを押し、不要なパネルを非表示にします。
プロンプトを書き(私はChatGPTに手伝ってもらいました)、Share Screenをクリックして、Blenderのウィンドウを選び、エリアを設定します。キャプチャするビューポートの部分をフレームでドラッグして囲みます。取り込まれる画像は小さくなりますが、それで構いません。モデルに必要なのは、形のおおよその近似だけです。
Live Runをクリックします。これでBlenderでの変更のたびに、新しいレンダリングが走ります。
最初の修正:ControlNetの強度
最初の結果は引き伸ばされて見えました。キャプチャ領域のプロポーションが、1920 × 1088のキャンバスと合っていなかったのです。領域を、ほぼ正しい形になるまで調整します。
より大きな修正は、ControlNetの強度が1.0で、モデルが深度マップに厳密に従いすぎていたことでした。0.55では、見た目がずっと良くなりました。強度が低いと創造的になり、ランダムなハンドルやパーツを足すことがありますが、それが得になることもあります。
速度: VRAM 4GBの私のノートPCでは、最初の40秒の読み込みの後、更新1回につき約25秒。24GBでは約15秒でした。横長の画像は正方形より大きいので、時間がかかります。編集中は、まだ前の位置をレンダリングしているため、少し遅延があります。
箱を動かしてデザインする
楽しいのは、リアルタイムでのデザイン変更です。私のランチャーは別々のパーツで作られているので、パーツを削除したり、本体を短くしたり、要素を動かして別の武器にしたりでき、レンダリングがそれに追随します。形から得られる複雑さは驚くほどです。
注意点が2つあります。
- 極端な角度は混乱を招きます。強いパースはランダムな要素を足させるので、避けています。
- フレーミングを確認する。 ビューを回転させて、小道具がキャプチャ領域で切れていないか確かめます。
戦車と兵士
戦車のブロックアウトと新しいプロンプトに入れ替えると、かなり見栄えのする戦車ができました。ただ、頼んだほどサイバーパンクではありませんでした。SDXLは写実的にしがちで、Fluxの創造性に欠けます。
グラウンドプレーンを足してください。 深度モデルが地面を見つける助けになります。ないと、オブジェクトが霧の中で浮いてしまうことがあります。あれば、レンダリングは水平線を本当によく読み取りました。戦車のプロポーション変更は、ベベルモディファイア1つで済みます。真上からのカメラは、よりSFらしい結果になりましたが、コンセプトアートとしては今ひとつでした。背中に銃か、排気管のようなものが付いたのです。
ブロックアウトした2人の兵士と新しいプロンプトでは、形を本当によく読み取りました。女性兵士のダブルブレストのプレート、バイザー、モデリングした前腕の金属の装甲、ベルト、さらにSDXLにしては妥当な指まで再現されました。両方の人物を同じ性別にしがちで、SDXLはそういうところが厄介です。
1つの被写体にすべてのピクセルを与えます。 1人の兵士なら縦向きに切り替えます。リサイズを1088 × 1920に変更し、キャプチャ領域をリセットして、Blenderのサイドパネルを非表示にします。すべてのピクセルが1人の人物に使われ、品質が大きく上がりました。
満足したら、ライブ実行を止めて、共有も止めます。これは、デザインを探る手早く低コストな方法です。同じアイデアのより高品質なバージョンは、Fluxによる3Dからコンセプトアートまでの自動化パイプラインと、その前のSDXL版のBlenderとStable Diffusionによるリアルタイムのコンセプトアートをご覧ください。すべてのワークフローとBlenderのシーンは私のPatreonにあります。
動画版を見る (14:59)
上の内容はすべて動画でも説明しています。画面を見ながら進めたい方はこちらをどうぞ。 動画は英語です。
よくある質問
SDXL Lightningのライブレンダリングは、どのくらい速いですか?
VRAM 4GBの私のノートPCでは、初回の読み込み約40秒の後、横長の1920 × 1088の画像で、更新1回につき約25秒でした。24GBでは約15秒でした。
ライブのBlenderキャプチャでは、ControlNetの強度はどのくらいが適切ですか?
約0.55です。1.0ではブロックアウトに厳密に従いすぎ、低くするとモデルがディテールを創作しますが、ときどきでたらめになります。
カメラの角度によってAIがおかしくなるのはなぜですか?
極端なパースが混乱を招き、ランダムな要素を足し始めます。角度は控えめにして、深度モデルが床を見つけられるようにグラウンドプレーンを足してください。
