mcpField
S
scenario-blender-lighting-rendering

scenario-blender-lighting-rendering

github.com/scenario-labsクリエイティブ・メディア1.2k438 回インストール1 日前に更新
リポジトリ

scenario-blender-lighting-rendering について

Blenderでライティング、レンダリング、コンポジットを行う制作者向けのスキルです。照明器具の数値だけでなく、レンダー画像を測定して調整する手順を備えています。

主な機能

  1. 01被写体とカメラ基準の照明配置
  2. 02EEVEEとCyclesのプリセット
  3. 03レンダーと明度構成の分析
  4. 04コンポジターでのライトグループ調整
  5. 05色設定とレンダー品質の監査

活用シーン

  1. 01室内シーンの光源を設定
  2. 02被写体と背景の明度差を調整
  3. 03Cyclesレンダー後の照明バランス調整
  4. 04アニメーションショット間の照明一貫性確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-blender-lighting-rendering

インストール後、Claude Code で/scenario-blender-lighting-renderingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
critique.md
expert-notes.md
procedures.md
sources.md
scripts/
bx_light.py

詳細

ライティング、レンダリング、コンポジット

熟練したライティングで視線の向かう先をコントロールします。形状はグラデーションから生まれ、明度によって被写体を周囲から分離します(彩度を落として確認します)。すべてのライトに光源と目的があり、判断はライトの数値ではなくレンダー上で測ります。制御されたベースから作業し、一度に一つだけ変更して比較します。ここに記載されている関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。無人で作業する場合は、ツールのスキーマをもとに進め、不足している点を明示してください。

必須の背景知識: scenario-blender-expert(実行チャンネル、レビューループ、5.2 の API 変更)。 関連スキル:scenario-blender-texturing-shading(マテリアル、肌の SSS)、 scenario-blender-previs-storyboard(ショット計画、カメラ)。

ツールキット:scripts/bx_light.py(5.2.1 でテスト済み):被写体とカメラを基準に配置するリグ、EEVEE/Cycles のプリセット、カラー設定と監査、5.x のコンポジター用ヘルパー、レンダー分析。インポート方法:sys.path.append("<this skill>/scripts"); import bx_light as BL。

