Решили: тёмный край следа клинка получается крайней ступенью его собственного градиента, а не контуром поверх; заодно ширина следа едет профилем-полумесяцем вдоль угла. SH_Vfx_SwingArc переехал на premultiplied alpha, как днём раньше форма удара.

Почему: у дуги хвост гаснет по углу, поэтому контур снаружи обводит место, где свечения уже нет — хвост читается чёрной тряпкой. Ступень внутри градиента этой проблемы не имеет по построению: где нет света, там нет и кромки. Отвергнуты: контур полной силы (см. выше) и контур, гаснущий вместе с хвостом — второй выглядел прилично, но остаётся вторым слоем ради того, что делает один градиент.

Сказано: «Сделать градиент с началом и концом с черным (+ по краям)? Чтобы выглядло как этакий аутлайн и это ничего не нарушало» и «След не просто должен сотановиться менее по opasity незаметным, но менять и “ширина” следа на его окончании. (Как “параболе”? Хз как сказать, но чем ближе к концу, тем быстрее уменьшение)» (06.08.2026, сессия a4e2eebd).

Грабли:

  • «Ничего не нарушает» — про язык, но не про блендинг. Чёрное — это перекрытие, а Blend One One перекрывать не умеет ни при каком цвете. Дуге понадобилась та же правка, что форме удара; сила перекрытия вынесена ручкой _Opaque, и на нуле шейдер ведёт себя ровно как прежний аддитив.
  • Нормировка профиля считается СНАРУЖИ. Максимум t^p (1 - 0.45 t³) берётся аналитически в C# (t³ = p / (0.45 (p + 3))) и приходит юниформом: искать его циклом в пикселе значило бы гонять сорок итераций на каждом фрагменте ради числа, которое меняется раз в жизни материала. Без нормировки «острее» означало бы заодно «тоньше».
  • Мягкость края мерится в долях ПОЛУТОЛЩИНЫ, а не в мировых единицах. След сужается к хвосту до нуля, и постоянный fwidth(r) там съедал бы всю полосу — хвост зазубривался.
  • Публичный Enable*, который читает только сам конфиг, роняет тест. FeelToggleCoverageTests требует, чтобы тумблер спрашивали в коде презентации; ручка подачи применяется внутри CombatFeelConfig при сборке SwingArcStyle, поэтому публичного свойства у неё нет, а в переписи она помечена внутренней. Тест поймал это на первой же версии.
  • Стенд Лаборатории нельзя рисовать сегментами. Сорок сегментов сектора дали швы: светлые полосы на аддитивных стыках и тёмные щели без нахлёста. Заливка одним путём с коническим градиентом решает это по построению — в шейдере той же проблемы нет, там всё считается в пикселе.

Владелец правды: SH_Vfx_SwingArc.shader, SwingArcStyle в SwingArcVfx.cs (числа стиля и нормировка профиля), CombatFeelConfig (ручки и тумблер), тест FeelToggleCoverageTests. Дизайн-сторона — канон gdd/70-gamefeel/vfx-language §«След клинка — росчерк» и запись журнала ГД 2026-08-06.