mcpField
B
blender-weather-fx

blender-weather-fx

github.com/el4cteoクリエイティブ・メディア56986 回インストール2 週間前に更新
リポジトリ

blender-weather-fx について

Blender のシーンに雨、雪、ほこり、灰、火の粉、濡れた表面、水たまり、雷を加えるスキルです。ループ可能な降水や、元に戻せる表面変更など、調整可能な天候表現を必要とする制作に向いています。

主な機能

  1. 01雨・雪・ほこり・灰・火の粉の降水
  2. 02シミュレーション不要のループ粒子
  3. 03濡れた表面、水たまり、波紋、積雪
  4. 04稲妻の閃光と分岐する落雷
  5. 05元に戻せるマテリアル変更と天候マスク

活用シーン

  1. 01反射を伴う雨の夜景を作成
  2. 02地形や屋根に積雪を追加
  3. 03シーンアニメーションに天候効果を追加
  4. 04リアルタイムエンジン用の天候マスクを出力

インストール

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

$npx skills add https://github.com/el4cteo/blender-skills --skill blender-weather-fx

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

同梱ファイル

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

references/
realtime-engines.md
weather-values.md
scripts/
_bpyx.py
lightning.py
precipitation.py
surface_weather.py

詳細

Weather FX

実行モデルは blender-core にあります。空、太陽/月、霧、ムードは blender-time-of-day で設定するため、まず scene_mood.py を実行してから、天候を追加してください。レンダリング設定は blender-rendering にあります。

それぞれ1回の呼び出し

scripts/precipitation.py -- --type rain --intensity heavy --ground Street Roofs --wind 2 0
scripts/surface_weather.py -- --objects Street Car Walls --wetness 0.7 --puddles 0.4 --ripples 1 --streaks 0.5
scripts/lightning.py -- --flashes 2 --strokes 3
scripts/precipitation.py -- --type snow --intensity moderate --ground Terrain
scripts/surface_weather.py -- --objects Terrain Roofs --snow 0.8 --snow-depth 0.06
scripts/surface_weather.py -- --objects Street Car Walls --remove     # exact restore

雨の夜:scene_mood.py --time night --fog-visibility 250 → 雨 → 濡れ+水たまり → 雷。夜の雨と水たまりが、濡れたシーンをリアルに見せます。濡れた表面が、実用照明の光をすべて反射します。

precipitation.py(雨、雪、ほこり、灰、火の粉)

  • ENV_Weather_<Type> に GN モディファイアーを作成します。そのボックスは、フレーム範囲全体でカメラに映る範囲をカバーします。ワールドに固定されるため、カメラを動かしても雨が引きずられません。カメラがない場合は、18 m のボックスをカバーします。地面は --ground の最も低い面の上端です。
  • シミュレーション不要のシームレスなループ:各パーティクルはループごとに N 回(Lives)全体を生きるため、最終フレーム + 1 は最初のフレームと完全に一致します。任意のフレームを単独でレンダリングでき、ヘッドレスでも動作します。
  • 実際の速度:雨は 7 m/s(豪雨/嵐では 9)、雪は 1、灰は 0.6、ほこりは 0.15、火の粉は 1.5 で上昇し、--wind X Y(m/s)と組み合わせます。
  • 地面:--ground オブジェクトに対するレイキャストにより、最初に当たった位置でパーティクルを停止します(屋根、ひさし、道路など)。雨はヒットごとに 80 ms 続く水しぶきの王冠を発生させ、表面の法線に合わせます。
  • モーションブラーではなく筋:雨は、移動方向に沿った長さ = 速度 × ½ フレーム(180°シャッター)の 3 面の筋です。モーションブラーをオフにすると軽くなり、見た目は同じです。
  • カメラから 1.5 m 未満のパーティクルは非表示になります(Near Clear)。巨大な粒は映像を台無しにするためです。ビューポートには 10%(Viewport Fraction)、レンダリングには 100% が表示されます。
  • 強度ごとの密度(パーティクル/m³):雨は 5/15/40/80、雪は 10/30/80/160 です。--density で上書きできます。数は --max-count(400k)で上限が設定され、上限に達すると警告が表示されます。
  • すべての値はモディファイアー入力(Count、Speed、Wind、Lives、Particle Size、Streak Length、Sway、Ground、Splash など)として保持されるため、再実行せずにそこで調整できます。

