Как сделать пружину в 3д макс

Обновлено: 05.07.2024

Использование функции "массив" применение булевых операций

Цель работы: Изучение основных приемов размножения объектов с помощью функции «массив»; изучение технологии создания объектов с помощью булевых операций.

Создание объекта «винт»

Рисунок 1. Винт, созданный при помощи булевых операций.

Шаг 1. Перезагрузите 3D Studio Max и начните новый файл сцены.

  • Radius (Радиус) - 30,
  • Height (Высота) – 100,
  • Height Segments (Количество сегментов по высоте) – 5,
  • Cap Segments (Количество сегментов в основании) – 1,
  • Sides (Количество сторон) – 18.
  • Radius 1 (Радиус 1) – 44,
  • Radius 2 (Радиус 2) – 24,
  • Height (Высота) – 150,
  • Height Segments (Количество сегментов по высоте) – 5,
  • Cap Segments (Количество сегментов в основании) – 1,
  • Sides (Количество сторон) – 18.
  • Выделите объект Cylinder (Цилиндр). Перейдите на вкладку Create (Создание) командной панели, выберите в категории Geometry (Геометрия) строку Compound Objects (Составные объекты) и нажмите кнопку Boolean (Булева операция).
  • Установите параметры булевой операции – вычитание.
  • Воспользуйтесь кнопкой Pick Operand В (Выбрать операнд), чтобы выбрать второй объект, который будет участвовать в операции, Tube (Трубка).

После выполнения этой операции объект примет вид, изображенный на рисунке 3.
Рисунок 3. Объект Cylinder (Цилиндр) после выполнения булевой операции вычитания.
Шаг 5. Создайте сплайн Helix (Спираль). Для этого перейдите на вкладку Create (Создание) командной панели, в категории Shapes (Формы) выберите строку Splines (Сплайны) и нажмите кнопку Helix (Спираль).

Перейдите на вкладку Modify (Изменение) командной панели и в свитке Parameters (Параметры) настроек объекта Helix (Спираль) при помощи параметра Turns (Количество витков) установите количество витков равным 10. Определите направление витков против часовой стрелки, установив переключатель в положение CCW (Против часовой стрелки). Значение параметра Height (Высота) задайте равным 75. Укажите для объекта одинаковые значения параметров Radius 1 (Радиус 1) и Radius 2 (Радиус 2) – 22. В свитке настроек Rendering (Визуализация) установите флажок Display Render Mesh (Отображать визуализируемую сетку), а также задайте параметру Thickness (Толщина) значение 8.

Выровняйте спираль относительно цилиндра по осям X и Y, а затем вручную подберите положение вдоль оси Z так, чтобы объект начинался под «шляпкой» (рис. 4). Рисунок 4. Установка объекта Helix (Спираль) под "шляпкой" первого объекта.
Шаг 6. Чтобы можно было производить операции со сплайном, его необходимо конвертировать в Editable Mesh (Редактируемая поверхность). Для этого вызовите контекстное меню в окне проекции и выполните команду Convert То –> Convert to Editable Mesh (Преобразовать –> Преобразовать в редактируемую поверхность).

  • Выделите объект Cylinder (Цилиндр).
  • Перейдите на вкладку Create (Создание) командной панели, выберите в категории Geometry (Геометрия) строку Compound Objects (Составные объекты) и нажмите кнопку Boolean (Булева операция).
  • Установите параметры булевой операции – вычитание.
  • Воспользуйтесь кнопкой Pick Operand В (Выбрать операнд), чтобы выбрать второй объект, который будет участвовать в операции.
  • Length (Длина) равным 15,
  • Width (Ширина) – 80,
  • Height (Высота) – 30.

Теперь при помощи булевой операции вычитания удалите из первого объекта второй так, как это описано выше. В результате на винте появится шлиц (рис. 7). Рисунок 6. Установка параллелепипеда для операции вычитания.
Рисунок 7. Готовый болт.

