Заставить в Blender меш двигаться вдоль кривой можно при помощи Geometry Nodes. Разберем на простом примере, как это сделать.
Добавим в сцену кривую
shift+a – curve – circle
установив в параметрах радиус равный 10, и куб
shift+a – mesh – cube
Выделим куб, перейдем во вкладку модификаторов и добавим ему модификатор Geometry Nodes. Назовем его “follow curve”.
Для того, чтобы внутри дерева нодов куба можно было обращаться к кривой, добавим нод “Object Info” и в поле объекта выберем “Bezier Circle”. Переключим нод в режим “Relative”. Это нужно чтобы правильно совместить куб с кривой, если их точки “origin” не совпадают.
Получить координаты конкретной точки кривой, в которую мы будем помещать наш куб, можно при помощи нода “Sample Curve”. Добавим этот нод и соединим его с нодом “Object Info” кривой.
Переключим его режим работы в “Factor”. Теперь значение в поле “factor” дает нам относительное положение точки на кривой, если считать длину всей кривой измеряемой от 0 до 1.
Координаты точки на кривой мы получаем с выхода “Position”.
Теперь мы можем сместить все точки нашего куба в положение, полученное с выхода “Position”, что будет равнозначно привязке куба к этой точке на кривой.
Добавим нод “Set Position” и включим его в главную ветку с геометрией. Также подключим выход “Position” нода “Sample Curve” на вход “Offset” нода “Set Position”, чтобы сместить все точки куба к точке на кривой.
Теперь при изменении значения “Factor” нода “Sample Curve” куб будет двигаться вдоль кривой.
Поставленная цель достигнута, однако можно заметить, что куб двигается вдоль кривой статично, не поворачиваясь по направлению движения.
Для того, чтобы объект поворачивался по направлению движения, мы можем поворачивать его ось “X” вдоль касательной кривой.
Добавим в дерево нод “Align Euler to Vector” и соединим его вход “Vector” с выходом “Tangent” нода “Sample Curve”. Ось для поворота поставим “X”. Теперь вектор “X” куба будет выравниваться по вектору касательной в текущей точке кривой.
Чтобы применить этот поворот к кубу, добавим в основную ветку дерева нод “Transform” и соединим выход “Rotation” нода “Align Euler to Vector” с его входом “Rotation”.
Теперь куб всегда поворачивается лицом (направлением по оси “X”) вдоль кривой.
Однако, если кривая лежит не в начальной плоскости, можно заметить, что куб не только поворачивается по направлению движения, но еще и стал крутиться вокруг своей оси.
Чтобы скомпенсировать это вращение, мы можем дополнительно выравнивать ось “Z” куба по нормали в текущей точке кривой.
Добавим еще один нод “Align Euler to Vector”, подадим на его вход “Vector” нормаль с нода “Sample Curve” и добавим это вращение к уже имеющемуся, соединив входы и выходы “Rotation” обоих нодов “Align Euler to Vector”.
В результате наш куб двигается вдоль кривой, поворачиваясь по направлению движения и удерживая вертикальную ориентацию вдоль нормали кривой.