surface_weather.py(濡れ、水たまり、波紋、筋、雪)

  • 各 Principled BSDF の前に ENV_Weather シェーダーグループを 1 つ配置し、元の設定をマテリアルに記録します。--remove を指定すると、リンクと値を正確に復元します。
  • 濡れ(Lagarde モデル):多孔質のアルベドが(--porosity × 最大 55%)暗くなり、粗さが下がり、水膜が Coat として追加されます。アスファルト、コンクリート、木材、布には多孔度 0.6~0.9、金属、ガラス、プラスチックには 0.1~0.2 を使用します。
  • 水たまり:上向きの面に、ドメインワープされたワールド空間ノイズを適用します。範囲はおよそ --puddles、特徴のサイズは --scale(m、既定値 3)です。水たまりの中では、コートが最大になり、ミラーコートの粗さは 0.02 になり、ベース法線が平坦化されます。水がひび割れを埋めるためです。
  • 波紋:frame ドライバーによって駆動される、約 17 cm のセルごとに 1 つの広がる波紋です(単純な式なので、自動実行スクリプトがなくても動作します)。水たまりの中にのみ表示されます。
  • 筋:壁面の垂直ノイズによって、コートの流れ筋を追加します。
  • 雪:上向きの面に、ノイズのある縁、アルベド 0.9、粗さ 0.6、細かなバンプを適用します。--snow-depth を指定すると、ENV_SnowCover GN モディファイアーで実際の厚みを追加します。上向きの面を細分化し、決してゼロにならないノイズ高さで上方向に押し出すため、Z ファイティングは発生しません。サブサーフェスを備えた ENV_M_Snow マテリアルを使用します。
  • --vertex-mask を指定すると、エンジンシェーダー用に ENV_Weather カラー属性(R は水たまり、G は雪、B は壁面)を書き込みます。

lightning.py

  • 1 回の落雷は、約 50 ms 間隔の 3 回の帰還雷撃(24 fps でもちらつきが読み取れるよう、少なくとも 2 フレーム間隔)で構成され、それぞれピークの後に 2 フレームの減衰が続きます。--strokes、--flashes、または --frames でタイミングを設定します。フラッシュには、シーンのキーライトに対してキー設定された、クールな ENV_Storm_Flash サンライト(12°のソフトライト)を使用します(×2.5)。
  • ENV_Storm_Bolt は、フラッシュと同時にキー設定される、分岐した発光カーブ(中点変位+4 本の枝)です。既定では 300 m 離れた、画面内の中心から外れた位置に配置されます。ワールド背景の強度もフラッシュします(スキップするには --no-sky を指定)。
  • キーには LINEAR 補間を使用します(フラッシュはイーズではなく、瞬時に切り替わる必要があります)。

ルール

  • 雨は暗い背景に対して逆光または横からの光が当たったときにだけ見えます。雨の向こう側に実用照明や明るい空を配置してください。正面から光を当てると、雨は見えなくなります。
  • レイヤーを組み合わせてください。霧(空気感)+雨筋(中景)+水しぶき/波紋(地面)+濡れた反射です。どれか1つだけでは不自然に見えます。
  • 実際のスケールが必須です。速度、密度、水たまりの大きさはメートル単位です(blender-scene-setup)。
  • 最終解像度でレンダリングして確認してください。雨の密度や雨筋の見え方はビューポートでは確認できません(カウントは10%で、霧は表示されません)。
  • アセットをエクスポートする場合は、雪のジオメトリに対して blender-asset-qa を実行してください。

ゲームとリアルタイム

天候はエンジンのシステムです(Unreal Niagara、Unity VFX Graph、Roblox ParticleEmitter)。Blenderからはマスクをエクスポートしてください。頂点カラー属性(--vertex-mask)またはベイク済みテクスチャ(blender-texture-baking による濡れたマテリアルのセルフベイク)と、積雪カバーメッシュを使用します。詳細はreferences/realtime-engines.mdをご覧ください。物理値とルックライブラリについては、references/weather-values.mdをご覧ください。

注意点

  • GNパーティクルはインスタンスであるため、object.data は空のままです。評価済みのdepsgraph(depsgraph.object_instances)から結果を読み取ってください。
  • バックグラウンド(-b)での評価は Is Viewport ノードにとってビューポートとして扱われるため、ヘッドレステストではカウントの10%しか確認できません。レンダリングでは100%になります。
  • 地面オブジェクトは ENV_Weather_<Type>_Ground コレクションにリンクされます(移動ではなくリンクです)。
  • surface_weather は共有マテリアルを変更します。そのマテリアルを使用するすべてのオブジェクトが濡れます。対象を限定するには、先にマテリアルを複製してください。
  • コートは両方のエンジンで表示されます。水たまりの反射を適切に表示するには、EEVEEでレイトレーシングを有効にする(eevee.use_raytracing)必要があります。

コメント