基本方針(専門家ならではの考え方)

  • まず明度で分離します。 Andy Goralczyk は、ほぼすべてのショットで明度によってキャラクターを背景から分離し、彩度を落として確認します。Andrew Price によれば、最もコントラストの高い領域が、意図にかかわらず焦点になります(明るい窓がソファより目立ちます)。被写体を明るくする前に、セットを暗くして解決します。
  • 光源のサイズと距離で調整します。 Andrew によれば、大きな光源は形状を見せて毛穴を目立たなくし、小さな光源は質感やざらつきを見せます。そのため、顔のキーライトには大きな光源を使い、小さな電球は使いません(トゥーン調や、意図的に硬い光にする場合を除きます)。逆二乗則は視線を誘導するためのツールです。補助光を足すのではなく、ライトを近づけます。キーライトとフィルライトの比率に決まりはありません(Andrew:「キーライトの半分というのは根拠がない」)。影側を、ディテールを残しながら影として読める明るさまで落とし、被写体上で測定します。
  • 光源に動機を与え、そのうえで自然な範囲で演出します。 すべてのライトに、世界の中にある光源と色が必要です(Gleb Alexandrov、Lino Thomas)。Andy はリムライトをキーライト側に置きます。影側に置くと、どこからともなく差すバウンス光のように見えるためです。光源が被写体の後ろにあるときは、顔にキーライトを当てるように見せかけます。影を落とすオブジェクトやライトリンクを使えば、こうした演出をセットに影響させずに行えます。Gleb は、画像が「照明されている」と感じる手前で止めます。
  • EEVEE はトレンチコートです(Andrew)。 工場のシーンではレイトレーシングはオフになっています。ボリュームプローブの外側のサンプルが内壁に沿う位置にないと、ワールドライトが壁を通り抜けます(Andrew。リーク量は 0.26 から 0.002 に減少。5.2.1 ではサンプルがボックスの内側に間隔ひとつ分入った位置に置かれるため、ポイントを基準にボックスのサイズを決めます)。ソフトライトにはライトごとのジッター(Gleb)とカスタム距離が必要です(測定では、自動距離を使うと 8 % 損失します)。
  • Cycles の効率化(Andy、Sprite Fright): バウンスは 3 回、コースティクスなし、クランプなし、Fast GI を使い、バウンスはライトで擬似的に作ります。シャープなスペキュラーは目と主役となる金属にだけ残します。
  • 最後までリニアかつ広色域を維持します(Jacob Holiday)。 EXR はリニアのままですが、PNG にはビュー変換が焼き込まれます。AgX はクリッピングを見えにくくするため(リニア値 4 が 0.91 と表示されます)、EXR を確認します。全体の明るさは、ライトをスケーリングせず、ビュー変換の exposure で調整します(ワールドライトやエミッシブを含むすべての比率を維持できます)。シーンには AgX、製品カラーには Khronos PBR Neutral を使います。作業用の色空間は一度だけ設定します(Nathan Vegdahl)。
  • 再レンダリングではなく、コンポジットで再調整します(Wyatt、Robin)。Cycles では役割ごと(キー、フィル、リム、ウィンドウ)にライトグループを分けます。1 回のレンダーの後、コンポジターでゲインを調整します(BL.light_groups、BL.lightgroup_mix)。EEVEE にはライトグループの出力がないため、ライトリンクとビュー レイヤーを使います。
  • 常に軽くコンポジットします(Pau Homs): ブルーム、ビネット、補正の順に加え、フィルターをかけたように見える前に止めます。5.x ではコンポジターはノードグループです。
  • 色には 3 種類のコントラストがあります(Lino): 明度、彩度、色相です。彩度の高い焦点色はひとつに絞り、その補色は広い領域で彩度を落とします。

まず決めること

入力プランが変わる理由指定がない場合のデフォルト
静止画またはアニメーション継続性、ちらつき、時間的なノイズ除去静止画
エンジンEEVEE:スタイライズ表現、高速な反復、ボリューム、NPR、パスを使ったビューポート合成。Cycles:ガラスのクローズアップ、反射光のリアリズム、リファレンス反復にはEEVEEを使用し、Cyclesのリファレンスレンダリングも追加
スタイルトゥーン表現の明暗境界には、ジッターのない小さなキーライトが必要スタイライズされたリアリズム
被写体と注視点リグのターゲット(顔)、解析用のマスクキャラクターの頭部、それ以外はバウンディングボックスの中心
時間帯と動機配色:暖色の実用光、寒色の空、太陽夜明け/夕暮れの室内:暖色のキーライト(2,700 K [added])、寒色のフィルライト
出力表示用PNGとマスター用EXR。外部でグレーディングしますか?PNG + 32ビットのマルチレイヤーEXR
色の忠実度ブランドRGB:Khronos PBR Neutral。肌:ACES 2.0またはAgX High ContrastAgX
後からのバランス調整、コンポジットの引き継ぎ役割別のCyclesライトグループ、マルチレイヤーEXRCyclesでレンダリングする場合はグループを使用

