Решили: оффлайновая композиция поз (RigLayerBlend) выросла со «база плюс одна надстройка» до СТЕКА
слоёв с двумя режимами — Override и Additive, — и её же теперь зовут и контактный лист, и гизмо зоны
удара. Форма «трассируемый клип лежит слоем на движущемся теле» вынесена в общий
RigLayerBlend.Composition + SampleTraced.
Почему: с 30.07 удар не стейт базы, а надстройка: тело бежит на базе, свинг едет Override-слоем по
верху тела, просадка таза приезжает Additive. Картинка, умеющая базу и один оверлей, была бы короче
игры ровно на слой — и коротка именно на тазе, ради которого аддитивный слой и заводился. Хуже того,
RigSweep строит дугу от плеча, а плечо теперь едет от локомоции: гизмо по одному клипу показывало бы
траекторию, которой в игре нет, и врало бы тем сильнее, чем размашистее бег.
Аддитивная дельта считается от ПЕРВОГО КАДРА самого клипа, а не от позы покоя рига — так её считает Animator, и у клипа удара с разбега нулевой кадр это поза бега, от которой дельта и должна идти. Сверка эмуляции с рантаймом на живом риге: таз 0.038 → 0.001, плечо 95.23 → 336.00, нога 3.90 не шелохнулась — цифра в цифру с тем, что дал Animator.
Отвергли отдельную копию композиции внутри RigSweep: два владельца разошлись бы, и одна картинка
показывала бы позу игры, а другая нет — без всякого признака, которая из них.
Грабли: Sample начинается с сэмпла базы, поэтому «доложить слои поверх уже готовой композиции»
им сделать нельзя — он бы стёр её целиком и молча съел слой. Понадобился отдельный Fold без базы.
Второе: чинить приёмку пришлось до самой проводки показа, и проверить рендером её не удалось —
параллельная сессия держит дерево некомпилируемым (EmpowerNextAttackComponent ссылается на
RuntimeUnit.EmpowerSplitShare/EmpowerSplitType, которых ещё нет). Сверка additive сделана ДО этого,
на скомпилированной сборке; сами картинки не отрисованы.
Владелец правды: RigLayerBlend (Blend, Layer, Composition, Fold), RigSweep.Options.Composition,
AnimationLabRenderer.Options (Layers + Composition).