Решили: свечение части модулируется яркостью самого пикселя, а не заливает площадь ровно.
Параметр _GlowShapeKeep (в конфиге — CastGlowFlatness, в ассете 0.35) задаёт, какая доля света
ложится плоско; остальное идёт по арту. Плюс щит светится при поглощении удара тем же механизмом,
но цветом защиты, и контур каста выключен.
Почему: на play-QA Макс поймал, что за свечением теряется форма клинка. Причина в шейдере:
mainTex.rgb += _GlowColor * amount поднимал тёмные пиксели так же, как светлые, внутренние
контрасты схлопывались, и меч на пике читался силуэтом-палкой. Отвергнуто:
- просто убавить силу свечения — теряется сам язык («свет как основной язык» SAO), а форма всё равно съедается на пике;
- rim-свечение по краю силуэта — вернуло бы форму, но это уже другой приём, и он спорит с контуром каста, который живёт на том же краю;
- оставить как есть — снимок показал, что при плоской заливке гарда и грани клинка исчезают.
Замер картинкой (три рендера одного меча, flatness 1.0 / 0.35 / 0.0): при 1.0 клинок — сплошное
пятно, при 0.0 форма целая, но свет почти не читается, 0.35 держит и то и другое.
Грабли: снимать это надо С bloom. Голая камера в редакторе рисует свечение заметно слабее, чем игра, и по такому кадру легко пережать силу. Второе: текущий арт клинка — белая заглушка почти без градаций, а модуляция работает тем лучше, чем больше в спрайте собственных полутонов; на финальном арте эффект будет сильнее, чем на снимке.
Владелец правды: SH_Sprite_HitFlash.shader (обе пассы, формула модуляции), CombatFeelConfig
(CastGlowFlatness, EnableBlockGlow), UnitView.PlayBlockGlow, перепись тумблеров
FeelToggleCoverageTests.