YukkuriMovieMaker4(YMM4)上で動作する、映像に放射状の光線(ゴッドレイ)を付加するエフェクトプラグインです。 HLSL ピクセルシェーダーを Direct2D カスタムエフェクトとして実装しており、GPU 上でのリアルタイムレンダリングが可能です。 光源位置・光線の強度・拡散具合・色などすべてのパラメータがキーフレームアニメーションに対応しており、プレビュー画面上でドラッグ操作による直感的な光源位置の調整もできます。
本プラグインは YMM4 の「エフェクト」として動作します。対象クリップの映像に対して、指定した光源位置から放射状に広がる光線(ゴッドレイ・薄明光線)をリアルタイムで合成します。
内部的には Direct2D カスタムピクセルシェーダーエフェクト(D2D1CustomShaderEffectBase)として実装されており、HLSL コンパイル済みシェーダー(.cso)をエフェクトチェーン上で動作させます。光源からピクセルへ向かってレイマーチングを行い、入力テクスチャの輝度情報をサンプリングしながら光線を蓄積する古典的なラジアル光散乱アルゴリズム(Radial Light Scattering)を採用しています。
出力矩形は光線の到達範囲を考慮して入力矩形から自動的に拡張され、Direct2D のエフェクトグラフ上で正確なクリッピングが行われます。Density が 1 未満の場合は光源位置・密度・入力矩形の4隅から厳密な出力境界を解析的に算出します。Density が 1 以上の場合は理論上の発散を考慮して最大 4096px の拡張量を用います。
| 項目 | 要件 |
|---|---|
| OS | Windows 10 バージョン 2004 (ビルド 19041) 以降 / Windows 11 (64bit) |
| YukkuriMovieMaker4 | 最新版を推奨 |
| ランタイム | .NET 10.0 |
- Releases ページから最新のプラグインファイル(
.ymme)をダウンロードしてください。 - YMM4 が起動していないことを確認し、ダウンロードしたファイルを実行(ダブルクリック)してインストールします。
- YMM4 を起動し、タイムライン上のクリップにエフェクトを追加します。
- エフェクトの種類として 「ゴッドレイ」 を選択してください。
入力映像に対して、指定した光源位置から放射状に広がる光線を GPU 上でリアルタイム合成します。
光線の描画には Radial Light Scattering アルゴリズムを使用します。出力ピクセルから光源に向かって Samples 回のレイマーチングを行い、各サンプルで入力テクスチャを参照します。Threshold を超える輝度を持つピクセルのみが光線の蓄積に寄与し、Decay による指数的な減衰と Weight による寄与量の調整を経て Intensity で最終的な明るさが決まります。Density はレイマーチングのステップ幅を制御し、光線の到達距離と密度に影響します。
YMM4 のプレビュープレイヤー上に光源位置を示すコントローラーポイントが表示され、マウスドラッグによって直感的に光源位置を調整できます。
コントローラーポイントを動かすと LightX および LightY の各アニメーション値がリアルタイムに更新されます。キーフレームが設定されている場合は、現在フレームに対してデルタ値が加算されます。
カラーピッカーから光線の色を自由に指定できます。デフォルトカラーは #FFF0B4(不透明・暖色系クリーム)です。指定した ARGB 各チャンネル値はシェーダーのコンスタントバッファに 0.0〜1.0 の float として渡され、最終的な光線色の乗算に使用されます。
カラーパラメータはキーフレームアニメーションに対応していません。時間変化させる場合は他のパラメータとの組み合わせで対応してください。
LightX・LightY・Intensity・Decay・Density・Weight・Samples・Threshold の 8 パラメータはすべてキーフレームアニメーションに対応しています。時間経過にあわせて光源位置を動かしたり、光線を徐々に出現・消滅させたりする演出を滑らかに表現できます。
本プラグインは GPU Gems 3 Chapter 13 "Volumetric Light Scattering as a Post-Process" に基づくラジアル光散乱アルゴリズムをピクセルシェーダーで実装しています。
各出力ピクセル P に対して以下の処理を行います。
- ピクセル P から光源位置
(LightX, LightY)へ向かうベクトルをSamples等分したステップ幅を求めます。ステップ幅はDensityによってスケールされます。 illuminationDecay = 1.0で初期化します。- 各サンプル
i = 0, 1, ..., Samples-1について:- サンプル位置 = P + ステップベクトル ×
iにおける入力テクスチャの色を取得します。 - 輝度が
Thresholdを超える場合、sampleColor × illuminationDecay × Weightを蓄積します。 illuminationDecay *= Decayを適用します。
- サンプル位置 = P + ステップベクトル ×
- 蓄積値に
Intensityを掛け、LightColorで乗算して出力します。Decayが 1.0 に近いほど遠くまで均一に明るい光線になり、0.9 程度では中心に近いほど明るくフェードアウトする自然な光線になります。Densityが大きいほど光線が遠くまで伸び、1.0 以上では出力矩形が最大 4096px まで拡張されます。
| パラメータ名 | 型 | デフォルト | 設定範囲 | スライダー範囲 | アニメーション | 説明 |
|---|---|---|---|---|---|---|
| 光源 X | 数値 (px) | 0 | -∞ 〜 +∞ | -500 〜 500 px | ✔ | 光源の水平位置をキャンバス座標で指定します |
| 光源 Y | 数値 (px) | 0 | -∞ 〜 +∞ | -500 〜 500 px | ✔ | 光源の垂直位置をキャンバス座標で指定します |
| 強度 | 数値 | 1.00 | 0 〜 10 | 0 〜 2 | ✔ | 光線全体の明るさの乗数です |
| 減衰 | 数値 | 0.900 | 0 〜 1 | 0.9 〜 1 | ✔ | サンプルごとの指数的減衰係数です。1.0 で減衰なし、値が小さいほど光源近傍のみが光ります |
| 密度 | 数値 | 0.80 | 0 〜 5 | 0.1 〜 2 | ✔ | レイマーチングのステップ幅の倍率です。大きいほど光線が遠くまで伸びます |
| ウェイト | 数値 | 0.20 | 0 〜 1 | 0 〜 1 | ✔ | 各サンプルの蓄積への寄与量です |
| サンプル数 | 整数 | 128 | 1 〜 256 | 8 〜 128 | ✔ | レイマーチングのサンプル数です。多いほど光線がなめらかになりますが負荷が増加します |
| 閾値 | 数値 | 0.10 | 0 〜 1 | 0 〜 1 | ✔ | 光線に寄与する最小輝度の閾値です。低いほど暗い部分も光線を形成します |
| 光線カラー | 色 | #FFF0B4(不透明) | — | — | ✗ | 光線の色を ARGB カラーピッカーで指定します |
注意:
密度が 1.0 以上になると出力矩形の拡張量が最大 4096px に固定され、パフォーマンスに大きな影響を与えます。通常は 1.0 未満での使用を推奨します。
- タイムライン上のアイテムを選択し、エフェクトを追加します。
- 映像エフェクトの種類として 「ゴッドレイ」 を選択します。
- 光源 X / Y を調整して、光線の発生源となる位置を指定します。プレビュー画面上でコントローラーポイントをドラッグしても同様に操作できます。
- 強度 や 密度 を調整して光線の見た目を整えます。
- 光線カラー でお好みの色味を指定します。デフォルトは太陽光に近い暖色系クリームです。
光源を画面の外(例: 画面上部の太陽など)に配置することで、より自然な薄明光線を表現できます。LightX / LightY はキャンバス中央を原点とした絶対座標であるため、スライダー範囲(±500px)を超える値をテキスト入力で直接設定することも可能です。
強度 パラメータのキーフレームを設定することで、フレームの開始・終了に合わせて光線をフェードイン・フェードアウトできます。たとえば 0 フレーム目に 強度 = 0、30 フレーム目に 強度 = 1.0 のキーフレームを設定すると、光線が約1秒かけて出現するアニメーションになります。
光源 X と 光源 Y の両方にキーフレームを設定することで、光源が移動するアニメーションを作れます。プレビュー上でコントローラーポイントをドラッグしながらキーフレームを追加するとよりスムーズに作業できます。
サンプル数 はレンダリング品質に直結します。プレビュー確認中は低めの値(例: 32)にしておき、最終出力時に高い値(例: 128〜256)に戻すことで作業の快適さと出力品質の両立が図れます。減衰 を 0.98〜0.99 程度の高い値にすると、遠くまで均一に伸びる長い光線表現に適します。
閾値 を高くすると、入力映像の中でも特に明るい部分(ハイライト、白い物体など)だけが光線を形成するようになり、光源らしい見た目になります。閾値 = 0 にすると映像全体が光線に寄与するため、霞やフォグのような全面的なグロー表現になります。
- AviUtl 非対応: 本プラグインは AviUtl 形式(
.exo)への出力に対応していません。 密度が 1.0 以上の場合の出力範囲拡張:密度パラメータが 1.0 以上になると、Direct2D が要求する出力矩形が最大 4096px ずつ四方向に拡張されます。これはレイマーチングの到達範囲が理論上無限大になるためです。レンダリング負荷が急増するため、通常は 1.0 未満での運用を推奨します。密度が 1.0 未満の場合の出力矩形: 光源位置・入力矩形の4隅・密度から解析的に出力境界を算出しているため、光源位置や密度の変化に応じてフレームごとに出力矩形のサイズが変化します。これは正常な動作です。サンプル数はシェーダー内部で整数として扱われます: パラメータは float 型で渡されますが、シェーダーではループ回数を制御するために実質的に整数値として使用されます。小数値を設定した場合の挙動はシェーダーの実装依存です。小数点以下は設定しないことを推奨します。- 光線カラーのアニメーション非対応:
光線カラーはColor型であり、キーフレームアニメーションには対応していません。 - 本プラグインを使用する前に、YMM4 プロジェクトファイルのバックアップを作成することを推奨します。
本プラグインは MIT ライセンスのもとで公開されています。
本ソフトウェアは「現状のまま」提供されており、明示・黙示を問わず、商品性、特定目的への適合性、および権利非侵害に関する保証を含む、いかなる種類の保証も行いません。
作者は、本プラグインの使用または使用不能に起因するいかなる損害についても、一切の責任を負いません。 ご利用は自己責任でお願いします。