Вполне логичный вопрос. Тем более что в 3dsMAX'е имеются уже для этих целей соответствующий объект, который так и называется Spring (англ. - пружина). Создать ее можно из меню Create > Dynamic s > Spring или выбрав на командной панели (Command Panel) закладку Create > кнопка Geometry > в выпадающем списке Dynamics Objects > Spring.

Этот стандартный объект имеет немало параметров, отвечающих за форму (длинна, ширина, количество витков, сечение) и за метод построения концов пружины (End Point Method). Все это благополучно анимируется, а при выборе End Point Method > Bound to Object Pivots концы пружины можно привязать к конкретным объектам в сцене, тогда анимировать придется только эти объекты (если они еще не были заанимированы), а пружина уже будет самостоятельно изменять свою длину и местоположение в сцене.

Но если пружина необходима абсолютно другого сечения, чем те, которыми располагает стандартный объект: круглое, прямоугольное и D-образное? Или уже есть готовая модель пружины со своим набором материалов, текстур, текстурных координат? Или же пружину эту надо отэкспортить вместе с анимациями в какой-либо движок (Engine), а он совсем не знает о существовании такого замечательного объекта как Spring, и понимает только Skin-анимацию? Короче говоря, существуют такие ситуации, когда вопрос «Зачем это надо?» не возникает.

2. Устройство пружины

В более общем случае пружину можно разделить на три части:

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

3. Анимация деформируемой части

Для начала будет удобно скрыть недеформируемые части пружины(перейти в режим редактирования полигонов, выделить соответствующие недеформированным частям и скрыть Edit Geometry > Hide Selected):

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

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

  • они должны быть параллельны пружине;
  • первая кость должна начинаться строго в нижней части сечения первого(нижнего) витка и заканчиваться в нижней части последнего витка;
  • вторая кость должна начинаться строго в верхней части сечения первого витка и заканчиваться в верхней части последнего витка.

Войти в режим создания костей можно из меню Create > Systems > Bones IK Chain или из командной панели(Command Panel) закладка Create > кнопка Systems > в выпадающем списке Standard > Bones:

При создании костей необходимо использовать привязки для правильного расположения. Создание первой кости:

Для удобства кости можно отодвинуть от оси пружины, чтоб они не находили друг на друга; завершающие косточки – удалить(в них нет необходимости):

Первая кость будет называться bone_down, вторая – bone_ up. Модификатор Skin назначается на саму пружину, в его параметры(Parameters) добавить созданные кости Bones > Add:

Дальше необходимо настроить коэффициенты влияния костей на вершины сетки пружины по следующим правилам:

  • на точки, расположенные в нижней части любого сечения пружины, будет влиять только первая кость bone_down;
  • на точки, расположенные в верхней части любого сечения пружины, будет влиять только вторая кость bone_up;
  • на промежуточные точки коэффициент влияния первой кости bone_down будет равен отношению удаленности точки от верхнегокрая сечения к толщине сечения, второй кости bone_up – отношению удаленности точки от нижнего края сечения к толщине.

Для данного примера:

  • толщина сечения равна 5;
  • желтые точки расположены в нижней части сечения: коэффициенты влияния bone_down = 1.0, bone_up = 0.0;
  • красные точки расположены в верхней части сечения: bone_down = 0.0, bone_up = 1.0;
  • синие точки удалены от нижнего края сечения на 1, от верхнего – на 4: bone_down = 1/5 = 0.2, bone_up = 4/5 = 0.8;
  • зеленые точки удалены от нижнего края на 4, от верхнего – на 1: bone_down = 4/5 = 0.8, bone_up = 1/5 = 0.8.

Для назначения коэффициентов влияния костей на вершины в свитке параметров модификатора Skin нажать кнопку Edit Envelopes, в группе Select напротив Vertices поставить галочку и в группе Weight Properties нажать кнопку Weight Tool (на кнопке нарисован гаечный ключ), после чего появиться дополнительное окно с одноименным названием:

