Решили: кривая жизни призрачной копии живёт в GhostImage.Sample — статическом методе, который зовут ОБА: боевой Update и стенд Post FX Lab. Стенд волен расставлять копии сам (в редакторе нет тика MonoBehaviour, проиграть настоящий компонент нельзя), но считать их прозрачность и рост — не волен.

Почему: это ровно тот класс расхождения, который не виден. Своя формула затухания на стороне стенда оставила бы копии нарисованными — просто гаснущими иначе, — и стенд показывал бы не тот эффект, который увидит игрок. Ошибку такого рода ловят не глазами, а тем, что владельца ровно один. Прецедент дороже: дуга за клинком чинилась четырежды, и трижды корень лежал не в ней; SwingArcSingleOwnerTests держит там ту же границу.

Грабли: первая версия стенда была написана до Sample, с собственным Mathf.Pow(1 - t, power). Формула совпадала — но совпадала бы ровно до первой правки степени затухания в бою.

Владелец правды: GhostImage.Sample (кривая), SilhouetteDraw (раскладка позы), PostFxLabWindow.BuildGhosts (расстановка копий по фазе — и только она).