3D WORKSHOP 19: Caterpillar Soft Track

Материал из Blender3D.

Перейти к: навигация, поиск

Содержание

Моделируем гусеничный механизм

Изображение:Caterpillar_soft_track.jpeg Изображение:Intro-0.jpg

ВВедение

Как и у многих людей, у меня частенько возникают 3D-идеи в голове, и в основном я начинаю воплощать их сразу в Блендере без предварительных эскизов. Как и многие, я знаю, что это не самый лучший метод, но все равно работаю так, потому что слишком ленив, что бы искать лучший путь.

Две недели назад я проводил оздоравливающие выходные с моей подругой. Три дня без единого компьютера - это ад или рай? Хорошо что без компьютера, но плохо, что без Блендера, потому что я не мог реализовывать возникающие в моей голове идеи. Таким образом я мог только расслабить свое тело и позволить моему мозгу выбирать между "отключением сознания" и "B … 2.48a". В результате я взял ручку и бумагу и начал набрасывать отдельные эскизы. Лучшим моментом в этой истории является то, что мне пришлось долго разрабатывать проект, прежде чем я смог наконец приступить к реализации его в Блендере. Идеи множились каждую минуту; у меня уже был список проблем, на часть из которых были решения, и много вариантов и альтернатив. Когда я наконец вернулся домой, то попытался реализовать некоторые критические пункты в Блендере, Те же моменты, что мне не удалось разрешить, я опубликовал на легендарном форуме BlenderClan. На заметку новичкам (каким и я бываю иногда): попробуйте упростить свою проблему до ее самого примитивного варианта, чтобы найти решение. Откройте новый файл Блендера только с теми объектами, которые вам нужны для решения проблемы и займитесь с ними экспериментами. Если Вы неспособны найти решение, то можете спросить об этом на blenderartists форуме, объясните случай и, если возможно, выложите файл. Немного удачи, и Вы получите много ответов. Опасайтесь спрашивать сразу о слишком многих проблемах - ответы, вероятно, будут менее подробными.

Определения

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

Выполнение анимации при помощи только одного IPO ("Критерий исследования с одним IPO ": OIRA) … lol, это название вызывает у меня смех.

Когда применение этого критерия невозможно, применяем"Критерий Исследования с минимально возможным количеством IPO": AFAPIRA)

В “OIRA или AFAPIRA”, последовательности, мы собираемся : Заставить колеса транспортного средства оставаться на полу(Mesh объект), используя ограничения(constraints);настроить мягкое отслеживание положения гусеницы с динамической инерцией, без дополнительного использования скриптов на языке Python, в котором я еще неопытен(PyDrivers можно использовать)

В работе используются Модификаторы (Modifiers) и Ограничения (Constraits) Blender версии 2.48a

1. Слой 1: пол

Откройте новый Файл Блендера, удалите все объекты, выберите только Слой 1 (1),Переключитесь в вид сверху (Numpad 7), добавьте (Mesh) объект плоскость(Пробел Add->Mesh->Plane), переключитесь в режим редактирования (TAB), выделите с помощью клавиш(ПКМ, Shift+ПКМ) и удалите (X, 1) 2 верхних вершины(vertices),выделите оставшееся ребро(Edge) (A) увеличте его в 20 раз (S, 20, Enter), подразделите его 21 раз (W, 2, Number of cuts(число подразделений) :21) Изображение:1-layer1-001.jpeg Выделите вершины, расположенные на положительной части оси X (B, выделение мышью с нажатой ЛКМ), и спрячьте их (H).

Изображение:1-layer1-002-1.jpeg Переключитесь в вид спереди(Numpad 1), выберите две центральные вершины, переключитесь в режим пропорционального редактирования (O), выберите случайную диаграмму ослабления(Random Falloff)? Переместите вершины на 1BU (Blender unit - Единица измерения Блендера) вдоль оси Z, охватив кругом влияния пропорционального редактирования все вершины (G,Z,Колесико мышки для изменения диаметра круга пропорционального редактирования). Изображение:1-layer1-003.jpeg Изображение:1-layer1-004.jpeg

Переключитесь в вид сверху (Numpad 7), включите отображение ранее скрытых вершин (ALT+H), выделите все вершины (A,A), экструдируйте на 2 BU по оси Y (E,1,Y,2, Enter) Изображение:1-layer1-005.jpeg

Выделите все вершины (A,A) и пересчитайте нормали наружу(Ctrl+N), Переключитесь в объектный режим(Object mode)(Tab), Добавьте модификатор Subsurf (Ctrl+2). Изображение:1-layer1-006.jpeg

Изображение:1-layer1-007.jpeg Переименуйте объект плоскость(Plane) в Пол(Floor) и сделайте объект гладким (Smooth). Изображение:1-layer1-008.jpeg

2. Слой 2: Проекции

Выберите только Слой 2(2), Переключитесь в вид сверху (Numpad 7), добавьте объект Mesh Plane (Пробел->Add->Mesh->Plane) и преобразуйте ее для того чтобы получить десять ребер на 1BU(Blender Unit) на прямой линии, передвиньте в положение (X=5, Y=0, Z=10) , переименуйте в ProjectionFloor и следите за центром объекта ! Изображение:2-layer2-001.jpeg Изображение:2-layer2-002.jpeg

