Making of Ocean View
Привет всем читателям, Меня зовут Кирилл Гилязов, он же KirilloTRON. Я работаю 3d-визуализатором, в основном, специализируясь на экстерьерах и окружении и опишу то, как я создавал свою фан-работу по отелю Ocean View.
Сразу хочу оговориться, что рассказ, в первую очередь, пойдет о технической стороне и решении проблем, которые возникали у меня в процесс работы, поскольку ту же информацию об обработке рендеров можно и так найти в сети в огромном количестве, а вот что происходит под капотом при создании тех или иных сцен лично мне всегда было интереснее.
Все началось с того, что летом у меня образовался период свободный от работы, называемый отпуском, а поскольку лето вышло холодное я решил потратить это время на личный проект, до которых обычно всегда не доходят руки.
Поскольку проект предполагался для портфолио, нужно было сделать что-то такое, что будет схоже с тем, что я делаю в обычное время, но при этом давал возможность и поэкспериментировать с новыми вещами, и сделать то, что обычно не идет в работу. По моим прикидкам у меня было около месяца-полутора на все, от моделирования, до финальных рендеров.
Смотря на погоду за окном, мне вспомнились тропические ливни, которые я застал в 2005 году, во Флориде, во время урагана Катрина, а еще GTA Vice City, действие которой происходило примерно в тех же местах, и начинающуюся с объявления штормового предупреждения.
Практически сразу появилась мысль постараться передать две атмосферы, а именно неоновый, ночной, тропический дух игры и того ощущения мощного ливня, который может идти несколько суток не прекращаясь.
Ключевым местом я решил выбрать отель Ocean View, поскольку это одно из знаковых мест в игре, которое видит каждый игрок в самом начале, к тому же, он находится в интересном месте на береговой линии, а самое главное — он имеет реальный прототип отель Clevelander, на основе которого можно было строить сцену.
Для очень спешащих - вот небольшая нарезка основных этапов работы:
Этап первый. Подготовка.
Как и в моих рабочих проектах, для начала необходимо было определиться с референсами. Для этих целей отлично подходит программа PureRef, однако, забегая вперед, при работе с ней именно над этим проектом я столкнулся с проблемой. В какой-то момент количество изображений, загруженных в нее, стало достаточно большим, а поскольку многие из них были в большом разрешении, открытая программа начала прилично подгружать память и затормаживать систему.
Главная польза такой доски — возможность сразу представить ракурсы и настроение, подсмотреть визуальные приемы, а также настройки камеры, для последующего использования в своей сцене.
Основными референсами послужили скриншоты из Vice City и виды из панорам Гугл, с места расположения отеля. Впоследствии я докидывал понравившиеся референсы с деталями, настроением и ракурсами и все это стало выглядеть как-то так.
В самой игре я заскриншотил основной фасад отеля с разных сторон, некоторые малые архитектурные формы, такие как лавочки, и кадки с растениями, а также фронтальный вид всего здания, как основу для габаритов будущей модели.
После этого я стал искать фотографии реального отеля. Перед началом работ было важно понять, что именно авторы игры взяли от него, а что додумали сами, поскольку изначально я хотел максимально точно придерживаться игровой версии здания в габаритах, но при этом сделать его более реалистичным, добавив детализации, элементов и т.д. В этом мне помогли фотостоки, вышеупомянутые панорамы гугла, а также отзывы с различных сервисов оценки отелей, систем бронирования и видео с Youtube.
Этап второй. Модули.
Собрав референсы, я приступил к моделированию. Никаких чертежей с которых можно было бы поднять стены у меня не было, но так как большинство зданий имеют повторяющиеся элементы, я решил создать модули, из которых потом можно будет собирать все здание как конструктор, копируя модули в режиме Instance, оставляя возможность быстро менять геометрию всех элементов разом.
Первые тесты с попыткой прикинуть общие габариты игрового здания закончились неудачно, поскольку многие вещи в игре гипертрофированы в угоду тем или иным решениям, однако фронтальный вид из игры помог мне увидеть, что игровой фасад представляет собой растянутую по ширине версию оригинала, поэтому ключевые вещи в оформлении можно было брать с фотографии реального отеля Кливлендер.
В первую очередь, с помощью Perspective Match, я выставляю оси по одной из фотографий и создаю габаритную коробку постройки, либо детали.
Для этого метода необходимо знать размеры какого-то объекта с фотографии, к которому можно привязаться для дальнейшего построения, и самое удобное в моем случае — узнать размер оконных проемов.
Поскольку в США используется система безумных исчислений, пришлось найти типовые размеры окон в дюймах, приблизительно свериться с теми видами что были в таблице и на фотографиях, и перевести все это дело в сантиметры, для дальнейшего удобства.
Теперь я мог моделировать остальные элементы модулей привязываясь к известному размеру окна. Таким образом я смоделировал выступающие карнизы и секции стены, в которых все это расположено, а также небольшие балкончики, которых нет в реальном отеле, но что-то похожее на них есть в игровой версии.
Фасад отеля заканчивается ступенчатым оформлением в стиле ар-деко, состоящим из множества характерных выступов.
Для лучшего понятия объема мне несколько раз пришлось сверяться с трехмерной моделью отеля, которую я скачал с сайта 3d Warehouse. Это отличное место для поиска множества моделей, как для референсов, так и для полноценного использования, которые пользователи SketchUp загружают туда.
Вероятнее всего, автор модели тоже делал многие вещи на глаз и по фотографии, поэтому выступающие элементы были несимметричны, и, хотя я и брал размеры выступов с его модели, позже приходилось подгонять их более точно под габариты моего здания.
После того как верхняя часть фасада была закончена стало видно, что габаритно здание выглядит выше, чем игровая версия. Для сохранения пропорций я уменьшил весь верхний архитектурный элемент по высоте, примерно вполовину.
Пришла очередь заняться боковым фасадом. В реальном отеле он продолжается гораздо дальше, чем в игровом, да еще и имеет дополнительное крыло, поэтому повторять все это было, во-первых, слишком сложно, а во-вторых, терялся характерный внешний вид игровой версии. Но, поскольку игровая версия сбоку представляла собой практически полностью глухую стену, необходимо было придумать вместо нее что-то более интересное.
Сперва я хотел попробовать использовать уже готовые модули, но здание стало бы выглядеть слишком скучно и однообразно, поэтому я сделал дополнительные модули, уже с другими окнами, основываясь на их форме и размерах, взятых с бокового фасада реального здания.
С помощью этих же модулей собрал заднюю часть фасада, примерно прикидывая расположение возможных комнат, основываясь на видах с панорам.
Поглядывая на панорамы, я решил, что входная часть нового пристроя выглядит достаточно интересно, да и в целом подходит по габаритам, чтобы добавить ее как некую «обновленную» часть бокового фасада, правда для баланса пришлось отзеркалить её, иначе она бы залезала на «каноничную» часть главного фасада. Внутренней логикой я объяснил это так — «Раз уж настоящий отель к нашему времени успел перестроиться, то почему игровой не мог это сделать.»
Наметив основные элементы здания, я решил выбрать, какие части теперь придется детализировать, а для этого нужно было выбрать ракурсы.
Я сразу рассчитывал, что сделаю не меньше трех основных, и, возможно, еще несколько клоуз-апов. После того как у здания появился такой интересный боковой фасад очевидно нужно было отдать один из ракурсов на него. Остальные я решил потратить на главный, поскольку все же именно он является самым известным.
В это же время сделал быстрые тесты освещения, чтоб прикинуть, как вообще оно выглядит и какой теневой рисунок дает. После чего стало очевидно, что здание получается каким-то неказистым в пропорциях и хоть и построено в реальных размерах и состоит из того же числа элементов что и игровая версия, теперь не похоже габаритно на игровую модель.
Для решения этой проблемы я поступил так же, как и разработчики из Рокстар поступили с реальным отелем. Раздвинул его, добавив еще ряд окон по краям и сразу же отель стал выглядеть гораздо лучше.
Этап третий. Детали.
Примерно представив, что именно будет видно у меня в камеры, я начал детальнее прорабатывать первый этаж. Выяснилось, что игровой внутренний вид окон первого этажа отличается от внешнего, поэтому проще, да и визуально интереснее, было повторить реальный аналог, с его набором стеклоблоков по низу, и крупными окнами, которые добавляли ар-декошного стиля. По этой же причине я взял оформление входной группы из мраморных элементов с реального отеля, а не игрового.
Внутри настоящего отеля зона ресепшена находится рядом с лестницей. В игровой версии лестница находилась в противоположной стороне от входа, но поскольку я создавал все же более приближенную к жизни версию, лестничные пролеты я пустил так же, как в референсе, возле ресепшена.
Зачем вообще это было нужно, ведь такие вещи могут быть не видны на рендере, или малозаметны? В первую очередь они позволяют продумать логику размещения оконных проемов и комнат, ведь работа ведется без чертежей. Каким бы здание ни было придуманным, его архитектура должна быть логичной. Поэтому лестница помогла мне нарезать помещения внутри отеля, понять где я хочу разместить выходы на крышу и установить шахту лифтов.
Переключился на вывеску. Неоновые трубки делал сплайнами, сверяясь с референсом и продумывая как сделать разбивку для тех букв, для которых не было аналога в оригинальной вывеске.
После приступил к ограждению первого этажа. Для понимания масштаба закинул в сцену первый попавшийся стул, стол и готовую балясину из каталога. После, сверяясь с референсом и учитывая масштабность, уже смоделировал свою собственную балясину. Форма у нее очень простая, поэтому я сделал только ¼ формы, а затем дважды использовал Symmetry и просто почистил сетку.
Ограждение веранды состоит из повторяющегося набора элементов, двух балясин и сплошного блока, поэтому я объединил их в один объект, для того чтобы потом размножить его по сплайну.
Я не использовал скаттеры или RailClone для этих целей, ограничившись встроенным инструментом 3ds Max — Array. Тот же сплайн использовался для горизонтальной перилы по всей длине, достаточно было просто скопировать его и с помощью модификатора Sweep накинуть форму нарисованного сплайна перилы.
Этап четвертый. Окружение.
Основная детализация здания подходила к концу, поэтому я решил переключиться на окружение и стал заменять болванки на модели домов. В этом мне очень сильно помог набор Evermotion с тематическими зданиями, однако мне все равно пришлось их модифицировать. Удалять те или иные вещи, добавлять, масштабировать и тому подобное. Также, для первоначальных настроек ракурсов, я взял оттуда элементы дороги с тротуарами, но уже тогда понимал, что они не подойдут для финальных рендеров, поэтому они служили всего лишь ориентирами для последующего моделирования.
У реального отеля, если смотреть на фотографии, всегда припарковано очень большое количество автомобилей со всех сторон, да и движение там достаточно оживленное. Для моих целей это не годилось, поэтому, настраивая ракурс с боковым фасадом, я решил, что он должен быть самым спокойным из всех. Сама улица с двух сторон зажата домами, для виртуального фотографа не так много места, и оживленное движение съест много внимания, а в первую очередь мне необходимо показать здание, а не транспортные проблемы. Одна-две припаркованные машины, пустая дорога на переднем плане и, возможно, выступающие по краям части машин, показывающие, что дальше улица продолжается и там есть жизнь — этого более чем достаточно.
Поскольку в этом ракурсе я хотел показать уходящую вдаль аллею, нужно было проработать часть кадра с ней, потому что пустая стена явно не выглядит интересно. Нужно было добавить зону разгрузки, мусорные баки, трубы и все такое прочее.
Помня о логике постройки, я также сделал внутренние стены, отделяющие зону погрузки от зоны бара, решив для себя, что в отеле в этой части может располагаться и кухня.
Закончив с аллеей, решил раскидать в окнах римские шторы, которые придают виду отеля немного ретро-стиля и которые так же видно в игровой текстуре окон. Забегая вперед, я зря добавил их на этом этапе, потому что сами шторы были достаточно высокополигональные и начали нагружать сцену. Лучшим решением было бы раскидать их в момент настройки освещения и продумывания историй в кадре, поскольку я все равно не мог перевести их в прокси. Для реализма я постоянно двигал часть реек, добиваясь хаотичности в их положении и мне нужно было использовать редактируемую модель.
Возвращаясь к окружению. Необходимо было сделать участок вокруг отеля, добавить тротуары и дороги. Самый простой способ — сделать скриншот с карт гугл и обвести их в любом векторном редакторе, не забывая про масштаб и всегда придерживаясь реальных размеров. В моем случае я работал в Autocad, но на самом деле не имеет значения, где, лишь бы была возможность позже импортировать линии в 3ds max в виде сплайнов. Я обрисовывал отдельными слоями основные дороги, пешеходные дорожки и зеленую зону парка перед отелем.
После этого импортировал dwg файл с линиями в максы и получил замкнутые сплайны на разных слоях.
На тротуары я всегда накидываю модификатор Shell, чтобы сразу настроить разницу высоты между ними и дорогой, а вот на сплайн дороги и зеленой зоны я накидываю Edit Poly. Поскольку мне необходим рельеф с разными высотами, для придания реализма, так удобнее их контролировать.
Для рельефа нужно нарезать полученную форму с помощью Slice Plane несколько раз в горизонтальном и вертикальном направлении, привязываясь к ключевым точкам формы, а затем накинуть модификатор Tessellate в режиме Edge и получить плотную сетку для последующих деформаций.
Вполне может случиться, что на границах шейпа потянутся полигоны, для исправления этого можно либо накинуть сверху модификатор Relax и поиграть с его настройками, либо же в режиме Soft Selection примерно выделить участок и использовать тот же Relax во вкладке Edit Geometry.
После этого с помощью Push/Pull я помял рельеф, стараясь чтоб из ракурса, где рельеф будет виден, он не казался слишком плоским.
Сплайну дороги я всего лишь немного поправил топологию на круглых участках, для избегания артефактов шейдинга, но не стал менять геометрию, хотя изначально думал сделать небольшой уклон для отвода воды к краям.
Шейп тротуара вновь служит лишь болванкой, поскольку в данной ситуации мне было необходимо сделать плавный переход от дорожки к бордюрному камню. В Америке часто это отлитая из бетона монолитная конструкция, включающая в себя как дорожку, так и сам бордюр с ливнестоком, поэтому я нашел типовые профили этих конструкций, обрисовал их с помощью сплайна, примерно ориентируясь на ширину моей дорожки, а после назначил на сегменты сплайна различные Mat. ID.
Зачем это нужно? Все просто.
Теперь я мог провести новый направляющий сплайн по длине тротуара, накинуть на него модификатор Sweep и в качестве профиля указать мой профиль тротуара с бордюром, разбитый на разные Material ID.
Соответственно, теперь я мог назначить для тротуара один материал, для ливнестока с бордюром другой, да еще и получил возможность управлять формой тротуара как мне вздумается и чертить его в любых направлениях, не сбивая текстуры и не задумываясь о развертке.
Эдакий RailClone сбоку.
Хоть способ и удобный, но не совсем автоматизированный, потому что мне было необходимо вручную разбить сегменты на небольшие блоки, для имитации швов. Можно было конечно использовать Path Deform, но в данной ситуации мне больше нравится метод описанный выше.
Этап пятый. Материалы.
Основные элементы здания я разбил на Material IDs, и сделал Multi/Sub-Object материал из 6 материалов, в основном штукатурки разных оттенков, а также дерево и стекло для окон. Почти все материалы я взял из готового набора, идущего с Corona Renderer, впоследствии немного подкручивая их под мои нужды. Единственным усложненным материалом был базовый цвет штукатурки. Для нее я решил добавить небольшую имитацию подтеков в местах примыкания геометрии, поэтому я использовал Corona LayeredMtl, смешав в нем с помощью карты CoronaAO два материала разных оттенков.
Еще, для большей реалистичности, добавил в Bump стекла карту Noise, и установил значение Bump на 0.01, для получения легкого искривления в отражениях. Большие значения могут привести к эффекту ряби, что не подходит для оконных стекол, однако этим способом я сделал материал для стеклоблоков на первом этаже.
Поскольку я заранее распределил MatIDs по элементам, было достаточно назначить мой мультиматериал на любой из инстансов каждого элемента и очень быстро покрасить таким образом всё здание.
Точно так же с помощью материалов из библиотеки Corona я затекстурил цокольную часть с плитками (их, кстати, делали FloorGenerator-ом)
Переключимся на тротуары.
Мне хотелось, чтоб бордюрный камень не выглядел монотонно, поскольку на референсах каждый его блок немного, да отличался.
Во-первых, я использовал несколько разных текстур в CoronaMultiMap в режиме Mesh Element. Поскольку мои сплайны были разделены на равные участки, каждый участок таким образом получал свою текстуру на бордюре. Главное поменять Map Channel на 2 для возможности масштабирования текстур вне зависимости от текстуры тротуара, у которой был назначен Map Channel 1.
Во-вторых, для реализма было необходимо в некоторых участках высветлить краску и для этого я решил использовать Vertex Paint.
Подключил все текстуры с прошлых шагов в Mix для смешивания с такой же картой, но уже с её цветной версией, сделанной через Composite карту, и поставил в Mix Amount карту Vertex Color. Ну а дальше интерактивный рендер, накинутый модификатор VertexPaint и аккуратная работа с кисточкой в местах, где мне хотелось выбелить, либо наоборот выжелтить участки бордюра.
Из интересных особенностей, в тот момент я уже знал, что мне придется делать сцену с дождем, поэтому в будущем я использовал схожий способ для смешивания «мокрой» версии штукатурки фасада с сухой.
Для асфальта я уже давно использую комплексный материал, который, наверное, золотой стандарт для всех, кто занимается экстерьерами. В нем смешиваются несколько разных текстур, с разными уровнями отражения, а еще он позволяет делать моё самое любимое — создавать разметку, следы шин и воды с помощью сплайнов, в местах пересечений их с геометрией и смешивания с помощью CoronaDistanceTex. Для заинтересованных — я прикладываю его ссылкой в конце статьи.
Этап шестой. Детализация окружения под ракурс.
Этот этап, наверное, самый долгий и важный, поскольку включает в себя наполнение сцены геометрией взятой из различных мест, как с моих прошлых проектов, так и купленных под этот. Скаттеры травы, деревьев, сканов людей, расстановка мебели, светильников и электроники.
В построении сцены под ракурс есть приятная особенность, что многие вещи можно смухлевать. Например, никто не увидит, что земля резко заканчивается через пару метров от камеры, дорога уходит сквозь дома, а сами дома мало чем отличаются друг от друга. Главное — сделать правдоподобную иллюзию.
Для построения композиции я советую пользоваться бесплатным скриптом ImageCompHelper. Он позволяет выводить несколько разных видов сеток для построения кадра прямо поверх окна вьюпорта, однако, не стоит бездумно выстраивать элементы по осям, следует сперва хотя бы ознакомиться с правилами, в каких случаях используют тот или иной способ композиции кадра. На эту тему есть множество статей, как от фотографов, так и от визуализаторов. Главный совет — ставьте камеру так, как можно было бы ее поставить в жизни, и настраивайте ее параметры так же. Экспозиция, скорость затвора, высота от уровня пола — все эти вещи необходимо понимать и виртуальному фотографу.
Первым ракурсом я запланировал сделать один из двух самых сложных как технически, так и по наполнению, а именно, общий ночной вид всей улицы. Мне хотелось передать атмосферу постоянного движения, ночной жизни и жаркого лета. К тому же, после него я мог уже более выборочно работать с остальными ракурсами, зная, что 90% сцены готово и их не придется менять.
Для ночного вида было крайне важно хорошее освещение, для этого я набрал еще больше референсов ночных улиц Майами, и стал расставлять светильники.
Цветовую схему подсветки самого здания я взял из игры, но немного изменил расположение прожекторов, потому что в противном случае они светили прямо в комнаты людям. Перебрал много вариантов сочетаний цветов подсветки пальм и баланса света между террасой и внутренним светом отеля.
Многие следы от фар я сделал с помощью светящейся текстуры, накинутой на сплайны, но мне не хотелось фейковать все фары, поэтому для реализма я добавил несколько движущихся моделей автомобилей с прикрепленными к ним источниками света, а затем настроил камеру в соответствии с референсными фотографиями, для получения честного размытия в движении. К сожалению, это сильно повлияло на время рендера, поскольку рендерил я все это на одной, не самой современной, машине. Финальный ракурс рендерился около 70 часов в разрешении 4к до 3% шума.
На гифке ниже можно увидеть, как менялась композиция кадра. Я старался не слишком сильно зажимать здание, показав, что дальше улица имеет продолжение, но и не давать слишком много пустого места слева, поскольку это привело бы к дополнительной проработке окружения в этом участке сцены.
Для вида из машины я изначально решил сделать симуляцию дождя, поскольку хотел добиться реалистичных подтеков на стекле и преломления света в каплях, а также, в целом, попробовать свои силы в передаче дождливого настроения.
Для этих целей я использовал RealFlow, выбрав несколько объектов которые я хочу «облить». Кузов машины я предварительно зачистил от ненужных деталей, заодно заанимировав дворники, чтобы расчистить место от воды по центру лобового стекла.
Дождь генерировался на основе черно-белой карты, которую я предварительно нарисовал в фотошопе. Обычные точки разных размеров для того, чтобы капли при симуляции создавались также разные по форме и не выглядели как сплошной поток воды.
Остальной дождь уже дорисовывался с помощью кистей в фотошопе. Добавил бегущих от дождя людей, капли на окружении, водяной туман возле кромок деревьев, эффект изменения цвета капель перед яркими источниками света, и так далее.
Пришлось менять приборную панель авто, потому что в оригинальной модели там была очень условная текстура, а заодно, для реализма, добавил руку на руль, сфотографировав свою собственную.
Для ближнего ракурса входа, сперва я хотел использовать метод с процедурным материалом дороги, для создания мокрых следов через сплайны, но мне не очень понравилось качество. Поэтому я отрезал кусок асфальта который видно в кадре и чуть за его границами, сделал простенькую развертку, а уже по ней отдельную 16к текстуру асфальта, нарисовав на ней в фотошопе несколько зон, которые будут изображать воду и углубления.
Остались самые простые ракурсы с рассветом и дневным освещением. В основном, на них были только добавления 2D людей, небольшая цветокоррекция и замена неба.
Спасибо тем, кто дочитал эту простыню текста до конца. Если у вас есть какие-то вопросы по деталям, не стесняйтесь задавать их, потому что я, конечно, рассказал и показал куда меньше, чем хотелось бы, но иначе это слишком напоминало бы подробный пошаговый пересказ ежедневной работы на протяжении почти двух месяцев :)
Как и обещал в тексте, по ссылке ниже можно скачать пример сцены с материалами асфальта.
https://gumroad.com/l/oTbqG/ocean