Blender: Когда гнутся секции гуслей

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

Вся суть проблемы в одном скриншоте вьюпорта — смотрим:

1-4.jpg

Не понятно? :) Я поясню.

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

*для наглядности я буду рассматривать проблему и ее решение на примере примитивной геометрии

**данное решение — одно из многих и относится, пожалуй, к созданию моделей для статики или простой анимации, не для игровых движков; для портфеля - в самый раз :)

Суть проблемы

Давайте проблему воспроизводить.

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

1-4.jpg

2. Добавляем модификатор array, создавая «полноценную» гусеницу — пока все идет хорошо.

1-4.jpg

3. Создаем кривую и придаем ей форму, по которой мы хотим пустить нашу гусеницу.

1-4.jpg

4. Добавляем на нашу гуслю модификатор curve и указываем созданную кривую в качестве маршрута, по которому гусеница должна идти (поле curve object).

1-4.jpg

5. Проблема уже видна, но для порядка давайте повернем гусеницу на 90 градусов — R → X → 90.

1-4.jpg

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

1-4.jpg

Решение

Как будем решать нашу проблему? Расскажу об одном простом варианте, который потребует минимальное количество времени при весьма адекватном результате.

1. Убираем с сегмента гусли все модификаторы - им мы найдем применение в другом месте.

1-4.jpg

2. Создаем плоскость, простую, в один полигон, как и происходит по умолчанию - из нее мы сделаем основу наших гусениц (сегмент я пока спрятал, чтоб было видно главное на данном этапе).

1-4.jpg

3. Добавляем на плоскость модификатор array — что ж за гусли из одного сегмента?

1-4.jpg

4. А теперь и модификатор curve, как мы и делали ранее (я подобрал количество сегментов, чтобы гусля замкнулась; если на стыке, при замыкании, плоскости идут внахлест и не получается сделать аккуратный зазор, размер исходной плоскости можно уменьшить/увеличить, чтобы добиться качественного результата).

1-4.jpg

5. Вращаем плоскость на 90 градусов — та же история, что была у нас в примере с гуслями из готового сегмента выше.

1-4.jpg

6. Возвращаю обратно спрятанный сегмент.

1-4.jpg

7. Для сегмента делаю плоскость, которую мы пустили по кривой, родителем (Ctrl+P → object).

1-4.jpg

8. Выделяю нашу плоскость, иду во вкладку "Настройки объекта", подменю Instancing.

1-4.jpg

9. Выбираем пункт Faces — теперь к каждой плоскости, созданной модификаторами, присваивается по сегменту наших гуслей…. правда, пока не так, как нам хотелось бы.

1-4.jpg

Давайте исправлять.

10. Убедитесь, что пивоты плоскости и сегмента гуслей находятся в одном месте.

11. Убедитесь, что углы поворота и скейлы плоскости и сегмента сброшены на 0 (apply scale/rotation); в моем случае, плоскость-то я вращал, поэтому там не все гладко.

1-4.jpg

12. Обнулил - результат на скриншоте.

1-4.jpg

13. Сейчас у меня гусеницы вывернуты наружу — достаточно выделить плоскость и повернуть на 180 градусов по оси X (ну, в моем случае, так уж я геометрию строил).

1-4.jpg

Ну, что, геометрия гуслей больше не гнется. но стыкуется как-то не очень.

1-4.jpg

14. Давайте я пока отключу для нашей плоскости instancing и модификаторы — таким образом решить проблему будет проще.

1-4.jpg

15. Сместим сегмент гусли влево, чтобы она равномерно выпирала за пределы плоскости с обеих сторон — выпирающие части как раз и нужны для "вилкообразного" стыка сегментов.

1-4.jpg

16. Вернем пивот сегмента к 3д курсору (в этом же месте у нас и пивот плоскости находится, кстати) — правый клик, кто не помнит.

1-4.jpg

17. Возвращаем модификаторы на плоскость и включаем обратно instancing по фейсам.

1-4.jpg

18. И последнее, что я бы сделал — для плоскости в разделе instancing убрал бы галки с viewport и render, чтобы плоскость не накладывалась поверх сегментов гуслей, а стала бы невидимой.

1-4.jpg

Наш финальный результат:

1-4.jpg

У меня все :)

P.S. Для анимации гуслей анимировать нужно будет плоскости, а не сегменты гусениц — сегменты за ними последуют, поверьте :)

209
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36