Компьютерная графика

Animation: скелетная и морф

Персонаж в God of War выглядит живым: Кратос идёт по кривой поверхности - его ноги адаптируются к рельефу через foot IK. Поднимает камень - рука точно обхватывает форму через IK constraints. Говорит - 52 blend shape цели создают убедительную мимику. За каждым натуральным движением - skeletal animation, GPU skinning, blend shapes и IK, работающие вместе.

  • **Metahuman Creator (Epic Games)** генерирует ультрареалистичных персонажей с 500+ blend shapes для лица и полным facial IK rig - доступно через Unreal Engine
  • **Apple ARKit Face Tracking** использует 52 blend shapes на iPhone True Depth Camera: FaceTime Animoji, Snapchat AR фильтры, медицинские приложения для детей с аутизмом
  • **Netflix 'Arcane'** (Fortiche Studio) использует GPU skeletal animation для 3D персонажей с ручной анимацией поверх - hybrid 2D/3D pipeline
  • **Ghost of Tsushima** (Sucker Punch) - Самурайские фехтовальные анимации созданы через motion capture + procedural IK для адаптации к разным terrain и противникам

Skeletal Animation

**Skeletal animation** разделяет меш и движение: художник создаёт skeleton (иерархию костей), привязывает вершины меша к костям (skinning), аниматор двигает кости - меш следует. Вместо хранения позиции каждой вершины в каждом кадре - только трансформации костей. Персонаж с 20000 вершинами и 60 костями: хранить вершины = 20000 × 12 байт × fps; хранить кости = 60 × 64 байт × fps. Экономия: 60x.

Animation Blending: персонаж одновременно идёт (нижняя половина) и целится (верхняя). Это реализуется через blend masks - вес каждой кости из каждой animation clip. Unity Animator использует Avatar Mask для разделения верхней/нижней половины тела. Unreal Engine - Layered Blend Per Bone.

Зачем skeletal animation хранит трансформации костей, а не позиции вершин для каждого кадра?

GPU Skinning

**Skinning** - процесс вычисления финальной позиции вершины на основе влияющих костей. Линейный blend skinning (LBS): каждая вершина имеет до 4 костей с весами (weights sum = 1.0). Финальная позиция = сумма (bone_transform × original_pos × weight). Современные игры вычисляют skinning на GPU через vertex shader.

Dual Quaternion Skinning (DQS) решает artifact Linear Blend Skinning - «candy wrapper» эффект при скручивании конечностей. LBS интерполирует матрицы линейно, что некорректно для вращений (матрицы не образуют линейное пространство). DQS использует dual quaternion representation - математически корректная интерполяция вращений. Metal API в Apple A-series чипах имеет аппаратную поддержку quaternion операций.

Вершина руки персонажа привязана к двум костям: forearm (weight 0.7) и hand (weight 0.3). Forearm повёрнут на 90°, hand на 0°. Какой будет финальный поворот вершины?

Blend Shapes (Morph Targets)

**Blend shapes** (morph targets) хранят дельты позиций вершин для выражений лица. Нейтральная поза + набор targets: «улыбка» смещает углы рта, «брови вверх» смещает вершины бровей. Финальная поза = neutral + sum(target_i × weight_i). Apple Face ID использует 52 blendshapes для ARKit - точная модель лица в реальном времени.

Apple ARKit 52 facial action units (blend shapes) соответствуют Facial Action Coding System (FACS) - психологической системе описания выражений лица. Pixar использует сотни blend shapes для персонажей: Incredibles 2 - 1000+ per character для кинематографического качества. В реальном времени iOS ограничена 52 targets, но это достаточно для убедительной мимики.

Blend Shapes и Skeletal Animation решают разные задачи анимации. Какой метод лучше для лицевой анимации?

Inverse Kinematics (IK)

**Forward Kinematics (FK):** задаём углы каждой кости, получаем позицию конечной точки. **Inverse Kinematics (IK):** задаём позицию конечной точки (рука на объект), автоматически вычисляем углы костей. IK решает задачу, которую FK не может: «нога должна касаться земли» - нужно вычислить углы бедра, колена и лодыжки чтобы стопа была в точной позиции.

Procedural IK в современных играх: Horizon: Zero Dawn движение всех 6 ног роботов-машин - процедурная IK. Каждая нога независимо находит точку опоры, поддерживает баланс тела. Spider-Man (Insomniac) - паутина прикрепляется к поверхностям через IK в реальном времени. Full Body IK в Unreal Engine 5 позволяет персонажу адаптироваться к любому terrain без ручной анимации.

IK всегда лучше FK для анимации персонажей

FK лучше для свободного движения (взмах рукой, танец). IK нужен когда конечная точка должна касаться конкретного места (нога на земле, рука на перилах)

Профессиональные аниматоры предпочитают FK для большинства движений - проще контролировать дугу движения. IK используется как constraint: foot IK для terrain adaptation, hand IK для picking objects. Смешанный подход (FK + IK constraints) - стандарт в production

Персонаж поднимает предмет с пола. Без IK рука проходит через пол при наклоне. Как IK решает эту проблему?

Ключевые идеи

  • **Skeletal Animation:** иерархия костей + skinning weights; компактнее vertex animation в 60x; animation blending через bone masks
  • **GPU Skinning:** vertex shader вычисляет LBS; bone palette = inverse(bind_pose) × current_pose; DQS исправляет candy wrapper artifact при скручивании
  • **Blend Shapes:** дельты позиций вершин; идеальны для мимики; ARKit 52 targets - production standard; Pixar использует 1000+ для кино
  • **IK:** задаём цель, вычисляем углы костей; FABRIK - итеративный алгоритм; Foot IK и Hand IK - procedural адаптация к окружению

Связанные темы

Анимационные системы взаимодействуют с несколькими областями CG:

  • Particle Systems и VFX — Skeleton и blend shapes используются для VFX driven анимаций: cloth simulation привязывается к skeleton, fluid simulation интерактивна через IK constraints
  • Graphics Engine Architecture — Animation system - отдельный модуль rendering pipeline: skinning на GPU, animation evaluation на CPU job threads, результат идёт в vertex buffer
  • Neural Rendering: NeRF — Neural avatars (NeRF-based) дополняют skeletal animation для ультрареалистичного рендеринга лица и тела

Вопросы для размышления

  • Linear Blend Skinning создаёт candy wrapper artifact при скручивании предплечья. Dual Quaternion Skinning решает это. Но DQS имеет свой artifact - 'bulging' при сложных позах. Почему нет идеального метода skinning, и как Pixar решает это в RenderMan?
  • FABRIK IK сходится итеративно, но не гарантирует минимальный energy pose (наиболее естественное вращение). Как constraint-based IK (как в Unreal Full Body IK) добавляет joint limits и preferred angles для биомеханически корректного решения?
  • Apple ARKit отслеживает 52 facial blend shapes в реальном времени через TrueDepth камеру. Как нейронная сеть трансформирует depth map в 52 числа, и почему именно 52 значения (FACS) оказались достаточны для убедительной мимики?

Связанные уроки

  • la-06-transformations
Animation: скелетная и морф

0

1

Войти