В режиме редактирования, откройте панель "Link and Materials"(F9) (Связь и материалы), добавьте новую группу вершин(Vertex group) нажав кнопку (New), назовите ее Pr1, выделите только первую слева вершину, и cопоставьте ее с созданной группой вершин, нажав кнопку (Assign). Добавьте еще одну группу вершин, назовите ее Pr1b, выделите ТОЛЬКО вторую вершину и сопоставьте (Assign). Проделайте тоже самое для Pr2, Pr2b, Pr3, Pr3b,... Pr6.

Изображение:2-layer2-003.jpeg

3. Слой 3: Объекты Empty

Оставив слой2 активным, сделайте активным также слой 3 (Shift+3), переключитесь в вид спереди, и добавьте объект Empty (Пробел->Empty), переименуйте его в Pr1, расположите его в точности в тоже место, что и первая вершина объекта ProjectionFloor, используя кнопку Ctrl для привязки к координатной сетке (G, перемещение объекта мышью удерживая кнопку Ctrl). Если ось Z Empty не указывает наверх, проверьте настройки пользователя, что кнопка "Aligned to View" НЕ нажата.

Изображение:3-layer3-001.jpeg

Добавьте еще один Empty, расположите его на той же позиции, то вторая вершина, назовите его Pr1b. Сделайте то же самое для оставшихся вершин (Pr2, Pr2b... Pr6). Проверьте в виде сверху, что позиции Empty объектов совпадают с вершинами также и по оси Y, так как это было невозможно проконтролировать из вида спереди.В панели Рисование (Draw)(F7), нажмите кнопку Name(отображать Имя) для объектов в слоях 2 и 3

Изображение:3-layer3-002.jpeg Изображение:3-layer3-003.jpeg

Изображение:3-layer3-004.jpeg

Правой кнопкой мышки(ПКМ) выделите Меш объект Projection Floor, переключитесь в режим редактирования (Tab), выделите только самую левую вершину(ПКМ). Оставаясь в режиме редактирования выделите соответствующий этой вершине Empty объект Pr1 (Ctrl+ПКМ) и определите вершину как родителя по отношению к этому объекту(Ctrl+P)

После этого выделите вторую вершину (ПКМ) и второй объект Empty (Ctrl+ПКМ), сделайте вершину родителем (Ctrl+P), и так далее вплоть до последнего Empty объекта. Когда вы закончите, вы можете заметить, что при перемещении вершины соответствующий ей Empty объект следует за ней. Изображение:3-layer3-006.jpeg Вы двигали вершину только для того, чтобы проверить, что привязка работает, поэтому если вы начали двигать вершину, нажмите (Esc), а если уже подвинули, нажмите (Ctrl+Z). Итак, первый трюк. Переключитесь в вид спереди (Numpad1), отобразите первый слой(Shift+1) чтобы увидить Меш объект Floor. Выделите (ПКМ) объектМеш ProjectionFloor, перейдите на панель Модификаторов (Modifiers), добавьте Shrinkwrap modifier, установите параметры как на рисунке и наслаждайтесь результатом.

Изображение:3-layer3-007.jpeg Изображение:3-layer3-008.jpeg

Надеюсь вы догадались, что вам нужно сделать то же самое для всех остальных групп вершин, но не паникуйте, когда вы нажмете кнопку Copy (Копировать)в Модификаторе все аттрибуты скопируются автоматическ, и все, что вам нужно будет сделать, это изменить группу вершин(Pr2, Pr2b... Pr6). Теперь, если вы двигаете Меш, объекты Empty следуют за полом (Floor). Неправда ли, круто?

Изображение:3-layer3-009.jpeg

4.Слой 4 : Путь

Сделайте так, чтобы отображался только слой 4 (4). Перейдите в вид спереди (Numpad1) добавьте несколько кривых Безье, как разметки для расположения Кривой NURBS Circle(Круг), которая будет путем для гусеницы. Так как нам не нужны трехмерные кривые, необходимо повернуть кривые вокруг оси Х. Отобразите панель "Transform Properties"(Параметры трансформации) (N) и установите поворот для RotX. И не забудьте дать имена всем вашим объектам.

Изображение:4-layer4-001.jpeg

Изображение:4-layer4-002.jpeg


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

Примечание переводчика
В этой части статьи автор полностью игнорирует этапы построения объекта  
PathCaterpillar.Сначала создаются и располагаются как на рисунке объекты Bezie 
Сircle (Круги), которые в дальнейшем используются как лекало для размещения точек 
объекта PathCaterpillar.Каждый из них в объектном режиме должен быть повернут  
вокруг оси Х на 90 градусов (R,X,90). 
Суть состоит в том, чтобы создать объект Nurbs Circle,в окне Transform Properties  
(N) в объектном режиме задать поворот по оси х равный 90 градусам (R,X,90), затем 
перейти в режим редактирования, выделить все вершины(AA), будет гореть желтый 
прямоугольник, потом подразделить, чтобы получить сорок вершин и расположить 
вершины таким образом, чтобы они оказались привязанными к узлам координатной сетки.
Как проще выполнять подразделение
Когда у вас выделены все вершины (A)( все вершины и соединяющие их линии желтые),
нажмите(W -> Subdivide), у вас станет 16 вершин. После чего еще (W -> Subdivide), и 
вершин станет 32. После чего выделите по центру прямоугольника пять вершин наверху 
и пять внизу (A,B -> выделение ЛКМ). Нажмите (W -> Subdivide) и у вас получится 40 
вершин.

Изображение:4-layer4-003.jpeg

