В этом уроке мы рассмотрим, как настроить несколько Rigid Bodies и Hinge Constraint для создания анимации маятника Ньютона.
Видеоверсия этого руководства в настоящее время недоступна на этом языке. Ниже вы можете посмотреть английскую версию с субтитрами; под видео вы найдете перевод расшифровки на русский язык.
Текстовая расшифровка видео
В этом уроке мы рассмотрим, как настроить несколько Rigid Bodies и Hinge Constraint для создания анимации маятника Ньютона. Урок создан с использованием Blender версии 3.6.
Для начала я использую готовую 3D-модель, содержащую базовую конструкцию и большое количество сфер с соответствующими подвесами.
В этой 3D-модели у сфер и подвесов правильно настроены origins вдоль будущей оси вращения, однако все они являются дочерними объектами конструкции.
Это не требуется и, более того, может вызвать проблемы в физической симуляции.
Поэтому первым шагом я выделяю их все и удаляю parent-связь с помощью сочетания ALT P. Затем в появившемся меню Separate выбираю пункт "Clear Parent and Keep Transformation".
На самом деле мне нужно выполнить операции, которые будут повторяться для всех сфер, поэтому можно удалить все сферы, кроме одной. Так я смогу настроить оставшуюся сферу и затем получить уже подготовленные копии.

Теперь у нас есть два объекта: база и первая сфера с подвесами.
Базу можно игнорировать, поскольку она не будет участвовать в физической симуляции.
Origin сферы находится сверху, вдоль оси вращения.
Это очень удобно, потому что именно в этой точке, на вертикальной оси сферы, нам нужно добавить вспомогательный объект, необходимый для использования Hinge Constraint.

Когда мы добавляем новый объект в сцену, он размещается своим origin в точке расположения 3D Cursor. Поэтому я перемещаю 3D Cursor в origin сферы с помощью сочетания SHIFT S, затем выбираю опцию "Cursor to Selected".
Теперь нам нужен вспомогательный объект для применения Hinge Constraint. Подойдет любой объект, поэтому я добавляю простой куб и увеличиваю его размер для лучшей видимости.
После изменения размера я применяю Scale transformations с помощью сочетания CTRL A. В данном случае это может быть не обязательно, но такую привычку полезно закрепить.

Выделив куб, откройте вкладку Physics в Properties Window и добавьте компонент Rigid Body, установив для него тип Passive.

Таким образом объект будет участвовать в симуляции Rigid Body, но не будет реагировать на силы. Как уже упоминалось, он будет служить ограничением для вращения сферы.
Теперь добавим Rigid Body для сферы, но изменим тип на Active, так как сфера должна двигаться под действием гравитации и других сил. Значение массы по умолчанию слишком маленькое, поэтому я устанавливаю 100 граммов.

Еще одно важное изменение касается параметра Collision Shape для сферы. По умолчанию он установлен в режим Convex Hull, однако созданная оболочка может вызывать проблемы при взаимодействии с другими объектами.
Поэтому я меняю режим на Mesh. Этот вариант требует больше вычислений, но обеспечивает более точный результат.

Подсказка для параметра Margin рекомендует оставлять значение больше 0. Однако опытным путем я выяснил, что в данном случае лучше установить 0, чтобы физическая симуляция не обнаруживала столкновения между объектами, даже когда они неподвижны, но находятся очень близко друг к другу в начале симуляции.


Кроме того, необходимо установить очень высокое значение, например 0.9, для параметра Bounciness. Это позволит сферам сильно отскакивать, создавая почти идеально упругие столкновения.
В разделе Dynamics находятся и другие параметры, связанные с Damping, который отвечает за потерю скорости и углового момента со временем. Мы вернемся к этим параметрам позже, когда будем тестировать все сферы.
Прежде чем продолжить, давайте сохраним сцену в новый файл.
На протяжении урока я буду советовать сохранять проект перед нажатием Play или запуском Bake, поскольку Blender несколько раз вылетал при этой симуляции, когда я запускал воспроизведение без сохранения изменений.
Если сейчас запустить анимацию, сфера упадет в пустоту.
Это абсолютно нормальное поведение, потому что мы еще не создали Hinge Constraint, который должен ограничивать сферу относительно добавленного ранее куба.
Однако перед этим нужно выполнить еще одно изменение: необходимо переместить центр массы сферы внутрь ее геометрии. Это можно сделать, поместив 3D Cursor в центр сферы с помощью SHIFT S в Edit Mode, а затем выбрав "Origin to 3D Cursor" правой кнопкой мыши в Object Mode.

