Skip to content

Motion@FlowType_K: 負の Duration + Automatic で退場モーションが途中で止まる/消える #8

Description

@HexBrowns

環境

  • 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 は変換前の元の itt - TOTALTIME - duration で調整済みの値、d は既存の重なり量の計算式のまま)

Manual タイミング(timing == 1)の退場は v0.3.0 で別途修正済みのため、本修正は Automatic 限定とするのが安全。

関連

  • CHANGELOG v0.3.0: 「TimingManual の場合,退場モーションがおかしかった問題の修正」— Automatic 側に同種の非対称が残存していた可能性

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions