
Когда ты дизайн-директор и берёшься за новый проект, связанный с нейросетями и архитектурными 3D-моделями, предстает много интересных задач. В таких случаях ты…
Статья была полезной?

Когда ты дизайн-директор и берёшься за новый проект, связанный с нейросетями и архитектурными 3D-моделями, предстает много интересных задач. В таких случаях ты рискуешь столкнуться с разными неожиданностями, например, с неподходящими моделями зданий и техническими ошибками.
Привет! Меня зовут Алексей Нибо, я дизайн-директор в Атвинте. В этой статье я расскажу о процессе создания интерактивных 3D-моделей для веб-сайта архитектурного бюро.
Обычно страницы архитектурных агентств выглядят схоже — строго, красиво, но быстро забываются. Мой подход заключается в том, что хороший сайт можно описать коротким предложением таким образом, чтобы любой мог понять, о каком бренде идет речь. Это и есть то, что делает ресурс уникальным.
Наш заказчик хотел создать интерактивную 3D-сцену на главном экране. Он показывал референсы и делился идеями о лазерном сканировании зданий с помощью лидара. В ходе обсуждения мы искали центральный элемент для сцены.
Мы рассматривали различные метафоры — от музыкальных инструментов до скульптур, поскольку архитектура воспринимается через пропорции и золотое сечение. Но в итоге заказчики обычно выбирают наиболее прямолинейные метафоры, и в нашем случае центральным элементом стала модель здания.
Хотя объект виглядел красиво, он выглядел и статично. Я хотел добавить контрастный элемент — что-то живое и небольшое на фоне крупной архитектуры, но не мог придумать, что именно. В итоге один из дизайнеров предложил использовать птицу. Позже клиент признался, что именно эта метафора наиболее его привлекла.

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

Мы остановились на башне в стиле триумф (сталинский ампир), так как у неё была простая ось симметрии, что делало её привлекательной при вращении.

Архитектурные модели предназначены для инженерных нужд, требующих высокой точности в размерах. Тем не менее, подобная 3D-модель состоит из полигонов — треугольников, координаты вершин которых записываются в файл. Чем больше полигонов, тем больше весит документ. Наша модель имела 402 383 полигона, и при включении сетки видно, насколько плотная её геометрия. Рендер в изображение в Blender требовал существенно больше времени, как и последующая оптимизация модели.

Я сначала подумал об автоматической оптимизации, однако хотел сам контролировать новую модель, чтобы в будущем иметь возможность вносить изменения. Я начал перестраивать башню вручную, использовав в Blender привязку к существующим точкам оригинала, и по ним создал новую геометрию. Для этого я создал параллелепипед, который автоматически подключался к ближайшей вершине оригинала, затем растянул ширину и привязался к следующей точке, по сути, обводя исходный объект.
На процесс пересборки ушло полтора-два часа, в результате полученная модель имела всего 17 693 полигона. Большая часть из них — это гербы и звезды на фасаде, тогда как основная геометрия здания была довольно простой. Разницу можно хорошо увидеть, если сравнить сетки.

Оригинальная башня имела нессимметричную форму, где-то выступала лестница, а с одной стороны объём был больше. Я создал симметричную геометрию, чтобы здание вращалось равномерно. Я собрал одну четверть и зеркально отобразил её, что позволило сократить объем работы вчетверо.
Готовую модель я загрузил в Spline и настроил эффект облака точек, подбирая цвет, плотность и размер.

Когда я оценивал время на создание птицы, мне казалось, что нейросеть выполнит основные задачи — сгенерирует и анимирует модель. Я рассчитывал на 20 часов: минимум 2 часа, если нейросеть справится самостоятельно, и максимум 20 часов, если придётся работать вручную. Оказалось, что адекватно анимировать нейросеть может только людей и собак. В итоге пришлось делать все самим: в сервисе Tripo я получил модель по текстовому запросу и затем работал с ней.
городская птица с расправленными крыльями
Я не требовал именно голубя, учитывая возможные предрассудки архитекторов: голуби и чистые фасады — вещи несовместимые. Однако нейросеть сама выбрала именно этого птицу.
Полученная модель была узнаваема, но имела значительные недостатки, например, огромный нарост на носу и переломанные ноги, а также была слишком детализирована — около полутора миллионов полигонов, что в три раза больше, чем у нашего здания. Это произошло из-за того, что нейросеть прорисовывала каждое перо.

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

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

Я привязал геометрию птицы к костям: показал Blender, где расположена модель и её скелет — это позволило модели двигаться вместе с костями.
После этого я начал крутить и поворачивать кости, и привязанная к ним геометрия двигалась в связке с ними. Все элементы были взаимосвязанны: поворачивал основную кость — и привязанная к ней реагировала автоматически. Скелет, как и здание, был симметричным, поэтому я создавал только половину, а затем зеркально отражал.
Я установил движения и полет, но вопрос оставался: как именно птица приземляется? Она ведь не просто летит, уменьшая высоту и садится. Я провел несколько часов, изучая видео с голубями в замедленной съемке, наблюдая, как они приземляются на руку или садятся на карниз. Замедленная съемка облегчала понимание каждого движения. Я делал это раньше, когда на одном проекте мне нужно было создать анимацию для бегущей собаки — тогда мне также помогали видео с собаками на беговой дорожке.

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