ワークフロー

  1. 構図を決めてから、カメラを固定します。 ライティングは視点に依存します(Andrew)。ルックルームを確保するには BL.screen_xy と BL.aim_camera_at_frame_point(head, 1/3 or 2/3, 0.62) を使用し、箱形の 製品には 80 mm を使用します。GATE:焦点となる要素は 1 つにします。被写体を三分割法のポイント付近に配置するか、意図的な 対称構図、ピラミッド構図、またはフルフレームにします。
  2. ベースを制御します。 スタジオでは、ワールドの強度を 0 にし、ほぼ黒の粗い地面を使用します(Andrew)。EEVEE の室内では、pb = BL.volume_probe_for_room(inner_lo, inner_hi, cell=0.5, wall=0.2)(内壁上の外側サンプル)、BL.probe_report(pb, inner_lo, inner_hi) の順に実行し、その後 BL.bake_probes() を実行します。 屋外では BL.outdoor_sun_sky(..., azimuth_space="world") を使用します。GATE:probe_report にフラグがなく、密閉された室内をワールドのみでレンダリングするとほぼ黒になります。
  3. キーライトを設定します。 BL.three_point、BL.motivated_interior(窓+実用灯、リンクされたキーライトの位置をずらした演出、スポット実用灯、リムライト、バウンスライト)、または BL.outdoor_sun_sky を使用します。ライトは自動的に壁の外に配置されます。 GATE:BL.light_report(target=head, face=head) にフラグがなく(正面からのキーライト、目線より低いキーライト、頭部より小さなキーライト)、クレイレンダー(BL.clay(True))で internal_ratio >= 2.5 になります。
  4. 補助ライトを追加します。 必要に応じてフィルライト、リムライト、バウンスライト、BL.eye_light に加え、BL.shadow_caster、BL.fake_sun、BL.split_world、または BL.haze を追加します。リンク設定は Light データブロックではなく、ライト OBJECT に対して行います(obj.light_linking、BL.link_light 経由)。ライトは 1 つずつ調整します:BL.light_contributions(lights, mask, dir)、または Cycles では 1 回のレンダリングから BL.lightgroup_check(exr, mask) を実行します。GATE:被写体に対する寄与率が最も高いのはキーライトで、室内ではワールドの寄与率が 10 % 未満となり、各リムライトに明確な意図があります。
  5. 測定して見た目を確認します。 r = BL.render(base) は PNG と EXR を生成します。次に mask = BL.mask_cryptomatte(r["exr"], names)(または BL.mask_workbench)、 rep = BL.analyse(r["png"], mask, exr=r["exr"])、BL.verdict(rep)、BL.value_study(...) を実行し、画像を開きます。GATE:判定結果が空で、バリュースタディでは被写体が 1 つの明度グループを占めます。そうでなければ、セットを暗くする、スポットライトや遮光板で陰影を作る、キーライトをリンクするなどして調整します。
  6. カラーを設定します。 BL.color_setup(view, look, exposure) を使用します(明るさはここで調整し、ライトのスケールでは調整しません)。続けて BL.color_audit() を実行します。GATE:監査結果が空で、補色の衝突にフラグが立たず、発光体以外のクリップが最大 0.5 % で、線形の最大値が意図どおりです。
  7. レンダー設定を行います。 BL.preset_eevee(quality="final", interior=...) または BL.preset_cycles(quality="final", budget="film") を使用します。EEVEE の最終レンダーでは、Cycles のプレビューを参照用にレンダリングします(Andrew)。GATE:被写体が Cycles から約 30 % 以内に収まり、レンダーエンジンのアーティファクトがありません(批評セクション 7)。
  8. コンポジットを行います。 Cycles:mix = BL.lightgroup_mix(gains, exr=r["exr"]) は EXR からキーライト/フィルライト/リムライト/窓の光を約 0.2 秒で再グレーディングします(BL.set_gain、RGB ゲインで色を変更)。続けて BL.comp_finish(bloom=0.25, vignette=0.3, contrast=0.05, source=mix["socket"]) を実行します。BL.matte(tree, names) でマスクを作成します。ピクセルサイズには BL.relative_px を使用します。パス、ビューティーパスへの復帰、ビューレイヤーについては手順 P13 を参照してください。GATE:完成フレームで判定を再実行し、ビネット比が下がっていることを確認します。
  9. 証拠を添えて納品します: 最終 PNG、EXR、バリュースタディ、ライトの表、判定結果、未検証の項目。

アニメーション: 場所ごとに sun_azimuth を約 30 deg 以内にして太陽を固定します(Andy)。ワイドショットをライティングし、その設定を各カバレッジショットに引き継ぎます。BL.contact_sheet と BL.sheet_stats を使ってショットを確認します(中央値から 0.5 stop を超えて外れるものを検出)。時間的デノイズを有効にしたままにし、レイトレーシング解像度 1/16 は使用しないでください。