Продолжение Примечания переводчика  
Напоминаю, что для привязки выделенного объекта или элемента к координатной сетке   
существует комбинация клавиш (Shift+S ->Selection->Grid).Причем для привязки 
программой используется отображаемый размер сетки, который в Блендере зависит от 
масштаба изображения (Изменяется колесиком мышки)

Изображение:4-layer4-004.jpeg

Примечание для всех (как и для меня иногда) Проверьте, что длина(PrintLen) вашего пути после окончания редактирования является круглой величиной, например 50, потому что гусеничный механизм будет легче настроить с (например) 50 звеньями, каждое в 1BU шириной.

Изображение:4-layer4-005.jpeg

Выберите все вершины, перейдите в панель "Curve Tools"(Инструменты кривых)(F9, когда кривая находится в режиме редактирования(переключается (TAB))). Задайте значение OrderU =3 и установите для всех вершин вес(Weight) равный единице.

Изображение:4-layer4-007.jpeg


Замечание для зажатых(?) людей,(как я, иногда): очень важно нарисовать кривую PathCaterpillar как провисший канат, потому что, когда гусеница движется, она будет натягиваться. Но помните, гусеница не эластична, и длина должа оставаться постоянной.

Изображение:4-layer4-008.jpeg

Путь должен выглядеть как провисший канат, так как скоро он будет выглядеть как канат натянутый.

Изображение:4-layer4-009.jpeg

5. Слой 5: Ограничения (Constraints)

Мы собираемся настроить большое количество ведомых(constrained)объектов типа Empty. Эта система поможет нам регулировать положение стальной рамы транспортного средства, и деформировать будущую Арматуру, которая в свою очередь контролирует кривую PathCaterpillar. отобразите слои 3,4 и 5 (3,Shift+4,Shift+5), добавьте Empty, назовите его PositionFrame1 (положение рамы 1), установите его размер равный 0,5 в панели "Link and Materials"(F9), сделайте Pr1 родителем PositionFrame1 (ПКМ на PositionFrame1,Shift+ПКМ на Pr1, Ctrl+P, Enter), и передвиньте PositionFrame1 в точку, расположенную на 1BU вверх(по оси Z) над Pr1. Повторите описанные операции с объектом Positionframe2 (Родитель = Pr3b), и Positionframe3 (Родитель = Pr6). Изображение:5-layer5-001.jpeg Изображение:5-layer5-002.jpeg Изображение:5-layer5-003.jpeg

Добавьте меш объект плоскость, назовите её AverageFrame удалите одну вершину и расположите оставшиеся на прямой линии, каждая из вершин в том же месте, где Positionframe1, Positionframe2, Positionframe3 соответственно. Зацепите(Hook)каждую вершину на соответствующий ей Empty объект (для этого выделите Empty (ПКМ), потом (Shift+ПКМ) добавьте к выделению объект AverageFrame,затем (TAB), чтобы перейти в режим редактирования, кликните (ПКМ) на нужной вершине, и нажмите (Ctrl+H)->Add,To selected object)

Изображение:5-layer5-004.jpeg Изображение:5-layer5-005.jpeg

Переключитесь в Объектный режим, Добавьте объект Empty, назовите его OrientateFrame, расположите его на PositionFrame2, выберите Empty OrientateFrame (ПКМ) и Меш объект AverageFrame(Shift+ПКМ), переключитесь в режим редактирования (Tab), выберите все 3 вершины (A), и определите эти вершины как родитель (Parent) объекта Empty (Ctrl+P, Enter)

Изображение:5-layer5-006.jpeg

Сейчас, если вы добавите отображение слоя 2 (Shift+2), выделите Меш ProjectionFloor, и передвинете его вдоль оси X, вы увидите, что объект Empty OrientateFrame следует за Меш объектом AverageFrame, но там где меш Floor на первом слое (в данный момент скрыт) идет вверх, OrientateFrame идет вверх ногами, и его ось Z указывает вниз. Для того, чтоы исправить это, просто добавьте ему ограничение (Constraint) Copy Rotation для PositionFrame1, Influence (влияние) 0, и ограничение TrackTo (Ctrl+T,1) для PositionFrame3. Итак у вас есть 2 выбора для того, чтобы попробовать позже, всего лишь поиграйте с параметром Influence.

Изображение:5-layer5-007.jpeg Изображение:5-layer5-008.jpeg

Переключитесь в вид сбоку (Numpad 3), добавьте Меш плоскость (Пробел->Add->Mesh->Plane), назовите ее SoftFrame, перейдите в режим редактирования (Tab), поверните плоскость вокруг оси Y (R, Y, 90, Enter). Выделите только две верхние вершины, соедините их в одну (W,5,3,Enter), выделите все вершины (A,A), подразделите (W,1), переместите все вверх на 1BU (G,Z,1,Enter). Установите параметры на панели (Soft Body)(мягкое тело)(F7,F7)

Изображение:5-layer5-009.jpeg Изображение:5-layer5-010.jpeg


Изображение:5-layer5-011.jpeg Изображение:5-layer5-012.jpeg Изображение:5-layer5-013.jpeg

Этот метод придуман не мной,я прочитал о нем на сайте http://www.blendernation.com (англ.), точнее здесь http://www.blendernation.com/2008/02/12/automatically-generated-camera-shaking/(англ.). Полное описание вы можете найти на сайте http://blenderartists.org(англ.), по этому адресу http://blenderartists.org/forum/showthread.php?t=116699 (англ.). Большое спасибо тебе, yoyofargo!