Теперь сфера и куб идеально выровнены по вертикали.
Перед рендерингом куб можно скрыть, но пока полезно оставить его видимым. Выделим его и перейдем к созданию Hinge Constraint.
Rigid Body Constraint добавляется, как и компонент Rigid Body, во вкладке Physics редактора Properties.
Первое, что нужно сделать, это изменить тип Constraint с Fixed на Hinge.

В разделе Objects находятся два поля, в которых указываются два объекта сцены. Constraint работает, соединяя объект с именем Second, который будет двигаться, с объектом First, который останется неподвижным.
В нашем случае можно установить Cube как First, а сферу как Second.

Но это еще не все, потому что при использовании Hinge Constraint вращение происходит вокруг локальной оси Z пассивного объекта Rigid Body.
По сути, Hinge похож на Point Constraint, но ограничивает вращение этой осью. Поскольку в данном проекте вращение должно происходить вокруг глобальной оси X сцены, которая сейчас соответствует локальной оси X куба, необходимо повернуть куб на 90 градусов вокруг оси Y. Чтобы отобразить локальные оси, я изменил Transform Orientation в 3D View на Local.

Выполним поворот с помощью сочетания R Y 90.
Теперь сохраним проект и запустим симуляцию... ничего не произойдет!
Центр массы сферы правильно расположен внутри, но сфера и ограничение идеально выровнены по вертикали и находятся в равновесии.
Поэтому нужно задать сфере начальное вращение, а дальше физика сделает все остальное.
Теперь, когда Origin сферы расположен внутри, было бы удобно вращать сферу и ее подвесы вокруг точки, где находится куб.
Поэтому я добавляю в сцену объект Empty и сразу переименовываю его в ROTATION. Затем выделяю сферу и также выделяю Empty ROTATION в таком порядке. После этого нажимаю CTRL P, чтобы создать связь parent-child, где сфера становится дочерним объектом Empty ROTATION.

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

Создание остальных сфер на самом деле довольно простое, потому что можно использовать копии первой сферы и куба с Rigid Body Constraint.
Вернем Empty ROTATION в вертикальное положение, выделим куб и сферу с помощью multi-selection и создадим первую копию с перемещением через SHIFT D Y и движение мышью, разместив вторую сферу рядом с первой.

Я указал SHIFT D Y, то есть ограничение перемещения копии вдоль оси Y, чтобы выполнить смещение одновременно с дублированием. Другими словами, Blender воспринимает эти две операции как одну.
Это позволяет создавать остальные копии, уже идеально расположенные, просто нажимая SHIFT R, который повторяет последнюю операцию.
Если копии размещены правильно, то после сохранения проекта и запуска симуляции сферы останутся полностью неподвижными на своих местах.
Это означает, что симулятор Rigid Body не обнаруживает ложных столкновений между объектами.
Единственный недостаток заключается в том, что все копии будут дочерними объектами Empty ROTATION, который задает начальную ориентацию первой сферы.
Однако эту проблему можно быстро решить, выделив все копии, отсоединив их от Empty с помощью ALT P и выбрав Clear Parent and Keep Transformation.

Поверните Empty, управляющий первой сферой, сохраните проект и запустите симуляцию, чтобы оценить результат.
Если результат вас устраивает, следующим шагом будет скрытие кубов с Rigid Body Constraints как в сцене, так и в финальном рендере перед переходом к рендерингу.
Если центральные сферы двигаются слишком сильно, попробуйте расположить их ближе друг к другу в начальной конфигурации. Не забывайте перемещать сферы вместе с кубами, содержащими constraints, иначе сферы начнут движение с собственным начальным вращением.
Чтобы ускорить симуляцию или увеличить амплитуду качания сфер, можно изменить несколько параметров. Чтобы изменить параметр сразу для всех выбранных сфер, удерживайте ALT и щелкните мышью по нужному параметру.
Для сфер я рекомендую увеличить значение Bounciness и значительно уменьшить оба значения Damping для линейного движения и вращения в разделе Dynamics вкладки Rigid Body.

Однако я не советую уменьшать значение Friction, поскольку это может вызвать нежелательные движения у сфер, которые должны оставаться неподвижными.

Во вкладке Scene редактора Properties находится параметр Speed, который позволяет ускорить всю физическую симуляцию.
В той же вкладке также находятся параметры Substeps и Solver Iterations.
Рекомендую увеличивать их только в том случае, если вы замечаете ошибки в физической симуляции.
Эти параметры заставляют Blender выполнять больше вычислений, обеспечивая более точную симуляцию ценой увеличения времени расчета.
Ну вот и все! Надеюсь, вам понравился этот урок! До скорой встречи!