Для удобства можно выделить все вершины и сбросить коэффициент влияния первой кости bone_ down в ноль. Коэффициенты влияния на вершины назначать лучше сразу на цепочки вершин, расположенных вдоль витков: выделить две соседние вершины и нажать кнопку Loop, выбрать кость в параметрах модификатора, затем нажать кнопку на которой изображен требуемый коэффициент(0, .1, .25, .5, .75, .9, 1) либо рядом с кнопкой Set Weight ввести требуемую величину и нажать ее:

После всех этих манипуляций должно получиться следующее:

Теперь если выделить кости bone_up и bone_down, войти в режим масштабирования, выбрать в качестве центра точки привязки объектов, то при масштабировании костей вдоль оси пружины сама пружина будет корректно сжиматься и разжиматься, при этом толщина сечения изменяться не будет:

4. Анимация недеформируемых частей пружины.

Теперь можно сделать видимыми скрытые полигоны отвечающие, за недеформируемые части. Для этого выбрать объект пружины, перейти на уровень редактирования полигонов и нажать кнопку Edit Geometry > Unhide all:

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

Первая кость будет называться bone_start, а вторая – bone_end. В настройках иерархии вращение второй косточки должно быть заблокировано Command Panel > Hierarchy > Link Info > Locks > X, Y, Z:

Для настройки первой кости понадобиться утилита Bone Tools, которая находится в меню Animation > Bone Tools. .Кость должна иметь возможность изменять свою длину (убрать галочку с Freeze Length) и при этом сохранять неизменной свою матрицу трансформаций(Stretch > None):

Кости влияющие на деформируемую чать пружины bone_down и bone_up привязываются к кости bone_start инструментом Select and Link:

В параметры(Parameters) модификатора Skin добавляются оставшиеся кости bone_start и bone_end. Для скрытых ранее недеформируемых частей пружины назначаются соответствующие коэффициенты влияния:

  • для нижней части bone_start = 1.0, все остальные кости 0.0;
  • для верхней части bone_end = 1.0, все остальные кости 0.0.

Теперь при изменении положения корневой кости bone_start за ней перемещаются вершины нижней недеформируемой части пружины(через модификатор Skin), кости bone_down и bone_end, которые изменяют положения вершин деформируемой части, и косточка bone_end, изменяющая положения вершин верхней недеформируемой части. При изменении положения косточки bone_end,за ней меняет свою ориентацию корневая кость bone_start и соответственно вся пружина, а также изменяют свое положение относительно продольной оси пружины вершины верхней недеформированой части. Осталось связать масштабирование вдоль оси пружины костей bone_down и bone_end с перемещением косточки bone_end вдоль оси пружины.

Для начало необходимо получить зависимость коэффициента масштабирования костей деформируемой части от расстояния от косточки bone_end до начала кости bone_start:

Пояснения к рисунку:

  • L – расстояние от косточки bone_end до начала кости bone_start (для начального положения L');
  • c1, c2, c3, c4 – отступы от концов костей bone_down и bone_up до краев пружины, из-за присутствия недеформируемых частей эти величины неизменны при растяжении или сжатии пружины;
  • ld и lu – длины костей bone_down и bone_up соответственно, нетрудно заметить, что они равны между собой, поэтому в дальнейшем будут обозначаться l (для начального положения l').

Необходимо найти соотношение l/l' = s, что и является коэффициентом масштабирования костей деформируемой части. Итак:

L = c1 + lu + c2 = c3 + ld + c4, c1 + c2 + l = c3 + c4 + l, следовательно c1 + c2 = c3 + c4 = C = L' - l',

L = C + l, l = L - C, l' = L' - C,

l / l' = (L - C) / (L' - C) = (L - (L' - l')) / (L' - (L' - l')) = (L - L' + l')/(L' - L' + l') = (L - L' + l') / l' = (L - L')/l' + 1.