Добавьте объект Empty в основание SoftFrame, назовите его SoftDynamicFrame и присвойте ему три центральные вершины Меш объекта как Родителя.

Изображение:5-layer5-014.jpeg Изображение:5-layer5-015.jpeg

Итак, когда Softbody (мягкое тело), будет двигаться, Empty объект SoftDynamicFrame будет соответственно будет получать значение угла от этого движания. Этот угол будет копироваться для движения частей будущей Арматуры.

Добавьте объект Empty AngleFrame на 2BU выше OrientateFrame, определите OrientateFrame как родителя для AngleFrame. Добавьте Copy Rotation Constraint (Ограничение Копирование поворота) от SoftDynamicFrame к AngleFrame оставьте только Y и установите параметр influence равный 0.1. Изображение:5-layer5-016.jpeg Изображение:5-layer5-017.jpeg

Выберите кривую PathCaterpillar', назначте ей AngleFrame как Родителя. Теперь, если вы подвинете меш ProjectionFloor, PathCaterpillar будет следовать наклону Floor (пола). Если вы повернете Empty объект SoftDynamicFrame вокруг оси Y, PathCaterpillar будет следовать за вращением.

Итак, выпейте воды, всё еще даже далеко не закончено. Добавьте объект Empty CenterMidWheel, как дочерний объект(Child) объекта AngleFrame, Добавьте объект Empty IKTargetMidLeft и Empty IKTargetMidRight, оба дочерние объекты (Child) объекта CenterMidWheel. IKTargetMidLeft IKTargetMidRight необходимо поместить на соответствующие вершины объекта PathCaterpillar. Изображение:5-layer5-018.jpeg

Добавьте объект Empty CenterFrontWheel, как дочерний объект(Child) объекта AngleFrame. Разверните его на -90° вокруг оси Z (R,Z,-90,Enter). Это специальное расположение будет ипользоваться для будущей инверсной кинематики (IK).

Изображение:5-layer5-019.jpeg

Этому объекту Empty придется поворачивться по другому вокруг AngleFrame, и для того чтобы сделать этот волшебный фокус, нам необходим другой объект Empty PivotFrontWheel, дочерний объект AngleFrame, и ограничение (Constraint) Transformation (Преобразование) для PivotFrontWheel. Объект Цель (Target Object) этого ограничения - SoftDynamicFrame

Изображение:5-layer5-020.jpeg Изображение:5-layer5-021.jpeg

Потом CenterFrontWheel Получает Copy Rotation Constraint (ограничение копирование поворота) от PivotFrontWheel.

Изображение:5-layer5-022.jpeg

Теперь если вы повернете SoftDynamicFrame , вы у вас должно получиться нечто подобное этому.

Изображение:5-layer5-023.jpeg

Вау, никакой морской болезни? Тогда давайте сделаем то же самое для правой стороны силы(force).

Изображение:5-layer5-024.jpeg Изображение:5-layer5-025.jpeg

Изображение:5-layer5-026.jpeg Изображение:5-layer5-027.jpeg S

6. Слой 6 Арматура

Добавьте арматуру на 6 слой. Помните, что расположение обоих концов каждой кости должно совпадать с двумя соседними вершинами кривой PathCaterpillar (Хотя вы можете заметить на следующем рисунке некоторые исключения из этого правила). Центр объекта арматуры должен совпадать с положением OrientateFrame, который также должен являться родителем объекта арматуры.

Примечание переводчика. Наиболее удобно создавать арматуру, поместив курсор в точку PditionFrame2 и включив в панели арматуры кнопку X-axis Mirrow. Сначала вы создаете арматуру, у вас есть одна кость, направьте ее вниз, схватив за узкий конец. После чего нажмите Shift+E для экструдирования двух симметричных костей в разные стороны. Это позволт вам после размещать сочленения костей только для одной половины арматуры, конечно, если ваша кривая PathCaterpillar симметрична.

Изображение:6-layer5-001.jpeg

Когда создание арматуры завершено, в режиме редактирования выберите все кости (A) и пересчитайте углы поворота костей вокруг своей оси (Ctrl+N,1). Наступило время IK Constraints (Ограничений инверсной кинематики). Переведите Арматуру в Объектный Режим (Tab). Выберите объект Empty CenterFrontWheel (ПКМ), Выделите Арматуру (Shift+ПКМ), переключите Арматуру в режим Позы (Pose mode)(Ctrl+TAB), выделите Кость, которая уже указывает на объект Empty, добавьте IK Ограничение (Constraint) для текущего объекта (Shift+I,1).

Изображение:6-layer5-002.jpeg Изображение:6-layer5-003.jpeg

Не забудьте сделать неактивной кнопку Stretch (Растяжение), ведь нам нужна постоянная длина.Опция Rot дает Кости возможность следовать за вращением цели, и вы, счастливчики, конечно же установили ориентацию для цели CenterFrontWheel в пятой главе, не правда ли?

Примечание переводчика: Во-первых, автор забыл сказать, что необходимо повторить те же действия для Симметричной кости заднего колеса.Target:CenterRearWheel Во-вторых, Лично у меня после нажатия кнопки Rot цепочка костей IK выгнулась поперек плоскости объекта, налево по ходу гусеницы, а верхняя цепь костей выгнулась дугой направо . Проблема была решена так. Я выделил один из Empty, ось z которого была направлена строго вверх, инажал (Shift+S,4) после чего выделил арматуру, выделил в режиме редактирования все кости и нажал (Ctrl+N,2.) Совместив оси всех костей с курсором. Эта функция, по моему опыту работает лучше, чем (Ctrl+N,1), хотя я могу чего-то не понимать. Изображение:6-layer5-004.jpeg Изображение:6-layer5-005.jpeg

