結論:Blenderの深度パスと法線パスをComfyUIのControlNetに渡すと、見た目では4つの物の並びが元の場面と同じ画像になりました。輪郭の重なり(F値)はControlNetなしの0.09に対し、深度0.40・法線0.40です。cannyは既定のしきい値(0.4/0.8)だと0.23と弱く、0.1/0.2に下げると0.53で最も高くなりました。法線を公式の色の決まりに直しても、配置の守り方は変わりませんでした。
Blenderで組んだ構図をAI画像に生かしたいとき、どのパスをControlNetに渡せばよいかは試してみないと分かりません。当サイトの検証機(RTX 4070 Ti SUPER)で、Blender 3.6.11の同じ場面から書き出した3種類のパスを渡し、構図の守られ方を数値で比べました。
BlenderとComfyUIはどうつなぐ?
Blenderでパスを画像として書き出し、ComfyUIのLoad ImageからControlNetに読ませます。アドオンは使わず、ファイルでつなぐ方法です。
ビューレイヤーのプロパティの「パス」で「Z」と「Normal(法線)」を有効にします(Cycles)。
レンダーレイヤーの各パスを「ファイル出力」ノードにつなぎ、OpenEXR(32bit)で保存します。
深度は「近いほど白」に正規化し、法線はカメラ基準の向きに直して色にします(下のコード)。
Load Image → Load ControlNet Model → Apply ControlNet(強さ1.0)→ KSamplerの順につなぎます。cannyはレンダー画像をCannyノードに通してから渡します。

import numpy as np
# depth: Zパス / nw: ワールド法線 / R: カメラの回転行列(ワールド←カメラ)/ obj: 物体の画素
d = np.zeros_like(depth); lo, hi = depth[obj].min(), depth[obj].max()
d[obj] = (hi - depth[obj]) / (hi - lo) # 近いほど白
n = nw @ R # ワールド→カメラ
color = np.stack([(-n[...,0]+1)/2, (n[...,1]+1)/2, (n[...,2]+1)/2], -1) # 赤=左・緑=上・青=手前
深度・法線・cannyで構図の守り方は違う?
深度と法線は、見た目では物の並びが元の場面どおりでした。cannyはしきい値しだいで、既定のままだと部屋の角や物の一部しか残りません。
立方体・球・円錐・トーラスを床に置いた場面(512×512)で、プロンプト・seed(1〜4)・25ステップ・cfg 7.0を全条件でそろえ、SD1.5系のチェックポイントで生成しました。構図の守り具合は、Blenderの物体番号のパスから作った「物体の境目」と、生成画像の輪郭がどれだけ重なるか(許容3px・F値・1が最大)で測っています。並びの判断は20枚を並べて目で比べたもので、物の位置を数値では測っていません。
| 渡したもの | F値(4本の平均) | seedごとの範囲 |
|---|---|---|
| ControlNetなし | 0.09 | 0.07〜0.13 |
| canny(しきい値0.4/0.8=既定) | 0.23 | 0.20〜0.26 |
| canny(しきい値0.1/0.2)※ | 0.53 | 0.40〜0.59 |
| 深度 | 0.40 | 0.32〜0.50 |
| 法線(公式の色の決まり) | 0.40 | 0.30〜0.44 |
| 法線(そのまま) | 0.45 | 0.35〜0.58 |
※ 既定の結果を見た後に追加で測った条件です。このとき既定の4本も生成し直し、元の4本と画素単位で完全に一致しました(同じseedなら同じ画像)。

法線は公式の色の決まりに直すべき?
今回の測り方では、決まりどおりに直しても配置の守り方は良くなりませんでした。
ControlNet 1.1の公式READMEは、レンダリングエンジンの法線マップは「色が正しければ(青が手前・赤が左・緑が上)」使える、としています。当サイトは測る前に「決まりどおりの法線のほうが守る」と予測しましたが、結果は逆で、そのままの法線のほうがF値が高くなりました(4本中3本)。そのままの法線でも面ごとに色が違うので、物体の境目は伝わります。F値は輪郭の重なりを測るもので、立体感や光の当たり方が正しいかは測っていません。
cannyのしきい値はどう決める?
レンダーのコントラストが低いなら、しきい値を下げます。ControlNetに渡る輪郭の量が大きく変わります。
ComfyUIのCannyノードの既定(0.4/0.8)では、今回のレンダーから取れた輪郭は1,096画素でした。0.1/0.2では2,982画素で約2.7倍になり、F値も0.23から0.53に上がりました。この4枚は、見た目でも4本とも物の並びが元の場面どおりでした。Cannyノードの出力をプレビューして、物の輪郭が線として残っているかを確かめてから生成すると確実です。
VRAMと生成時間はどのくらい?
512×512・25ステップなら1枚およそ3秒で、GPU全体の使用量は最大5,503MiB(約5.4GiB)でした。
時間はComfyUIの実行記録の開始から終了まで、VRAMはnvidia-smiで0.5秒ごとに読んだGPU全体の使用量です。20枚の生成時間の中央値は3.2秒で、最初の1枚だけモデルの読み込みを含めて6.6秒でした。VRAMはGPU全体の使用量(ComfyUI以外も含む)の最大で、16GBの検証機では余裕があります。Blenderと画像生成を1台でこなすGPUの選び方はRTX 5070 Tiは3DCG・ローカルAIでオーバースペックかで比べています。
測った範囲:場面1つ・チェックポイント1本・seed 4本・512×512です。F値は横方向のずれに鈍く(輪郭を横に10pxずらしても0.47)、一般化はできません。
まとめ
BlenderとComfyUIは、パスを画像として書き出してControlNetに渡せばつながります。配置を守らせたいなら深度か法線が手堅く、cannyはしきい値を下げると最もよく効きました。ComfyUIの基本はComfyUIの使い方入門、VRAMの目安は16GBで20B画像モデルを測った記事、Blenderの始め方はBlender入門で解説しています。

コメント