Решили: часть тела, которую тинт не красит, возвращается к СВОЕМУ авторскому цвету из префаба, а
не к белому. Снимок авторских цветов берётся лениво, при первом Apply, и живёт до пересборки списка
частей.
Почему: белый в SpriteRenderer.color выглядит нейтральным значением — умножение на единицу,
«спрайт как нарисован». На нашем риге это неправда: художник красит vertex-цветом прямо в узлах, и у
Storybook лицо стоит телесным (0.86, 0.68, 0.56), тело холодным (0.66, 0.68, 0.75), волосы тёмно-
красными. Подставив «нейтральный» белый, мы стирали эту работу — лицо становилось белым.
Сказано: «Хотя, лицо будто все равно красится в белый, хотя в storybook иной цвет? или это я что-то не так сделал?» (05.08.2026, сессия d8b1d1a8).
Грабли: две подряд, обе про то, где брать снимок.
- Первая — сама идея «нейтрального белого». Она верна ровно до того момента, как кто-то покрасит риг vertex-цветом, и неверна молча: ни ошибки, ни предупреждения, просто побелевшее лицо.
- Вторая — снимок сначала брался из
CachePartTransforms, то есть поAwake.Awakeслучается не всегда: стенд рига, валидатор и edit-mode тест поднимают телоPrefabUtility.InstantiatePrefab, и там его нет вовсе — снимок оставался пустым, а фолбэк отдавал тот самый белый. Правка выглядела сделанной и не работала на трёх путях из четырёх.
Поймал вторую тест, написанный к первой правке, — тот случай, когда тест окупился в тот же час.
Владелец правды: SkeletalBodyVisual.Apply / EnsureAuthoredColors, тест
BodyTintScopeTests.AnUnpaintedPartKeepsItsAuthoredColour.