数値

値対象出典
白いカードのレベル:点光源 P/(4π²d²)、面光源 P/(π²d²)、太陽 S/πBL.energy_for実測、両エンジン
光源の大きさが距離と同じ場合、公称レベルの 75 % を照射見かけの大きさ実測
AgX 表示:0.18 は 0.463、1.0 は 0.773、4.0 は 0.910 に対応リニア値実測
キーライトは軸から 40 度、上方に 35 度、被写体半径の 3 倍の距離、サイズ=半径被写体、カメラ[追加] デフォルト
正面からのフラグ:キーライトはカメラ軸から 20 度未満カメラ軸[追加]
太陽の角度は約 2 度、連続性は ±30 度セットAndy
ケルビン値:ろうそく 1,500、白熱灯 2,000~2,500、昼光 6,500(実用上のデフォルトは 2,700 [追加])ライトAndrew
EEVEE:最終レンダーでは RT 1:1、GI 1:2、Fast GI ステップ数 16、シャドウステップ数 12~16(漏れ)、シャドウレイ 2(半影)レンダリングAndrew
ボリュームプローブ:外側サンプルを内壁に配置(サンプル位置はローカル座標の (i+1)/(N+1)x2-1);内側 0.44 m で漏れ 0.22、0.2 m で 0.054、壁面で 0.002、壁を越えた位置で 0.009;サーフェル密度 100部屋Andrew、実測
ブランドカラーの誤差(255 段階):Khronos 3.8、AgX 27~42、Standard 33ホワイトファーネス実測
部屋のヘイズ密度は約 0.05ボリュームAndrew
Cycles のフィルム:バウンス 3、クランプ 0、コースティクスなし、テストではサンプル数 100、最終では 500~1,500レンダリングAndy
EXR:コンポジット用はマルチレイヤー、ハーフフロート、DWAA;マスターは 32-bit出力Robin、Andy
判定基準:周囲との分離 ≥ 0.10、エッジの融合 ≤ 35 %、クレイ形状比 ≥ 2.5、値の範囲 ≥ 0.30、クリッピング ≤ 0.5 %ディスプレイ輝度[追加]、キャリブレーション済み

品質ゲート

測定可能:

rep = BL.analyse(png, mask, exr=exr); problems = BL.verdict(rep)          # [] = pass
flags = BL.light_report(target=head, face=head)["flags"]; audit = BL.color_audit()
probe = BL.probe_report(pb, inner_lo, inner_hi)["flags"]                  # EEVEE interiors: []
groups = BL.lightgroup_check(exr, mask)                                   # Cycles: rel_error ~0, shares
shares = BL.light_contributions(lights, mask, out_dir)                   # per-light share on subject

視覚的な確認:レンダー、value_study パネル(彩度を下げる | 明度グループ | 目を細める)、シーケンスの場合はコンタクトシートを開きます。references/critique.md に従って、第一印象、明度構成、形状、動機、色、構図、アーティファクト、仕上がりを評価します。

よくある間違い