Что еще? IK для среднего Колеса.

Изображение:6-layer5-006.jpeg Изображение:6-layer5-007.jpeg

И последнее по порядку, но не по важности, добавление ограничений (Constraints) для пола.

Изображение:6-layer5-008.jpeg Изображение:6-layer5-009.jpeg

Изображение:6-layer5-010.jpeg

Понятно?

'Примечание переводчика: Ничего не понятно.На самом деле для костей, лежащих на полу нужно назначить Constraint TrackTo, а в поле Target вписать имя Empty, в который кость упирается тонким концом.

А, кстати, вам необходимо добавить на слое 3 объект Empty PrePr1, дочерний объекта Pr1, и PostPr6, дочерний объекта Pr6. Объект PostPr6 нужно развернуть на 90 градусов вдоль осей X и Y (R,X,90,Enter,R,Y,90,Enter)

Изображение:6-layer5-012.jpeg Изображение:6-layer5-013.jpeg

Изображение:6-layer5-014.jpeg Изображение:6-layer5-015.jpeg

Изображение:6-layer5-016.jpeg Изображение:6-layer5-017.jpeg

Отобразите слои 5 и 6, поверните объект Empty SoftDynamic Frame (+ и - 90°). Что вы видите? Арматура деформируется, но не растягивается? Цель достигнута! Ну, на самом деле, не полностью. IK для центрального Колеса все-таки немного растягивается.

Изображение:6-layer5-018.jpeg

Примечание для экспертов (может быть когда - нибудь и для меня): если вы найдете лучший способ ограничить IK, устранив растягивание, с полной постоянной длинной всей цепи, пожалуйста, сообщите мне,как вам это удалось!

7. Слой 7: Крюки(Hooks)

Этот раздел -чистое, ничем не омраченное удовольствие. Разместите объект Empty на каждой вершине кривой PathCaterpillar. Назовите их HookPath...HookPath.0XX соответственно. Правда, на картинке внизу имена остались на Французском языке, но уже слишком поздно переводить эти мелочи, и работа еще не закончена, поэтому просто подставьте за меня HookChenille = HookPath.

Изображение:7-layer7-001.jpeg

Выберите арматуру, перейдите в режим Позы (Ctrl+TAB), выделите объект Empty(Ctrl+ПКМ), Выберите соответствующую кость(Shift+ПКМ), сделайте эту кость Родителькой по отношению к объекту Empty.(Ctrl+P,1).

Изображение:7-layer7-002.jpeg

Должен ли я уточнять, что эту последовательность действий нужно повторить для каждого Empty? Когда будет готово, отобразите кривую PathCaterpillar, перейдите в режим редактирования, выделите 1 Вершину(ПКМ), выделите соответствующий Empty (Ctrl+ПКМ) и создайте Крюк(Hook) (Ctrl+H,2).

Изображение:7-layer7-003.jpeg

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

Теперь мы начинаем специальную главу, посвященную передвижению звеньев гусеницы вдоль пути. Как вы понимаете это будет только приближение. Почему? Потому что я знаю только два метода и оба они не являются "реальными".

Первый метод: Центры звеньев находятся на пути, тогда сочленения слишком широкие на кривых с маленьким радиусом изгиба.

Изображение:7-layer7-004.jpeg Изображение:7-layer7-005.jpeg

Второй метод: Центры сочленений работают с Ограничением СледитьЗа (TrackTo Constraint), но тогда сочленения слишком сжаты на кривых с маленьким радиусом изгиба.

Изображение:7-layer7-006.jpeg Изображение:Img-02800t.PNG Итак, первый метот кажется менее точным, но гораздо быстрым в настройке. Мы выберем его, с использованием более узких гусеничных звеньев, иллюзия должна быть достаточной.

8.Слой 8: Звенья

Создайте простейшее звено с размером по оси х около 1BU, по оси Y 2BU, и по оси Z 0.5BU.Можете выполнить просто деформировав куб, или, как я, сделать его немного более сложным:

Изображение:Img-02850t.PNG Изображение:Img-02900t.PNG Изображение:Img-02950t.PNG Изображение:Img-03000t.PNG Изображение:Img-03050t.PNG

Выберите звено (ПКМ), выберите кривую PathCaterpillar (Shift+ПКМ), и заставьте звено следовать по кривой (Ctrl+P,2). Сбростье поворот (Clear Rotation) (Alt+R, Enter)и cбросьте смещение звена по отношению к родителю (Clear Origin) (Alt+O, Enter). При необходимости разверните (R) звено так, чтобы расположитьего в на кривой. Проверьте на панели Curve and Surface (Кривая и Поверхность), что отмечены следующие кнопки : CurvePath, CurveFollow and PathDist Offs.

Изображение:Img-03100t1.PNG Изображение:Img-03100t2m.PNG

Если звено находится на на прямом участке кривой, выделите кривую, перейдите в режим редактирования, выделите всё (A). Единственный не желтый участок кривой возможно не в середине прямого участка.

Изображение:Img-03150t.PNG

Выделите один участок в центре нижней основания, сотрите его (X,2), проблема должна быть решена. Если кривая открыта, замкните ее (С) Покиньте режим редактирования кривой. Выберите звено, сделайте дубликат (Alt+D), задайте для него TimeOffset(сдвиг по времени) равный 1.00 на панели Anim Settings (F7)

