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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

У меня все :)

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

4949
4 комментария

Между верхних катков траки чуть провисать должны.

3
Ответить

Гайд по исправлению проблемы с деформацией индивидуальных секций гусеницы

Ответить

Спасибо, довольно полезная тема, а с гео-нодами не пробовал делать?

1
Ответить

Цветы лучше сделай. Танкист

1
Ответить