Таким образом s = (L - L')/l' + 1, где L' и l' известные величины (их можно получить используя Command Panel > Utilities > Measure. В данном примере получилось L' = 147, l' = 132:

Следующие действия проделываются для каждой кости bone_up и bone_down:

  • выделить кость отвечающую за деформируемую часть;
  • перейти Command Panel >Motion > Parameters > Assign Controller;
  • назначить Sceale контроллер ScaleXYZ;
  • назначить X Scale контроллер Float Expression;
  • тут в группе Create Variables создается новая векторная переменная end_pos и назначается ей контроллер $bone_end.transform.controller.Position, теперь эту переменную можно использовать в выражении Expression, куда и вписываеться полученная ранее формула (length(end_pos) - 147) / 132 + 1, где length(end_pos) и есть расстояние от косточки bone_end до начала кости bone_start, так как переменная end_pos содержит координаты косточки bone_end относительно родительской кости bone_start.

Вот вроде и все. Теперь если выделить косточку bone_end и выбрать инструмент перемещение Move и подвигать ее должно получиться так:

5. Почему это работает.

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

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

1. Зачем это надо?


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

  • они должны быть параллельны пружине;
  • первая кость должна начинаться строго в нижней части сечения первого(нижнего) витка и заканчиваться в нижней части последнего витка;
  • вторая кость должна начинаться строго в верхней части сечения первого витка и заканчиваться в верхней части последнего витка.

  • на точки, расположенные в нижней части любого сечения пружины, будет влиять только первая кость bone_down;
  • на точки, расположенные в верхней части любого сечения пружины, будет влиять только вторая кость bone_up;
  • на промежуточные точки коэффициент влияния первой кости bone_down будет равен отношению удаленности точки от верхнегокрая сечения к толщине сечения, второй кости bone_up – отношению удаленности точки от нижнего края сечения к толщине.

  • толщина сечения равна 5;
  • желтые точки расположены в нижней части сечения: коэффициенты влияния bone_down = 1.0, bone_up = 0.0;
  • красные точки расположены в верхней части сечения: bone_down = 0.0, bone_up = 1.0;
  • синие точки удалены от нижнего края сечения на 1, от верхнего – на 4: bone_down = 1/5 = 0.2, bone_up = 4/5 = 0.8;
  • зеленые точки удалены от нижнего края на 4, от верхнего – на 1: bone_down = 4/5 = 0.8, bone_up = 1/5 = 0.8.

Основная идея заключается в правильном расположении костей, отвечающих за деформируемую часть пружины: они смещены друг относительно друга на величину толщины сечения. Именно поэтому при одновременном масштабировании относительно своих точек привязки этих костей расстояния между врхними и нижними точками сечения пружины остаеться неизменным и равным смещению.
Конечно справедливости ради стоит добавить что при растяжении или сжатии пружины сечения должны не только перемещаться вдоль оси, а еще и "закручиваться". Но при небольших изменениях длинны пружины это в глаза не кидается, да и для не очень больших нужно присматриваться, чтоб заметить несоответствие с реальной жизнью. Но и это тоже можно решить, разместив косточки, отвечающие за деформируемую часть пружины, строго по оси пружины и повесив на них еще один контроллер, который будет их вращать вокруг оси пружины и изменять смещение относительно друг друга. Формулы там конечно будут пострашнее и оставляются для настоящих фанатов сделать все как в реальности. Целью было показать основной принцип костевой анимации пружин и вроде она была достигнута.
Файл сцены для 3ds MAX 2010.]

Может у кого-то есть идеи, каким способом можно сделать подобную модель?

Чтобы бечёвка обвивала каркас.


Эти предметы строго настрого запрещены в современных интерьерах.

А сама спираль делается примитивом Spline - Spiral. Чтоб сжать её по краям вариантов полно - Scale, FFD и тэ дэ.

Как сделать это "руками" понятно. Хотелось какого-то автоматического / полуавтоматического решения.

Фото всего лишь в качестве примера. Существует огромное количество приемлемых кошачьих домиков и когтедралок.

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


В данном случае получаются кольца а не спираль. А если ещё и геометрия более сложная.

Если не будет анимации кругового облёта объекта с расстояния в 10 см, то можно пренебречь тем, что это кольца. Можно даже пренебречь геометрией и сделать всё текстурой.

В идеале, если делаете интерьер, надо полностью пренебречь кошачьим домиком, поверьте )))

