Режимы вращения

Blender позволяет определять вращение несколькими способами. Каждый из них имеет ряд преимуществ и недостатков; лучшего режима вращения не существует, поскольку каждый из них подходит для конкретных случаев.

Во всех этих режимах – положительные значения угла означают направление вращения против часовой стрелки, а отрицательные значения определяют вращение по часовой стрелке.

Хотя вы можете вращать элементы, используя глобальную или локальную ориентацию преобразования, эти оси не подходят для определения вращения, поскольку эффект каждой из них нельзя изолировать от двух других.

Возьмём, к примеру, любые три значения вращения по осям X, Y и Z. Выполните каждое из этих действий, используя глобальные или локальные оси. В зависимости от порядка, в котором вы их выполняете, вы получите разные окончательные ориентации. Поэтому необходимы правильные системы координат вращения.

Эйлеровы режимы (Euler Modes)

Система осей, используемая для выполнения эйлеровых (Euler) вращений, представляет собой так называемый подвес (gimbal) Эйлера. Gimbal — это особый набор из трех осей. Особенностью этого является то, что между осями существуют иерархические отношения: одна из осей находится на вершине иерархии и имеет одну из двух других осей в качестве своего непосредственного дочернего (child) элемента; в то же время эта дочерняя ось является родительской (parent) для оставшейся оси, находящейся в самом низу иерархии.

Какая ось сверху, какая посередине и какая снизу, зависит от конкретного gimbal (подвеса) Эйлера: их шесть типов, как и шесть возможных комбинаций: XYZ, XZY, YXZ, YZX, ZXY и ZYX режимов вращения Эйлера. Эти режимы называются буквами осей по порядку, начиная с оси внизу иерархии и заканчивая осью вверху.

Основная проблема этих систем возникает, когда они теряют свою относительную перпендикулярность. И это происходит, когда ось посередине, вращаясь, заставляет ось внизу вращаться вместе с ней. Ситуация становится еще хуже, когда эта нижняя ось приближается к 90° (или эквивалентным углам). В этом случае она останется выровненной по оси верхней части иерархии. В этот момент мы только что потеряли одну ось вращения. Это может привести к прерывистой интерполяции при анимации. Эта конкретная потеря оси известна как «gimbal lock».

Подсказка

Фактическую конфигурацию осей gimbal можно увидеть в 3D-вьюпорте, включив Вращение гизмо объекта и установив для него значение Gimbal (с помощью кнопки гизмо в заголовке). При этом режим вращения должен быть установлен на любой из режимов Эйлера для активного объекта.

Теперь вы можете выполнить вращение вокруг оси посередине (например, в режиме XYZ Эйлера, то есть оси Y), и увидите, как легко получить gimbal всего с двумя осями. В конкретном случае режима XYZ Эйлера с gimbal lock (блокировкой подвеса) вращение вокруг оси X будет иметь тот же эффект, что и вращение вокруг оси Z, то есть на практике вращение по оси X выполнить невозможно.

Одним из преимуществ этого режима является то, что кривые (curves) анимации легко понять и редактировать. Однако особое внимание необходимо уделять, когда средняя ось приближается к значениям, близким к 90° (или эквивалентным углам).

Режим угла оси (Axis Angle Mode)

Этот режим позволяет нам определить ось (X, Y, Z) и угол поворота (W) вокруг этой оси.

Если мы определим вращение с помощью интерактивного вращения (с помощью гизмо вращения), значения X, Y и Z не будут превышать 1,0 по абсолютной величине, а W будет находиться в диапазоне от 0 до 180 градусов.

Если вы хотите определить поворот выше 180° (например, чтобы определить несколько оборотов), вам нужно будет напрямую отредактировать значение W, но как только вы выполните интерактивный поворот, это значение будет скорректировано снова. То же самое касается значений оси.

Эта система подходит для элементов, вращающихся вокруг фиксированной оси, или для анимации одного из элементов за раз (либо оси, либо угла). Проблема может возникнуть при одновременной анимации (интерполяции) обоих компонентов: оси и угла. Полученный эффект может оказаться не таким, как ожидалось.

Гизмо Gimbal в этом режиме вращения показывает набор из трех ортогональных осей, в которых ось Z проходит вдоль определенной оси вращения, т. е. указывает в направлении, определяемом точкой (X, Y, Z).