Я просто уменьшил масштаб крыла. В движение кажется, что оно складывается, а затем резко сжимается и прячется в теле.
Как только основная анимация была завершена, я занялся разработкой специфических движений для остальных костей. Хвост двигался вверх-вниз благодаря соединению костей, а голова вращалась из стороны в сторону.
Также я решил добавить анимацию, когда птица почесывается: она поднимала крыло и шевелила головой. Я просмотрел множество видео о голубях и пытался перенести в анимацию обобщенные представления о птицах. Анимация вышла неидеальной, но благодаря множеству различных действий, объект выглядел живым.
Анимация воспринимается гораздо лучше, когда в ней присутствует дополнительное действие — Secondary Action. Например, бегущий мальчик с воздушным шариком выглядит более живым, чем тот, который бежит без него, поскольку второй элемент создает дополнительное движение в кадре.
С птицей я работал аналогично: перед взлётом она присела, чтобы оттолкнуться, при этом складывало крыло и дергался хвост. Когда множество мелких движений объединяются, это создает убедительное ощущение.
В процессе работы мы решили добавить птицу на разные участки сайта — к примеру, посадить её на логотип. Я взял кусок дизайна, загрузил его в Blender и произвел примерку посадки. На некоторых экранах мы специально дорисовывали линии, чтобы птице было куда приземлиться.

Тяжелая анимация на весь экран не подошла, поэтому для каждого появления птицы я создал три коротких ролика: когда птица прилетает, садится и улетает.
Каждое видео я отрисовывал в маленьком квадрате, а фронтенд-разработчик перемещал этот квадрат по странице. Это позволило создать эффект, что птица появляется из-за края экрана, садится, сидит какое-то время и затем улетает.
Я перенёс всю анимацию из Blender в Spline, где уже находилось здание из облака точек. Я загрузил птицу и подобрал ей полосатую стилизацию, чтобы она гармонировала с общей сценой. Сначала результаты были не очень удачными из-за неправильной настройки каждого элемента: когда крылы складывались, линии ломались, и это создавало хаос. Я решил сделать птицу полностью полосатой.

В Blender я создал только движение птицы, а траекторию её полёта вокруг башни выстраивал в Spline, чтобы привязать объект к конкретной точке на шпиле. Я нарисовал круг и запустил птицу по этому пути. Затем, решив дополнить анимацию, начал варьировать сам круг. Это привело к более естественному полету.
С вращением здания мы разобрались не сразу. В Spline камера реагировала на курсор, но угол поворота нигде не устанавливался. На предыдущем проекте мы сделали поворот на 10-15 градусов, предполагая, что это максимум. Однако здесь я начал экспериментировать с камерой, и со временем понял, что, расположив её подальше и ровно по центру, угол поворота увеличивается. Это оказалось случайным открытием. Первоначально я думал, что задняя часть здания не будет видна, поэтому удалил её. Но когда мы научились вращать на больший угол, то вернул геометрию обратно.
Чтобы анимация была более лёгкой, в Blender я установил 24 кадра в секунду, что является минимальным для плавности движения. Однако Spline не имел фиксированного FPS: на мощных компьютерах кадров было больше, а на более слабых — меньше. Птица на разных устройствах махала крыльями с различной скоростью...
скоростью.
Пролёт вокруг здания был задан в секундах, а взмахи крыла Spline считал в кадрах. Из-за этого раз за цикл анимация сбрасывалась: крыло было наверху, а потом резко оказывалось внизу. До конца мы эту проблему так и не решили, но смогли минимизировать: в момент сброса птица поднималась вверх и уходила за край экрана.
Инструменты, которые я использовал:
Blender — для моделирования здания и птицы, построения скелета и выполнения всей анимации от взмахов до микродвижений.
Tripo — для генерации исходной модели птицы из текстового запроса, которую потом перерисовывал вручную.
After Effects — для создания плоской анимации видеороликов на сайт.
Spline — для создания интерактивного 3D на главном экране: облако точек, вращение здания и полёт птицы.
До этого в Blender я моделировал только hard surface объекты: здания, станки и оборудование. А вот модель птицы делал впервые. Со Spline мы уже набили шишек и понимали, как с ним работать. Новой для меня была скелетная анимация, но я понимал принцип, и задача оказалась достаточно простой, чтобы разобраться в процессе. В этом и кайф — когда есть база, браться за новое не так страшно. Нужны только время и, конечно же, голуби в слоумо.
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…