Решили: размер осколка смерти задаётся ДОЛЕЙ РОСТА тела (CombatFeelConfig.ShatterShardSize,
в ассете 0.10), а не числом исходных пикселей спрайта. Мера — длина, и в локальные единицы каждой части
её переводит DeathShatter по её же lossyScale. Мерой роста для ВСЕХ частей служит габарит тела
целиком, а не своей части.
Почему: пиксель исходника не является мерой длины. У покадрового бестиария весь юнит занимает 48 px,
у частей скелетного «сторибука» одна кисть — 112 px, клинок — 585 px при PPU 1000. Один и тот же «чанк в
6 px» давал у первого кусок в восьмую часть тела, у второго — крошку в 0.006 мировых единиц при росте
юнита 0.694. Замер по живому префабу BoneUnit_Storybook: 15 147 осколков на одну смерть (по 20
частям; у клинка и волос сетка упиралась в потолок 48×64), после перевода на долю роста — 54 при 0.12 и
около сотни при 0.10. Отвергнутая альтернатива — «уменьшить потолок сетки»: потолок уже однажды тихо
съедал настройку, и вернуть его значило бы сделать ручку снова мёртвой, не тронув причину.
Рост берётся у тела целиком намеренно: считать долю от собственной части значит дробить кисть на столько же кусков, на сколько торс, то есть получать куски несопоставимого размера при общем параметре.
Сказано: «Поскольку щас у юнита стало много деталей - у нас стало СЛИШКОМ много частиц при смерти. И они слишком, слишком мелкие.» (2026-08-04, сессия 06e45474).
Грабли: минимум ячеек по оси опущен с 3 до 1 — часть мельче осколка обязана улететь ЦЕЛЫМ куском. Прежний минимум насильно резал кисть на девять частей, из-за чего мелкие детали крошились мельче торса при одном и том же размере чанка. Снап границ на пиксель-сетку исходника при этом сохранён: он даёт куски пиксель-персонажа, а не вектор-слайсы, и на не-пиксельном арте просто не мешает.
Владелец правды: ShatterMesh.Build, DeathShatter.Play, SkeletalBodyVisual.PlayShatter,
тест ShatterMeshTests.SameWorldSize_DifferentArtResolution_GivesSameShardCount.