Коллеги,
Около месяца назад мы пообщались с Ronen Bekerman - c человеком, сделавшим очень много для развития визуализации в целом и обмена знаниями в этой области. Результатом этого общения стала статья в его блоге - Making of Rumyantsevo Park , переводом которой мы бы и хотели поделится.
С уважением,
Команда Biganto Visual
1. Вступление
Перед тем как мы начнем, позвольте мне выразить благодарность Ронену за его блог и возможность стать его частью. Его ресурс это большой источник вдохновения для нас, приятно поделиться частью нашего опыта здесь.
Наш опыт - это опыт создания виртуальных туров и сопутствующих услуг для заказчиков, которым нужно что то более интерактивное чем статичные изображения. “Biganto Visual” началось с идеи и нескольких скриптов пару лет назад и сегодня мы работаем как студия визуализации и и как поставщик VR решений для архитекторов, дизайнеров и визуализаторов. Здесь мы хотели бы поделится некоторыми наработками из нашего последнего проекта - “Румянцево парк”.
2. Проект
“Румянцево” это жилой комплекс к востоку от Москвы. Это наш крупнейший проект на данный момент с более чем 1700 квартирами, внутренним двором и ландшафтным парком.
Лучшая часть проекта - каждый экстерьер и интерьер, включая квартиры, лобби, площадки этажей, все они доступны в виде 3D тура. Вы можете пройти по двору, войти в любую парадную, зайти в любую квартиру на любом этаже (в каждую из 1700!), что и рекомендую сделать по ссылке ниже. Также туры работают на современных мобильных устройствах.
3. Обзор технологии
Чтобы понять наш подход, необходимо понять технологию в его основе. Наше решение основано на наборе 360-градусных панорам отрендеренных из обычной сцены с использованием VRay или Corona render. Далее эти панорамы обрабатываются нашим движком и собираются в тур с помощью низкополигональной модели сцены.
Работа с панорамами обеспечивает качество картинки и простоту производства на уровне статичных изображений. Мы можем работать с любыми 3d сценами, включая сцены наших заказчиков, с минимальными трудозатратами не меняя обычный пайплайн визуализации. Движок в свою очередь дает нам необходимые 3d свойства тура: стерео эффект, относительную свободу перемещения, поддержку VR устройств.
Данный подход позволяет нам реализовать основные свойства полноценных realtime движков, таких как Unreal or Unity, со всеми их преимуществами, но без сопутствующих недостатков и связанных с ними затрат.
4. Производство тура
Наша технология требует наличия нескольких панорам для демонстрации пространства. Больше панорам дают большую свободу перемещения, т.е. для плавных переходов по туру мы считаем определенной минимальное количество панорам.
Чтобы сделать эти кадры мы используем анимированную камеру в сочетании с определенными маркерами - объектами, для позиционирования камеры. Маркер это выставленный вручную объект типа ”helper”, например “point”. Мы вручную насыщаем сцену такими объектами в местах где мы хотим пройти в туре и используем простой скрипт для создания анимированной камеры и записи ее координат.
Мы рендерим панорамы как в VRay так и в Corona render. Стоит упомянуть, что мы используем кубмапы, а не сферические панорамы. Кубмапы имеют несколько преимуществ: они не требуют конвертации для использования в нашем движке; они проще в постобработке; наконец, исходя из нашего опыта их рендер происходит быстрее (хотя это верно не для всех случаев).
Для обычной однокомнатной квартиры мы просчитываем 15-20 рендеров, в то же время для экстерьеров в проекте “Румянцево” мы достигли цифр в 250-350 панорам на тур. Как вы можете представить, это весьма требовательный к “железу” процесс, поэтому наличие мощных рендер ферм для нас - необходимость. Когда дело касается рендера сотен изображений, уменьшение времени рендера даже на несколько минут в конечном счете оказывает огромное влияние, так что любая оптимизация сцены окупается многократно.
Второй ключевой элемент это низкополигональная модель сцены. Есть разные техники ее подготовки, с которыми мы постоянно экспериментируем: от стандартных техник моделирования и скриптов до моделей создаваемых из фотографии с помощью лидара.
Когда подготовлены ключевые элементы тура, мы используем простой web-интерфейс чтобы загрузить их на сервер, посмотреть тур и создать дополнительные элементы (например, всплывающие подсказки, ссылки на другие туры и т.д.).
Так как наш пайплайн визуализации не слишком отличается от стандартного, я пропущу некоторые аспекты визуализации и вместо этого уделю внимание более сложным частям проекта и техническим особенностям, связанным с подготовкой тура.
5. Экстерьер – обзор
Для экстерьеров мы в основном используем Corona render, вот так построена сцена на которой мы в итоге остановились:
Любую крупную сцену требуется оптимизировать с самого старта работ, а учитывая что эта же сцена должна использоваться для рендера панорам для 3d тура, оптимизация еще важнее. Максимально возможное использование инстансных объектов, proxу и XRef-ов это необходимость. Также чрезвычайно важно придерживаться структуры слоев и четко следовать чертежам. Обнаружить что объекты разбросаны по слоям и есть проблемы с их позиционированием, это последнее, что хочется увидеть при подготовке сцены к рендеру. Мы всегда начинаем с подготовки чертежей для импорта в 3d max, и как только это сделано, начинаем формировать сцену элемент за элементом, здание за зданием.
Чтобы добавить большинство повторяющихся деталей мы использовали RailClone (дорожные знаки, столбы с освещением, разметка и т.д.). Для добавления дополнительных деревьев, машин и людей незаменим такой инструмент как ObjectPainter. Большинство высокополигональных объектов это, разумеется, прокси. Настройки света стандартные:HDRI/Corona sky + Corona sun.
6. Экстерьер - детали и материалы
Большая часть сцены выстроена достаточно стандартно, но вот несколько интересных деталей:
Окна и шторы:
Для основного здания у нас было всего шесть типов оконных рам и, как только соответствующие полигоны были отделены от фасада, распределить окна с помощью RailClone было простой задачей. Для штор и жалюзи мы использовали эти же полигоны и модификатор “MaterialByElement”. “MaterialByElement” распределяет ID материалов в случайным образом, так что мы можем использовать Multi/sub материал для создания множества шаблонов штор в Sub Material. Сами Sub materials представляют собой просто изображение штор в слоте diffuse и маску в слоте Opacity.
Материал фасада:
Другой интересный элемент - материал плитки на некоторых фасадах и эркерах. С одной сторону нам требовались просматривающиеся детали для вида “с улицы” в туре, с другой стороны плитка не должна существенно влиять на производительность. Использовать геометрию было бы неоправданно “дорого” с точки зрения количества полигонов, поэтому мы решили использовать нарисованные в Photoshop карты для достижения желаемого эффекта. Карты нарисованы и разложены по чертежам, таким образом на фасаде нет разрезанных плиток между этажами.
Неравномерный свет из окон на ночных кадрах:
Для вечерних кадров неравномерный свет в окнах это неотъемлемая часть реалистичного изображения. Есть несколько способов сделать это, но мы предпочитаем использовать CoronaMultiMap. Шаг один - распределить где необходимо CoronaLight в режиме instance. Шаг два - добавить CoronaMultiMap в слот текстуры в CoronaLight (instance mode в карте). Если необходимо выключить случайным образом часть источников освещения, достаточно просто добавить черный цвет в MultiMap.
На этом пока всё! Объем получился достаточно большой, поэтому продолжение перевода опубликуем несколько позже.