Будет клоузап и ракурсы с разных сторон, поэтому необходима была именно спираль.

Позволю с вами не согласиться. Домик домику рознь.


Как и написал Yehat, спиралью: 1. Создаете сплайны основы (например этого кактуса). 2. Создаете спираль и задаете ей нужные параметры. 3. Накидываете на спираль Path Deform, указываю путь к каждой части сплайна "основы". Но на углах все равно надо будет поправлять геометрию ручками.


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

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

Отписаться от уведомлений вы всегда сможете в профиле автора.

Захотел напечатать небольшую пружинку на 3D-принтере, и для начала решил поискать в Интернете способы печати подобных вещей. Сразу отмечу, что я не будут рассматривать практичность или применимость напечатанных пружин. В данной статье я опишу несколько способов 3D-печати пружин, которые я опробовал. Возможно, это кому-то окажется полезным. Видео по данной теме:

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

Для исследований была создана модель пружинки, с размерами, показанными на рисунке:

Как напечатать пружину? Часть 1

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

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

Как напечатать пружину? Часть 1

При удалении поддержек с напечатанных пружин всплывает основной недостаток этого способа – на таких маленьких и тонких деталях их удалять очень сложно. Из-за небольших размеров пружине не хватает жесткости – она сильно гнется при удалении поддержек. Если для варианта вертикальной ориентации пружины поддержки кое-как удалить удалось, то для горизонтально варианта я не смог удалить их, не сломав саму пружину. В итоге результат так себе:

Как напечатать пружину? Часть 1

Второй способ: пробуем напечатать вообще без поддержек на медленной скорости. Я установил скорость печати 20 мм/с. Пружина расположена вертикально. Вот что получилось:

Ну, в принципе пружина получилась. Она хорошо сжимается и растягивается, но внешний вид не очень. Поддержки удалять не нужно, но постобработка необходима, если вам критичен внешний вид.

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

Как напечатать пружину? Часть 1

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

Второй вариант этого способа я подсмотрел в этом ролике:

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

Как напечатать пружину? Часть 1

Свою пружину я попробовал напечатать этим способом с величинами зазоров 0,1 мм, 0,2 мм и 0,3 мм. С зазором 0,1 мм поддержки сплавлялись с пружиной примерно также как и без зазора. Поэтому далее я рассматривал только две величины зазора – 0,2 мм и 0,3 мм:

Как напечатать пружину? Часть 1

При величине зазора 0,3 мм поддержки удалялись очень хорошо (процесс удаления поддержек можно посмотреть на самом первом видео в статье). Я их отделял пинцетом с небольшим усилием. При зазоре 0,2 мм поддержки удалялись сложнее. Качество детали в обоих случаях получилось одинаковым:

Как напечатать пружину? Часть 1

В качестве третьего варианта решил объединить первые два – сделать тонкую поддержку в один проход сопла с зазором. Сделал модели с зазорами 0,2 мм и 0,3 мм. Распечатал:

Как напечатать пружину? Часть 1

Аналогично предыдущему варианту тонкая поддержка с зазором 0,3 мм удалялась легче, чем с зазором 0,2 мм. По качеству пружины напечатанные с разным зазором не отличаются. Особенно меня удивило то, что пружины внешне не отличаются и от тех, которые печатались во втором варианте, где поддержка была на всю ширину витков.

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

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

Как напечатать пружину? Часть 1

Этот способ я увидел тут:

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

В заключении напечатаем пружину с круглым поперечным сечением – это соответствует внешнему виду традиционных витых пружин. Габариты пружины такие же. Пружину печатал слоем 0,1 мм с поддержками в один проход сопла с зазором 0,3 мм. Результат печати:

Как напечатать пружину? Часть 1

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

Читайте также: