環境
- FlowType_K: v0.3.3
- AviUtl ExEdit2: v2.0.54
- セクション:
Motion@FlowType_K
再現条件
| 項目 |
値 |
| Timing |
Automatic(Manual では未確認) |
| Duration |
負の値(例: -30) |
| Unit |
Frames |
| Motion::Based On |
Whole, Words, Lines で確認 |
| Motion::Overlap / Softness |
デフォルト(100%) |
| オブジェクト表示長 |
` |
期待される動作
退場モーションがオブジェクト表示終了まで滑らかに進行し、終端フレームで完了する。
実際の動作
progress の負 Duration 分岐(@FlowType_K.anm2 @Motion 付近)において、Automatic モードで orig_i = 0 の要素に対し
i = -duration * i / n - min(d, 0.0) -- orig_i=0, d<0 のとき i = -d = |duration|
となる。登場(正の Duration)では min(d, 0) = 0 により i = 0 だが、退場では i ≠ 0 となり正負で非対称になる。
これにより次の症状が発生する。
- 30F オブジェクト + Duration
-30 → 約 20F 付近で表示が消える(motion_cutoff によりアルファが0になる)
影響範囲
- Timing: Automatic — 確認済み
- Based On: Whole, Words, Lines — 確認済み
- Characters / Characters Excluding Spaces / Objects — 問題無し
- Timing: Manual — 別コードパス(v0.3.0 CHANGELOG で退場修正あり)。本 Issue とは独立の可能性
原因の整理
登場(正の Duration, Automatic):
i = duration * orig_i / n - min(d, 0.0) -- d>0 なら i = duration * orig_i / n
return t - (duration * i) / (duration + d), w
退場(負の Duration, Automatic)— 現行:
i = -duration * orig_i / n - min(d, 0.0) -- orig_i=0, d<0 なら i = -d ≠ 0
return (duration * i) / (duration + d) - t, -w
退場側は「重み w 計算用の位相」と「表示・cutoff判定用の局所時間」の両方に同じ i を使っているが、登場側の式を時間反転させたものと比較すると、この2つの用途にはそれぞれ別の式が必要で、現行式はいずれの用途にも一致していない。
修正案(数値検証済み)
登場側の式を t_adj -> -duration - t_adj で時間反転させたものが退場側の正解になる。この定義から逆算すると以下になる(Whole を含む n=1〜4、複数の Overlap/Softness 設定で期待値と一致することを確認済み)。
-- duration < 0, timing == 0 (Automatic) の場合
local i_phase = duration * orig_i / n - (d + duration)
local p = t / duration + (t - i_phase) / d
local w = 1.0 - interpolate(p)
local stagger = (duration * duration * orig_i / n) / (duration + d)
return (-duration) - t + stagger, -w
(orig_i は変換前の元の i、t は t - TOTALTIME - duration で調整済みの値、d は既存の重なり量の計算式のまま)
Manual タイミング(timing == 1)の退場は v0.3.0 で別途修正済みのため、本修正は Automatic 限定とするのが安全。
関連
- CHANGELOG v0.3.0: 「
Timing が Manual の場合,退場モーションがおかしかった問題の修正」— Automatic 側に同種の非対称が残存していた可能性
環境
Motion@FlowType_K再現条件
-30)期待される動作
退場モーションがオブジェクト表示終了まで滑らかに進行し、終端フレームで完了する。
実際の動作
progressの負 Duration 分岐(@FlowType_K.anm2@Motion付近)において、Automatic モードでorig_i = 0の要素に対しとなる。登場(正の Duration)では
min(d, 0) = 0によりi = 0だが、退場ではi ≠ 0となり正負で非対称になる。これにより次の症状が発生する。
-30→ 約 20F 付近で表示が消える(motion_cutoff によりアルファが0になる)影響範囲
原因の整理
登場(正の Duration, Automatic):
退場(負の Duration, Automatic)— 現行:
退場側は「重み
w計算用の位相」と「表示・cutoff判定用の局所時間」の両方に同じiを使っているが、登場側の式を時間反転させたものと比較すると、この2つの用途にはそれぞれ別の式が必要で、現行式はいずれの用途にも一致していない。修正案(数値検証済み)
登場側の式を
t_adj -> -duration - t_adjで時間反転させたものが退場側の正解になる。この定義から逆算すると以下になる(Whole を含む n=1〜4、複数の Overlap/Softness 設定で期待値と一致することを確認済み)。(
orig_iは変換前の元のi、tはt - TOTALTIME - durationで調整済みの値、dは既存の重なり量の計算式のまま)Manual タイミング(
timing == 1)の退場は v0.3.0 で別途修正済みのため、本修正は Automatic 限定とするのが安全。関連
TimingがManualの場合,退場モーションがおかしかった問題の修正」— Automatic 側に同種の非対称が残存していた可能性