Изображение:Img-03200t1.PNG Изображение:Img-03200t2m.PNG

C помощью метода дублирования (внимательно, комбинация Alt+D, а не Shift+D) вы получаете связанные копии объекта, и в последствии вы сможете изменять первоначальное звено и эти изменения будут также происходить с остальными звеньями одновременно. То есть вы можете экспериментироваь с простым деформированным кубом в качестве звена, а потом сможете модифицировать этот Меш как вам угодно без необходимости проделать ту же работу 50 раз. Замечание для умных (одним из которых бываю и я, правда, к сожалению, не в этом случае): Возможно существуют волшебный трюк с использованием модификатора Array (Массив), при использовании которого можно добавить все звенья сделав всего несколько кликов. Если вы знаете как, пожалуйста, сообщите мне.

Помните примерную длину кривой PathCaterpillar? Она была в районе 50, одно звено имеет ширину 1BU, то есть вам необходимо повторить вышеописанные действия еще 48 раз, для того чтобы покрыть всю кривую гусеницей. (Alt+D, TimeOffset:2.00, Alt+D, TimeOffset:3.00, ... )

Изображение:Img-03250t.PNG

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

Изображение:Caterpillar_track_french_keyboard.JPg Я исправил, конечно. Вы бы знали, как бедные французы с паролями мучаются, у них даже цифры только с Shift или Caps набираются:)

9. Слой 9: колеса

Этот раздел находится полностью на вашей совести, Я только покажу вам мой слой 9 как пример. Я начал с первого колеса, верхнего левого, и остальные это измененные и масштабированные копии. Изображение:Img-03300t.PNG


Изображение:Img-03350t.PNG

Родительские объекты для колес находятся на слоях 3 и 5. FrontWheel это дочерний объект CenterFrontWheel, MiddleWheel это дочерний объект CenterMidWheel, RearWheel это дочерний объект CenterRearWheel, FloorWheel1 это дочерний объект Pr1, FloorWheel2 это дочерний объект Pr2, ... , FloorWheel6 это дочерний объект Pr6.

10. Слой 10: Ведущий и направляющий

Добавьте 2 объекта Empty на 10 слой. Первый из них, назовем его Master (ведущий), должен быть размещен в точку 0 по оси X, 0 по оси Y и 20 по оси Z (Alt+G,Enter, G,Z,20, Enter). Второй, назовем его Guide (направляющий) расположить в точке (X:0;Y:0;Z:10). Guide потом получает Copy Location Constraint по оси X от Master.

Изображение:Img-03400t1.PNG Изображение:Img-03400t2m.PNG

Guide также является родителем Меш объектов ProjectionFloor на втором и SoftFrame на пятом слое соответственно. Установите эти отношения Родитель - дочерний объект сами. Как только вы это сделаете, вы можете убедиться, что если вы передвигаете объект Empty Master вдоль оси X над Меш объектом Floor, вся конструкция следует неровностям объекта Floor.

Изображение:Img-03450t.PNG

Разве простого скольжения недостаточно? Не сдавайтесь, вы уже сделали большую часть работы. Переключитесь в раскладку экрана "Animation" (Ctrl+ <-->) или с помощью меню

Изображение:Img-03500tm.PNG

Выберите кривую PathCaterpillar (на 4 слое), в окне "IPO Curve Editor" (Редактор кривых IPO) выберите тип IPO : Path.

Изображение:Img-03550tm.PNG

Если в окне нет кривой, добавьте вершину недалеко от центра координат (Ctrl+ЛКМ), а потом другую подальше (Ctrl+ЛКМ), смените режим интерполяции на Linear (линейный) (T,2), и Включите Extend Mode -> Cyclic (Режим Расширения- Циклический) (E,4).

Изображение:Img-03600t.PNG Изображение:Img-03650t.PNG Изображение:Img-03700t.PNG

Вызовите окно "Transform Properties"(Свойства трансформации), Перейдите в режим редактирования кривой IPO (Tab), выделите первую вершину (ПКМ) и задайте ее координаты во всплывающем окне.

Изображение:Img-03750tm.PNG Изображение:Img-03800tm.PNG

Координата X второй вершины равна 50 потому что это длина кривой PathCaterpillar'. Если вы не выберете режим Cyclic для кривой IPO, звенья гусеницы сделают только один оборот вдоль пути.

А сейчас перейдем к таинственному и волшебному PyDriver. Впишите Blender.Object.Get('Master').LocX *(-1). Итак!

Изображение:Img-03850tm.PNG Изображение:Img-03900tm.PNG Изображение:Img-03950tm.PNG

