Решили: тёмную обводку формы удара шейдер отдаёт только альфой при нулевом rgb, а сам шейдер
переходит с Blend One One на premultiplied alpha (Blend One OneMinusSrcAlpha).
Почему: аддитив умеет складывать и не умеет вычитать, поэтому тёмный контур при нём невозможен физически — тёмный цвет, прибавленный к кадру, кадр не темнит. Premultiplied даёт оба режима в одном материале: пиксель с нулевой альфой ведёт себя как прежний аддитив (свет и bloom работают как работали), пиксель с альфой перекрывает то, что под ним. Отвергнуты: второй материал/проход под формой — это второй draw call на каждый удар и вторая копия геометрии, которую пришлось бы держать в синхроне с первой; тёмный цвет в палитре — обводка стала бы вторым владельцем цвета мимо палитры юнита, хотя она вообще не красит.
Сказано: «Давай чисто черную кайму» (05.08.2026, сессия a4e2eebd). Решение по виду пришло от
Макса, выбор из четырёх стендов Лаборатории #/lineart.
Грабли:
- «Кайма» в кластере уже занята и означает ПРОТИВОПОЛОЖНОЕ место: внешняя часть формы, несущая
цвет элемента (
_RimColor, способ смешения «ядро и кайма»). Тёмная граница снаружи названа обводкой (_LineWidth) — без этого следующая правка перекрасит элемент, думая, что чинит контур. - Обводке нужен запас quad. Меш натянут на форму впритык, и контур, лежащий снаружи, обрезался бы
краем ровно там, где должен быть виден. Запас добавлен в
quadSize, и он же нужен звезде дробящего. - Звезда живёт в координатах quad, а форма — в своих (
p = q / _Len). Ширина обводки задана в долях полудлины формы, поэтому для звезды она переводится множителем_Len. Забыть перевод — получить контур звезды не той толщины при любом_Len ≠ 1. MaterialPropertyBlockне соблюдаетRangeиз проперти шейдера — диапазон ограничивает только инспектор материала. Потолок ширины продублирован константой в коде.- Расстояние до формы за её остриями меряется до самого острия, а не по продолжению осевой кривой: иначе обводка уходит хвостом в пустоту вдоль линии, которой уже нет.
- Материал
MAT_Vfx_HitForm_Addтеперь назван неточно — «Add» осталось от прежнего блендинга. Переименование — работа для редактора (ассет), в этот заход не входило.
Владелец правды: SH_Vfx_HitForm.shader, HitFormVfx.cs (перевод в доли и запас quad),
CombatFeelConfig (ширина и тумблер), тест FeelToggleCoverageTests. Дизайн-сторона — канон
gdd/70-gamefeel/vfx-language §«Форму обводит чёрный контур» и запись журнала ГД 2026-08-05/3.