В системе угла-оси отсутствует gimbal lock, но кривые (curves) анимации в этом режиме совершенно интуитивно не понятны при одновременной анимации оси и угла, и в этом случае их трудно понять и редактировать.

Режим кватерниона (Quaternion Mode)

В этом режиме – вращения также определяются четырьмя значениями (X, Y, Z и W). X, Y и Z также определяют ось, а W — угол, но делает это совершенно иначе, чем ось-угол (axis-angle). Здесь важно соотношение между всеми четырьмя значениями.

Чтобы описать это интуитивно, давайте возьмём эффект координаты X: он вращает элемент вокруг оси X до 180 градусов. То же самое касается Y и Z. Эффект W состоит в том, чтобы избежать этих вращений и оставить элемент с нулевым вращением. Окончательная ориентация представляет собой комбинацию этих четырех эффектов.

Поскольку соотношение между компонентами определяет окончательную ориентацию, умножение или деление всех четырех чисел на постоянное значение даст тот же самый поворот.

Этот режим идеально подходит для интерполяции между любой парой ориентаций. Он не страдает от gimbal lock или какого-либо нежелательного эффекта интерполяции. Единственным недостатком является то, что вы не можете интерполировать между двумя ориентациями, которые находятся на расстоянии более 180°, поскольку анимация будет выбирать кратчайший путь между ними. Таким образом, чтобы анимировать вращающийся элемент, вам необходимо установить множество промежуточных ключевых кадров, максимум на 180° друг от друга.

Гизмо Gimbal в этом режиме эквивалентно локальному (Local) и не имеет особого значения.

Кривые анимации в этом режиме интуитивно не понятны, поэтому их также сложно понять и редактировать.

Подробнее о кватернионах

Этот раздел не очень полезен для 3D-художников, но может быть полезен любопытным или учёным.

Кватернионы – это система счисления, расширяющая комплексные числа. Они представляют собой четырехкомпонентный вектор, компоненты которого в Blender называются X, Y, Z и W. При интерактивном вращении в режиме кватерниона так называемая норма (длина) кватерниона останется постоянной. По определению норма кватерниона равна 1,0 (это нормализованный кватернион). Когда вы выбираете режим кватерниона в Blender, компоненты XYZW описывают нормализованный кватернион.

Примечание

Норма кватерниона (quaternion) q определяется математически как:

\[\lvert q \rvert = \sqrt{X^2 + Y^2 + Z^2 + W^2}\]

Однако, если один из компонентов кватерниона заблокирован во время интерактивного преобразования с помощью соответствующей кнопки блокировки, норма не останется неизменной, поскольку этот заблокированный компонент не сможет подстроиться, чтобы сохранить норму единицы.

Подсказка

Интерактивные вращения с помощью гизмо не меняют норму текущего кватерниона. Редактируя отдельный компонент XYZW по отдельности, вы можете изменить норму. Чтобы снова сделать норму 1.0, можно переключиться в любой режим вращения и снова вернуться в кватернион.

Компоненты вращения кватерниона тесно связаны с компонентами угла-оси. Чтобы найти соответствие, в первую очередь надо иметь дело с нормализованным вариантом кватерниона, то есть с тем, норма которого равна 1,0. Чтобы нормализовать кватернион, просто разделите каждый из его компонентов на его норму. Как мы видели ранее, деление всех четырех значений на одно и то же число даёт одинаковую ориентацию.

После того, как мы вычислили компоненты нормализованного кватерниона, связь с компонентами оси-угла будет следующей:

  • X, Y и Z означают то же самое, что и для угла-оси: они просто определяют ось, вокруг которой происходит вращение.

  • W можно использовать для получения фактического поворота вокруг определённого угла. Применяется следующая формула (при условии, что кватернион нормализован): \(W = \cos(\frac{a}{2})\), где a – фактически угол поворота, который мы ищем. То есть: \(a = 2 \arccos{W}\).

Другие соображения

В режимах «ось-угол» и «кватернион» мы можем блокировать повороты в интерактивных режимах для каждого компонента, а не делать это по оси. Для этого мы можем активировать эту возможность блокировки, используя кнопки блокировки рядом с соответствующими кнопками преобразования Вращение.

Что касается анимации вращения, все ключевые кадры должны быть определены в одном и том же режиме вращения, который должен быть выбранным режимом вращения объекта на протяжении всей анимации.