間違い見た目修正方法
正面からのキーライト平坦で、「フラッシュ撮影」のような印象。粘土のような形状比は約1.3キーライトを軸から30〜60度ずらし、目線より高く配置します
被写体の後ろにある実用光源をキーライトとして使用顔がくすみ、明るい壁に視線を奪われる光源側にキーライトをずらして置き、被写体とリンクさせます
壁の近くにシェードのない点光源の実用光源を置く壁が白飛びし、棚が焦点になるシェードの円錐内にスポットを置き、遮光板を使います
プローブなしでEEVEEの室内を使う、またはプローブのボックスを壁まで広げる影が全体的に青/灰色に持ち上がり、濁って見える外側のサンプルを内壁に配置します(probe_report)。ベイクし、密閉空間でテストします
小さな電球を顔のキーライトとして使う毛穴や質感が目立ち、顔がきつく見える大きな光源(頭と同じ大きさ以上)を使い、light_report(face=) でフラグを確認します
ランプのスケール変更で明るくするワールドと放射光がそのまま残り、比率がずれるビュートランスフォームの exposure を使います
light.data.light_linkingAttributeErrorリンクとライトグループはObjectのプロパティです
ライトのバランスを取るために再レンダリングする調整ごとに何時間もかかるCyclesのライトグループと lightgroup_mix を使います
リグのライトを壁の内側に置くリムライトが何の効果ももたらさないavoid=subject(リグのデフォルト)を指定します
リンクされていない偽のキーライト被写体に合わせてセット全体が明るくなり、分離感がないlink_key=True を指定し、キーライトの比率を高く、背景の比率をほぼ0にします
AgX PNGでクリッピングを判断するハイライトは問題なく見えても、EXRでは20以上になるlinear_max を読み取り、露出を調整します
トゥーンマテリアルに大きく柔らかなジッター付きキーライトを使うディザリングが生じ、ターミネーターがノイジーになるNPRでは小さくジッターのないキーライトを使います(Wyatt:トゥーンにはくっきりした影)
反転したハルアウトラインキャラクターが暗くなる、または平坦に見えるアウトラインマテリアルをシャドウレイに対して透明にします(outline_hull)
シェーダー内でのみAOVを指定するパスが何も通知されずに欠落するBL.register_aovs() を使います
ピクセル単位のコンポジット効果プレビューと最終版で見た目が変わるBL.relative_px を使います
レイヤーで間接光のみではなく除外を使うコンポジットで影が欠落するindirect_only を使います(差は0.0004対0.016)

Blender 5.2 の注意事項

  • EEVEE の ID は BLENDER_EEVEE です。デフォルトで use_raytracing は False です。 use_bloom/ssr/gtao/soft_shadows は廃止されました(Glare ノード、レイトレーシング、Fast GI、ライトごとのジッターに置き換えられています)。
  • プローブは SPHERE/PLANE/VOLUME です。lightprobe_cache_bake はヘッドレスで同期実行されます。球形プローブのデフォルト値は 512 です。ボリュームのサンプルはボックスの面上ではなく、面から間隔 1 つ分内側に配置されます。
  • EEVEE は Cryptomatte を出力しますが、Object Index パスはありません。ライトグループは Cycles 専用です(EEVEE の Render Layers には Combined_<group> がありません)。ライトリンクは両方のエンジンで動作します。light_linking と lightgroup は Object のプロパティです。bpy.types.Light にはどちらもありません。
  • コンポジター:scene.compositing_node_group、Group Output、ShaderNodeMix(カラーソケットは 6/7、結果は 2)を使用します。メニュー入力には表示名('Bloom')を指定します。デフォルトのデバイスは GPU です。アセットは datafiles/assets/nodes/compositing_nodes_essentials.blend にあります。
  • カラー:作業色空間は読み取り専用です(bpy.ops.wm.set_working_color_space を使用してください)。ルックには接頭辞が付きます('AgX - Punchy')。'Linear'/'Raw' は受け付けられません。カメラログ色空間があり、窓ガラス用の Principled Thin Wall もあります。
  • トランスフォームの設定後、matrix_world は古い値のままです。view_layer.update() を呼び出してください。OIIO の read_image(subimage, ...) では、最初の引数でパートを選択します。

参考資料

  • references/procedures.md:各段階(P1 の単位から P17 の露出とカラーまで)でテスト済みのコードと、測定結果およびテストパスを掲載しています。コードを書く前に読み込んでください。
  • references/critique.md:レンダーやシーケンスを評価するためのルーブリックです。専門家が読む順に構成され、各質問の後にコードチェックが記載されています。
  • references/expert-notes.md:各専門家の原則とタイムスタンプに加え、意見の相違をまとめた表を掲載しています。判断や出典の明示が必要な場合に読み込んでください。
  • references/sources.md:15 本の動画、認証情報、最適なタイムスタンプ、および質問ごとに参照すべき動画を掲載しています。

コメント