# Проверенный опыт Fish Pipeline Обновлять только после подтверждения. Повторяющиеся записи объединять. Устаревшие правила заменять в `SKILL.md`, а здесь сохранять краткую историю причин и проверок. ## 2026-11-09 — Базовый физический скелет - Создана цепочка из 6 Rigidbody и 6 ConfigurableJoint с kinematic mouth anchor. - Нестабильность уменьшается, когда физический transform не масштабируется, а размер задаётся CapsuleCollider. Визуальная капсула находится в дочернем объекте. - Tail Impulse через `AddForceAtPosition` к кончику последнего сегмента успешно раскачивает цепь. ## 2026-11-09 — GLB и skinning - `com.unity.cloud.gltfast` импортирует mesh, материалы, morph targets и AnimationClips. - Для первой модели 6 костей и 6194 вершины успешно деформировались после импульса. - Направление модели нужно определять отдельно; поворот `Z +90` подходит только для проверенной ориентации `head +Y` к `tail +X`. ## 2026-11-09 — Независимая morph-анимация - Shape keys `Eye_Look_Left`, `Eye_Look_Right`, `Open_mouths`, `Breath` экспортированы из Blender с `export_morph=True`, `export_morph_animation=True`, `ACTIVE_ACTIONS`. - В Unity найден один 4-секундный клип с кривыми `blendShape.*`. - Для независимого loop создан новый legacy `AnimationClip`, путь кривой изменён на пустой, transform-кривые отброшены. Физика и morph-анимация работают одновременно. ## 2026-11-09 — Нормализация morph-frame Симптом: рыба сильно надувалась, `Breath = 10` давало смещение вершины `0.17772 м`. Причина: glTFast вернул `GetBlendShapeFrameWeight = 1`, тогда Unity ожидал диапазон `0–100`. Копирование значения `1` приводило к экстраполяции в 10 раз. Исправление: нормализовать frame weight к `0–100` при создании target mesh. Проверка после исправления: при `Breath = 10` максимальное смещение стало `0.00178 м`. Не уменьшать анимацию до такой проверки — сначала исправить frame weight. ## 2026-11-09 — Значения кривых - Исходные morph-кривые имеют диапазон `0–1`, Unity BlendShape использует `0–100`. - При переносе ключи копируются в новый `AnimationCurve`; исходный клип не изменяется. - Текущая пользовательская сила воспроизведения — 20% от исходной амплитуды. Это настройка после исправления frame weight, а не решение проблемы надувания. ## 2026-11-09 — UV Data Transfer в Blender - В Blender 5.2 направление оператора критично: для selected source → active target требуется `use_reverse_transfer=True`. - Неправильное направление повредило UV исходника в текущей сцене; источник восстановлен из отдельной сохранённой копии. - Перед вызовом читать RNA: допустимые enum для `layers_select_src/dst` зависят от контекста. ## 2026-11-09 — Ретопология - Простой Decimate не признан подходящим для анимации этой рыбы. - QuadriFlow отклонил исходную поверхность; Voxel/Sharp ReMesh дал 16166 квадов и сохранил форму. - UV восстановлены через Data Transfer в правильном направлении. Для скелета нужна отдельная проверка non-manifold участков.