Если с поведением звеньев гусеницы что-то не так, то вы можете инвертировать кривую IPO (чтобы она шла так\\\, а не так ///), или добавить *(-1) в конец выражения PyDriver. Отобразите только уровни 8 и 10, выберите Empty Master и передвиньте его вдоль оси X. Впечатляет? Подождите, когда увидите как работают колеса. Выделите FrontWheel, выделите объект типа, отметьте Roty (ЛКМ), кликните на кнопке "Add Driver" (Добавить направляющую) в окне "Transform Properties"(Свойства трансформации), кликните на маленькой кнопке с изображением змеи и впишите Blender.Object.Get('Master').LocX *(3.05).

Замечание для математиков (боюсь,не для таких как я): Я понятия не имею, почему множитель равен 3,05, конкретное значение я определил опытным путем. По идее это число зависит от количества зубцов на колесе, но в моем случае 50/12 =4.16. Итак, кто-нибудь знает, почему?

Проделайте такие же действия для остальных колес. Вы, конечно можете использовать кривую IPO от FrontWheel для RearWheel, только одну кривую IPO для шести FloorWheels(Колес, лежащих на нижнем горизонтальном участке гусеницы и соприкасающихся с полом), и одну для MiddleWheel, если размер этого колеса не совпадает с размером FloorWheels.

Изображение:Img-04000t.PNG

Помните последовательности “OIRA или AFAPIRA”? В общем, IPO Скорости для пути это прямая, и не считается. То есть единственный объект, который будет анимироваться с испльзованием кривой IPO это объект Empty Master. Перейдите в кадр 1 (Shift+курсор влево), выделите Master, вставьте анимационный ключ Location(I,1), переместитесь в кадр 51 (пять раз нажать кнопку курсора вверх), передвиньте Master вдоль оси X, снова вставьте анимационный ключ Location(I,1). В окне Ipo вы можете удалить кривые Ipo для остальных осей (LocY,LocZ), а также редактировать и настроить Ipo LocX.

Изображение:Img-04050t.PNG

Если объект Mesh SoftFrame ведет себя по-дурацки, перейдите в панель "Collision" и нажмите на кнопку "Free Cache" (очистить Кэш).

Изображение:Img-04100t1.PNG Изображение:Img-04100t2m.PNG

Обратите внимание на значение End на той же самой панели, если ваша анимация длится больше 250 кадров. Перейдите в режим редактирования, выделите все и экструдируйте немного вниз. (A,E,1,Z,-0.01). Если не сработало, попробуйте удалить модификатор Subsurf, или примените его. Если Mesh ProjectionFloor ведет себя по-идиотски, измените меш Floor

Изображение:Img-04150t.PNG

Заметка для воинов отладки:(может и для меня, я не знаю): Если вы определите, почему модификатор Shrinkwrap совершает этот прыжок, пожалуйста сообщите мне, как это испраить.

Помните, что вы можете выполнить точную настройку с помощью регулирования параметра Influence (влияние) Ограничений Копирование поворота (Copy Rotation Constraints) от CenterFrontWheel, AngleFrame, CenterRearWheel, и вы можете выбирать между Copy Rotation и Track To для OrientateFrame.

11. Слой 11-13: Амортизатор

Теперь сделаем поршень, гофрированный сальник(?) и пружину. Арматура на слое 11.

Изображение:Img-04200t.PNG Изображение:Img-04250t1m.jpeg Изображение:Img-04250t2m.PNG


Изображение:Img-04300t1m.jpeg Изображение:Img-04300t2.PNG


Изображение:Img-04350t1m.jpeg Изображение:Img-04350t2.PNG

На 12 слое несколько объектов Empty, установить IK, Track To.... я пропускаю.


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

Объекты на слое 13. Начнем с поршня. Верхний блок (BlockHigh) привязана ограничением TrackTo в направлении нижнего блока (BlockLow), а нижнего блока (BlockLow) привязана ограничением TrackTo в направлении верхнего блока части (BlockHigh).

Изображение:Img-04400t1.PNG Изображение:Img-04400t2.PNG

Изображение:Img-04450t1.PNG Изображение:Img-04450t2.PNG

Теперь гофрированный сальник. Левый Блок (Block Left) и Правый Блок (Block Right) отслеживают друг друга как поршень. Также гофрированный сальник имеет ограничение StrechTo (Constraint).


Изображение:Img-04500t1.PNG Изображение:Img-04500t2.PNG

Действие очень простое, но иллюзия безупречна...

Изображение:Img-04550t.PNG Изображение:Img-04600t.PNG

... До тех пор, пока вы не переключились в вид сбоку. Если гофрированный сальник деформировался, не спрашивайте меня почему, и просто подгоните размер по оси Z (S,Z, двигайте мышку до получения нужного размера).

Изображение:Img-04650t.PNG Изображение:Img-04660t.PNG

Если расположение сальника неправильное, отобразите его оси на панели "Draw", и поверните все вершины в режиме редактирования, расположив курсор в центре объекта и включив режим поворота вокруг гурсора (Pivot Mode).

Изображение:Blenderart19-caterpillar_track_pivot_mode.jpeg. Не забудьте вернуть режим поворота обратно на Median Point.(средняя точка объекта).


Итак, пружина. Эта пружина будет вертикальной. Ограничение TrackTo всегда требует, чтобы ось указывала вверх, то есть в этом случае есть конфликт между направлениями цели и этим верхним указанием. Мы будем использовать кость, с ограничением IK (Constraint) для того, чтобы ориентировать верхний и нижний блоки, и каждый блок получит CopyRotation (копирование поворота) от кости. Почти так же просто, как для поршня.

Как моделировать пружину? Просто, но мы ведь хотим ее анимировать! Добавьте Плоскость, Поместите курсор в центр, в виде спереди оставьте только Ребро и вершину. Выделите все, и нажмите Screw(крутить) в панели Mesh Tools (инструменты Меша).

Изображение:Img-04700t1.PNG Изображение:Img-04700t2m.PNG

Сотрите цилиндр и оставьте пружину. Для того чтобы выделить цилиндр, щелкните ПКМ одну из его вершин, а потом держите Сtrl и + на Numpad пока не выделится весь цилиндр. Потом нажмите Del, Enter.

Изображение:Img-04750t.PNG

Выделите все вершины, выберите в меню пункт Mesh->Scripts->Edges to Curve. Итак, Скрипт сделал копию меш объекта и у нас есть новая кривая. Поредактируем эту новую кривую. Выделим все её вершины, в панели Curve Tools (инструменты кривой), кликните на кнопку Nurb, кнопку Endpoint U, установите значение Order U:3, Weight1, нажмите кнопку Set Weight (Назначить вес). Вернитесь в объектный режим. Добавьте кривую Nurbs Circle (Круг Nurbs), назовите его SpringBev, и несколько уменьшите его размер.Удалите меш- объект пружину, и начните редактировать свежепреобразованную кривую пружины. Назначьте объект SpringBev объектом сечения (Bevel Object)на панели "Curve and Surface". Никаких видимых изменений не последовало, поэтому перейдите в режим редактирования, выделите все вершины кривой (A) и задайте радиус равный 1. (W,4,Enter). Отдельное спасибо Zeauro из BlenderClan за этот трюк.

Но так как пруток, из которого изготовлена пружина не является полой трубкой, нам нужна другая кривая NURBS, которую мы будем использовать как Taper Object (букв. конус, объект определяющий профиль утончений и утолщений кривой. Также используется для закрытия концов кривой). Заметьте, что размер этого объекта, назовем его SpringTaper равен 0,1 в Объектном режиме.

Изображение:Img-04800t.PNG Изображение:Img-04850t1.PNG Изображение:Img-04850t2m.PNG Изображение:Img-04900t.PNG

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

Изображение:Img-04950t.jpeg

Сборка сверзу до низу.

Изображение:Img-05000t.PNG

SpringBlockH, дочерний объект главного Empty объекта амортизатора FixeAbsorber1 получает ограничение копирование поворота (Copy Rotation Constraint) от BoneAbsorber2 из ArmatureAbsorber. Помните, ограничение TrackTo невозможно использвать, так как объекту приходится отслеживать вертикально вниз.

Изображение:Img-05050t.PNG

Empty объект CenterSpringH, дочерний объекта SpringBlockH.

Изображение:Img-05100t.PNG

Кривая CurveSpring, дочерний объекта CenterSpringH.

Изображение:Img-05150t.PNG

Empty объект ScaleSpring, дочерний объекта CenterSpringH.

Изображение:Img-05200t.PNG

CenterSpringL, дочерний объекта SpringBlockL. Изображение:Img-05250t.PNG

SpringBlockL, дочерний объекта Empty CenterWheel2. Изображение:Img-05300t.PNG

BoneSpring из ArmatureSpring, дочерний объекта CenterSpringH.

BoneSpring управляется IK ограничением от CenterSpringLс нажатой кнопкой Stretch. Верх (локальная ось Y) кости BoneSpring четко соответствует по размеру деформируемой части пружины. Добавьте ограничение Copy Scale (Копировать масштаб) только по оси Y к объекту Empty ScaleSpring. ScaleSpring сонаправлен BoneSpring и расположен в начале деформируемой части пружины. Выделите все вершины деформируемой части пружины, выделите ScaleSpring, и создайте крюк (Hook)(Ctrl+H).

Итак, как вы видите, риггинг динамической пружины не так сложен. Но повторяю, это не мой метод. Я позаимствовал его из http://blenderunderground.com/2008/01/03/making-a-spring- rig-in-blender/, упростил его (я думаю) и улучшил (я надеюсь). Итак, "Чувак, все что нужно сделать... уже сделано!"

Ну, вот и все. Добавьте некоторые механические элементы для того, чтобы завершить амортизатор. Конечно танк не оборудован такими заметными и хрупкими амортизаторами, но ведь 3D это не реальный мир, так что, почему бы нет.


Изображение:Img-05350t.PNG

12. Вызов

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

Ну, кто может сделать лучше, проще и быстрей? Я уверен, что это возможно. Но я до сих пор не придумал, как. И не забывайте о принципах "OIRA или AFAPIRA".

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

alain@bktr.ch Мой любимый язык - Французский, но я могу декодировать Английский (только простые слова, пожалуйста) und auch ein bisschen Deutsch (da noch mal bitte nicht zu komplizierte Wörter verwenden).

Развлекайтесь!

13. Файлы примеров

Примечание переводчика: Файлы примеров вы можете скачать на сайте журнала http://www.blenderart.org/issues/ В файле примера “CaterpillarSoftTrack.blend” вы можете найти объекты описанные в главах с 1 по 11, танк загруженный с http://dmi.chez-alice.fr и большое количество камер, зафиксированых в каждом важном узле гусеницы. Некоторые объекты к сожалению все еще названы по французски.

В файле примера “TrackLinkApproximation.blend” описаны два метода упоминаемые прямо перед восьмой главой,позволяющие привязать звенья к Пути и заставить двигаться по нему. Есть идеи, как сделать это по-другому?

В файле примера “LimitePathPyDriver.blend” находятся результаты тестов с IPO Скорость и PyDriver. Можете поиграться с этими объектами.

14. Благодарности

Отдельное спасибо BlenderClan, Meltingman (мой духовный учитель), Traven (человек, который знает все, что я игнорирую) Zeauro (У меня есть вопросы, у него есть ответы), и моей милой Coralie, которая спала и смотрела телевизор в одиночестве в течение двух недель в течение которых я писал это. А также БОЛЬШОЕ СПАСИБО всем людям, которые заставляют Blender расти.

Личные инструменты