v1.4.0
v1.4.0 - Lua スクリプト for YMM4
AviUtl のアニメーション効果スクリプト(.anm 系)に対する部分互換層を追加した
リリースです。座標・拡縮・回転・不透明度の変形と乱数を用いる範囲について、追加の
記述変更なしで AviUtl 向けスクリプトを実行できるようになりました。
新機能
1. AviUtl スクリプトの部分互換
AviUtl のアニメーション効果スクリプトのうち、本プラグインの変形・ピクセルモデルへ
無理なく写像できる範囲を実行できる互換層を追加しました。スクリプトに AviUtl 固有の
記法が含まれない場合、この互換層は一切介入しないため、従来のスクリプトの挙動は
変わりません。
- スクリプトヘッダの解釈: コメント形式のパラメータ宣言を解釈し、スクリプト本体が
参照する変数を実行前に定義します。これまでは単なるコメントとして無視され、参照変数が
nilになり実行できなかったスクリプトが動作するようになります。--dialog:項目名,local 変数=既定値;…… 各項目の宣言部を本体の先頭へ展開します。--color:0xRRGGBB… 変数colorを指定色で定義します。--check0:項目名,既定値…obj.check0(0〜3)を既定値で定義します。--param:任意のLua文… 記述した Lua 文をそのまま本体の先頭へ展開します。--track0:〜--track3:… 値は従来どおりobj.track0〜obj.track3から参照します
(ラベル・範囲・既定値の UI 反映は行いません)。
@による複数セクション: 1 つのスクリプトに@名前で複数の効果が定義されて
いる場合、先頭のセクションのみを実行します。
2. obj.rand の追加
AviUtl 互換の決定論的な整数乱数 obj.rand(st, ed [, seed [, frame]]) を追加しました。
指定範囲 st〜ed の整数を返し、seed と frame が同じであれば常に同じ値を返します。
frame を省略すると現在のフレームを用います。従来エンジン(MoonSharp)と高速ランタイム
(LuaJIT)で同じ値を返すため、エンジンの自動振り分けによらず結果が一致します。
注意事項
- 描画・フィルタ・ファイルアクセス系の関数(
obj.load/obj.draw/obj.drawpoly/
obj.effect/obj.copybuffer/obj.setoption/obj.setfont、require、io等)は
本体の描画パイプラインへの統合を要するため、この互換層では対象外です。これらを呼び出す
スクリプトは意図どおりには動作しません。 --track0:〜--track3:のラベル・範囲・既定値はエフェクトパネルの UI へ反映されません。
トラックバーの値は従来どおり Track0〜Track3 のスライダー値が使用されます。- エンジンに依存しない小数の乱数が必要な場合は、従来どおり
anim.randを使用してください。
内部実装
- スクリプトを実行可能な Lua へ変換する前処理を追加し、MoonSharp・LuaJIT の両実行系へ
一貫して適用しました。変換結果はソース単位でキャッシュし、毎フレームの再解析を避けています。 obj.randの数値コアを C# と LuaJIT で同一アルゴリズムとして実装し、両者がビット単位で
一致することを等価性テストで検証しています。- AviUtl 固有の記法を含まないスクリプトでは前処理がソースをそのまま返すため、既存スクリプト
および既存の実行・キャッシュ経路に対する影響はありません。