Решили: часть тела, которую тинт не красит, возвращается к СВОЕМУ авторскому цвету из префаба, а не к белому. Снимок авторских цветов берётся лениво, при первом 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.