Всем привет! Если вы хоть изредка следите за моим ArtStation, ну или хотя бы подписаны на мой Instagram, то скорей всего видели арт под названием «Night Farm».
«Да-да, ночная ферма, вот так всё просто». И пускай идея довольно проста, эта работа значит для меня многое, ведь она содержит в себе огромный пласт вдохновения и фантазии.
Стоит сказать, что «Night Farm» был вдохновлён такими мультфильмами Pixar, как «Хороший Динозавр» (2015) и короткометражкой «Похищение» (2006). И как раз из последней и была взята основная идея.
Вкратце об истории создания
Работу над этим артом я начал 3 января (2021) и планировал закончить его примерно за неделю/полторы. Однако всё пошло несколько не по плану и финальный рендер я получил аж 28 марта. Получается, что работа растянулась почти на 3 месяца.. за той разницей, что учитывать стоит только 3/2 дня в неделю, ведь работал я над этим артом исключительно по выходным.
Но даже после получения финального рендера я ещё долго не решался передать арт в пост-продакшен, отложив ночную ферму в долгий ящик. Позже мне и вовсе пришла идея отложить его до следующей зимы.
Изначальная задумка заключалась в создании небольшой локации, напоминающей ферму с маленьким домиком у реки. «Ночь, всё залито лунным светом, и.. наверное падают густые хлопья снега» — примерно такими были мои мысли в тот момент. Однако, в последствии, уже работая над лейаутом (макетом) сцены я задумался, что: «Не плохо бы было увидеть, как эта ферма выглядит и в летнюю ночь».
В конечном счёте я всё же решил выпустить этот арт летом, дабы не тянуть кота за хвост. Тем более, что со следующими работами мои навыки скорей всего бы выросли, а несвоевременная публикация могла показаться устаревшей.
В любом случае, «Night Farm» наконец-то был опубликован!
Рабочий процесс
Сходу скажу, что «Night Farm» – одна из самых сложных моих работ, и скорей всего, всегда будет входить в десятку проектов, над которыми я конкретно запарился.
Если в цифрах, то финальная сцена, которая отправилась на рендер, содержит в себе более 5 МИЛЛИОНОВ полигонов (5 055 639 – если конкретнее).
Из них 4 991 840 полигонов – это трава.
И это самое сложное изображение, которое я выводил на данный момент. Но о рендере и всевозможных его настройках мы обязательно поговорим позже.
Каких-то существенных экспериментов в этом плайплайне (конвейере) – нет; просто потому, что изначально ничего подобного не предполагалось. Однако в ходе работы я прибегнул к некоторым интересным решениям (назовём это так) на разных этапах производства. И о них определённо стоит узнать.
О структуре проекта
Цитируя самого себя в очередной раз:
«Ночь, всё залито лунным светом, и.. наверное падают густые хлопья снега» — примерно такими были мои мысли в тот момент. Однако в последствии, уже работая над лейаутом сцены я задумался, что «не плохо бы было увидеть, как эта ферма выглядит и в летнюю ночь».
Это решение вынудило меня тщательно структурировать весь проект, особенно на этапе текстурирования и шейдинга: я тщательно разграничил все материалы и заранее позаботился о их наименованиях, что дало мне независимость от шейдинг-групп (Shading Group).
Проще говоря: я структурировал все материалы таким образом, чтобы их можно было легко заменить, не затрагивая при этом шейдинг-группы.
Подобное решение позволило бы мне поменять любые материалы (полностью заменить, а не просто изменить параметры существующего) в сцене, не отвязывая их от объектов.
Справедливости ради стоит всё же упомянуть, что сделано это было ещё и потому, что «летний» вариант сцены я хотел порендерить через RenderMan. В то время, как оригинальный «Night Farm» был отрендерен через Arnold Render.
На данный момент я не планирую начинать работу над «Летней Night Farm», однако, благодаря подобной организации – выход летнего варианта сцены вполне вероятен.
Ещё стоит отметить, что все вопросы связанные со структурой и организацией проекта необходимо было решать ещё, непосредственно, до начала работы над лейаутом (макетом) сцены. От этого могли возникнуть (и возникали) некоторые сложности на более поздних этапах, когда, в силу определённых решений, структура проекта могла претерпевать изменения.
При этом, я ещё больше усилил подход к конкретизации расположения всех объектов в Outlainer'е.
К слову, что для решения проблемы наименования большого количества однотипных объектов, требующих лишь указания цифирного или буквенного обозначения, я использовал инструмент lampRename, входящий в пакет инструментария Lamp.
Lamp – это мой собственный проприетарный инструментарий, разработанный специально для Maya. Подробнее..
Говоря о пре-продакшене.. а под пре-продакшеном я подразумеваю все мероприятия проводимые до начала работы над самой сценой, – нужно учитывать ещё и общий цветовой тон изображения. Поэтому цветовую палитру я также начал собирать ещё на начальных этапах.
Цветовое пространство
Очень многие композиционные решения я взял из кадров вышеперечисленных мультфильмов и цветовых сценариев (color-script's) к сценам в работах Pixar, поскольку хотел передать соответствующее настроение. Однако мне потребовалась собственная цветовая гамма для всевозможных объектов в сцене. И этот вопрос тоже необходимо было решить до этапа лайтинга (освещения).
За счёт стилизации, в сцене преобладают матовые поверхности с низким коэффициентом отражений (параметр – Specular), но с выкрученными микро-деталями (параметр – Roughness). Это позволило мне сохранить изначальную цветовую палитру, практически в тех значениях, которые показаны на изображении выше, поскольку изменение параметров, для того, чтобы придать физический смысл материалам, почти-что никак не затронуло изначальный фактический цвет.
Огромное значение в цветовом пространстве играло небо.
«Оно должно быть и светлым и тёмным одновременно, с небольшими переливами. Чтобы можно было взглянуть на него и увидеть множество маленьких звёзд» – примерно так я рассуждал думая о небе.
Поэтому было необходимо подобрать максимально соответствующий оттенок неба. И, пожалуй, этот цвет я получал дольше всех. При том, подбирал я его уже на этапе текстуринга и шейдинга, поскольку первоначальный вариант цвета, подобранный ещё на пост-продакшене, – совершенно не сочетался с остальным цветовым пространством сцены.
Перепробовав огромное количество оттенков, я наконец смог получить нужный. Но потом, уже на этапе освещения у меня возникли некоторые проблемы с небом, от чего цвет на финальном рендере несколько не соответствует цвету, представленному в цветовой палитре. Но об этом я расскажу несколько позже.
Так как я выложил эту информацию в Сеть, вы можете использовать данную цветовую палитру (изображение выше) в своих работах без предварительного обращения ко мне.
Моделирование, создание сцены
Моделирование является основополагающим процессом для всего проекта, ведь именно на этом этапе и воплощается бо́льшая часть всей идеи арта.
И пускай у меня уже есть выработанная схема построения этого этапа, в процессе работы у меня возникло не мало сложностей с наполнением всей сцены. Но обо всём по порядку.
Дом
Первым делом я начал моделировать дом, ведь он является главным объектом, вокруг которого строится вся остальная сцена.
Он должен быть маленьким и квадратным, но не слишком – что-то среднее между маленьким домиком в лесу и фермерским жилищем.
В итоге я остановился на решении с несколько продолговатой формой каркаса, треугольной крышей и с наличием небольшой веранды у входа. Позже, для большей детализации, я добавил ещё и дымоход. Дымоход, который, как я сейчас это понимаю, не совсем логично расположен с точки зрения интерьера.
Что касается оконных и дверного проёмов, то мне хотелось сделать их аутентичными к остальному дому, но в то же время, придать им некоторой современной эстетики.
Окна имеют поднимающиеся рамы, которые можно поднять или опустить. Мне хотелось уйти от этого классического перекрестья на окнах, присущего загородным домам.
Двери я также добавил маленькие окошки, что придало ей больше современной эстетики.
Заполнение окружения с применением MASH
Поскольку первоначальная идея предполагала наличие широкого поля с пшеницей, как в короткометражке «Похищение» (2006), мне следовало решить ряд проблем с организацией всех объектов в кадре.
В последствии я отказался от огромного пустого пространства, поскольку сцена начинала казаться неуютной.
Пшеничное поле было заменено на траву, растущую на холме, а края и заднюю часть сцены было решено заполнить хвойным лесом.
И именно этот процесс был самым ресурсоёмким в этом пайплайне.
Всё дело в количестве добавляемых объектов. С самого начала я понимал, что не буду заполнять такой объём пространства вручную и что мне придётся использовать метод процедурного заполнения.
Именно на этом этапе я впервые настолько широко использовал систему MASH.
MASH – это майская (Maya) система процедурной анимации и генерации большого количества геометрии.
У меня было несколько вариантов того, как наполнить пространство деревьями и травой. Сразу скажу, что я задействовал все способы, которые предлагал мне MASH.
В случае с лесом я прибег к обычному скаттерингу объектов по поверхности при помощи ноды Placer, которая позволяет рисовать заданной геометрией по назначенной плоскости.
В данном случае, заданной геометрией были 5 разных типов елей. Несколько меняя параметры размера, поворота и угла наклона при скаттеринге, я добился уникальности для каждого дерева (даже для тех, которые не видно). Поэтому каких-то существенных проблем с созданием леса не возникло.
За исключением одного момента.
Из-за дополнительных манипуляций с процедурной геометрией, некоторые модели начали ломаться. Появлялись разрывы в сетке и в наслоении полигонов друг на друга. От чего мне пришлось отбраковывать эту процедурную геометрию и заменять её обычными импортируемыми моделями.
В случае же с травой (та, что на холме), я использовал обычную привязку геометрии к плоскости, которую можно выполнить при помощи стандартной ноды Distribute.
Однако для заполнения травой пространства возле дома, мне требовался более гибкий метод, поскольку, при привязке геометрии к плоскости, эта геометрия заполняла всё пространство (в зависимости от количества генерируемых объектов и установленного расстояния между ними), в то время как мне нужно было заполнить лишь конкретные области. Поэтому вся трава, что вы видите на переднем плане (в плоскости дома) выполнена при помощи всё того же скаттеринга; то есть с применением ноды Placer.
И всё же, создание травы в области холма также потребовало решения ряда проблем.
Во-первых, это количество создаваемой геометрии и её расположение. Мне необходимо было нарастить плотный слой из травы по всему холму и аккуратно соединить его с чуть более редкой травой, находящейся возле дома. Но для заполнения огромного пространства требуется не меньшее количество сгенерированной геометрии. А увеличение количества геометрии в сцене влекло за собой ряд проблем с оптимизацией.
Изначально, земля, на которой располагались все объекты, была единым куском геометрии. Позже, я отделил переднюю часть, чтобы область возле дома осталась независимой. Но вся задняя часть по-прежнему была связана. И наслоение травы на такую большую плоскость приводило к огромному разбросу.
Проще говоря, даже большое количество генерируемой травы очень сильно расползалось по плоскости, делая её редкой.
А учитывая ещё параметры её расположения друг относительно друга, она и вовсе могла сбиваться в маленькие кучки с огромными пробелами между ними.
Используя выравнивание по вектору я всё же смог добиться её грамотного расположения и травинки уже не так сильно удалялись друг от друга. Но проблема с разбросом всё равно оставалась.
Как вы можете видеть на снимках выше, в обведённой области трава по-прежнему редка и её объёма не достаточно. При том, что параметр Number of Points, отвечающий за количество генерируемой геометрии, выкручен до 2 тысяч.
Идеальным решением было поделить землю ещё на несколько отдельных кусков. Разделить холм, крайнюю (та, что слева) и заднюю части леса. Это позволило бы наслоить траву исключительно в определённой области и решить проблемы с большим разбросом.
Ко всему, трава идеально подстраивалась под сетку земли на которой росла, та что для достижения нужного объёма, мне лишь оставалось выкручивать количество генерируемой геометрии травы.
«Мне нужно просто соблюсти баланс между необходимым объёмом и риском повесить свой компьютер» – мои мысли в тот момент.
Поэтому далее я лишь увеличивал количество травы, подбирая приемлемый результат.
Как вы можете видеть, при значении в 10 тысяч трава приобретает более густой вид. А за счёт ограниченной области, это значение можно сохранить в полной мере.
Однако я хочу напомнить, что 10 тысяч травинок = 4 миллиона полигонов. Поэтому вопрос оптимизации в этот момент стоял крайне остро.
Прочее наполнение сцены
Остальное наполнение сцены зависело уже тематики самого арта.
Чтобы подчеркнуть рождественское настроение, я решил воткнуть ёлку, украшенную гирляндой и стеклянными шариками. А под самой ёлкой положить несколько подарков.
Наверняка в таком месте очень уютно, поэтому было бы не плохо иногда выходить на террасу и любоваться речкой, сидя в кресле, попивая при этом горячий чай.
Так на веранде и появилось кресло. Которое, к слову, достаточно детализировано и даже содержит в себе Smooth-сглаживание.
У боковой стены вы можете наблюдать не самую аккуратную поленницу дров и лопату, стоящую рядом, очевидно, для расчистки снега.
Наполнение окружения такими вещами, в некотором роде, создаёт ощущение правдоподобия. Привычные для нас вещи, несущие в первую очередь практический смысл, оживляют изображение, ведь вы можете додумать причины и следствия сами.
Глядя на статичные картинки, не бойтесь задаваться вопросами:
«Что это? И как оно там оказалось?»
Берег у реки тоже следовало заполнить чем-либо, так как пустой кусок земли казался невзрачным, что могло оттолкнуть внимание от самой реки. Поэтому я просто решил заполнить его растениями и конечно же камушками.. какой же берег без камней.
Стоит ещё упомянуть и ограду, ведь, по сути, это единственный элемент, который напрямую отсылает к идее с фермой.
Говоря о моделировании, нужно сказать, что я всегда стараюсь уделять внимание мелочам. Проработка даже самых маленьких особенностей – это ещё один из моих принципов в реализации подобных вещей.
В качестве примера: детализация того же кресла (изображение выше) или проработка лампочки для гирлянды, висящей на крыльце дома.
Она насчитывает в себе 3840 полигонов, а скругление достигается при помощи Subdiv-сглаживания.
К слову, что гирлянда так же была выполнена с применением MASH.
Ниже вы можете увидеть наглядный пример использования MASH и процесс создания гирлянды.
В общем и целом, моделирование – именно тот этап, который проносит идею через весь рабочий процесс.
Текстурирование и шейдинг
Говоря о шейдинге, стоит вновь вспомнить о цветовом пространстве.
Было очень важно передать необходимое настроение в соответствующей стилистике. А это требовало специального подхода к описанию всех материалов в сцене.
Основная задача – соблюсти баланс между стилистическим оформлением и реализмом. Придавая физический смысл материалам необходимо учитывать сразу оба эти фактора: с одной стороны – материал стилизован, с другой стороны – он реален.
Вы можете обратить внимание на некоторые узнаваемые детали в оформлении. Такие материалы как дерево, стекло, металл и проч. – соответствуют реальным материалам, но в то же время, очень хорошо вписываются в общую стилистику сцены.
Создание и настройка материалов происходили в несколько этапов.
Сперва, нужно было определить, насколько стилизованным может быть этот материал. Если это хвойный покров елей, то в нём может преобладать стилизация. Если же это стекло в оконной раме – оно должно оставаться правдоподобным.
Помимо этого, следовало сохранить физический смысл материалов.
PBR (Physical Base Rendering) строится на некоторых принципах, которые напрямую отсылают нас к реальной жизни. Тип материала определяет поведение света при отражении и преломлении. А это, в свою очередь, определяет степень его правдоподобия.
После чего, определив тип материала, необходимо произвести соответсвующую настройку.
Допустим наш материал – дерево.
Дерево – это диэлектрик (то есть этот материал – не металл) и в нём преобладает шероховатость поверхности.
Следуя из этого определения мы можем понять, какая степень отражений и преломлений нам нужна.
В случае с отражениями, мы можем выкрутить микро-детали (параметр Roughness) в свойствах отражений (Specular) на максимум. Более выраженные микро-детали на поверхности, делают материал более матовым, за счёт того, что отражения имеют больший разброс.
В случае же с преломлением, нам нужно определить необходимое значение коэффициента преломления (IOR).
Коэффициент преломления (IOR) – определяет то, насколько свет в данной конкретной среде двигается медленнее, чем его изначальная скорость света, и он же определяет угол преломления.
Поскольку мы должны сохранить правдоподобие материала, нужно использовать реальное значение коэффициента преломления света из нашей жизни... проще говоря, нужно залезть в Google.
В данной сцене я использовал значение 2.93226 для стволов елей и 3.51271 для прочих деревянных поверхностей, включая дом и ножки кресла.
Говоря про угол преломления света, стоит сказать, что в стилизованной непрозрачной поверхности он не так важен. Поэтому значение IOR практически не меняет внешний вид материала. В то время как для какого-нибудь стекла или полупрозрачных полимеров – угол преломления играет большую роль.
Ниже показано отображение материалов стекла во Viewport'е Maya.
Поскольку отображение света по Viewport'е выключено, а рамам окон ещё не присвоены материалы, кажется, что модель стекла просто пропадает, но на самом деле – она прозрачна.
Даже в этом примере вы можете наблюдать некий баланс между стилизацией поверхности и сохранением её физического смысла, который я пытался соблюдать при создании всех материалов в сцене.
Я очень долго получал нужный материал грунта. Земля должна была быть стилизована, но точно так же отвечать вышеописанным принципам.
Забегая наперёд, скажу, что настройка материала земли определяла ещё и стилистический тон нижней части сцены.
Наконец, свет, излучаемый лампочками в гирлянде у дома и на рождественской ёлке, был создан при помощи специального материала.
Да-да, источником света в гирлянде является шейдер.
Здесь я прибег к достаточно интересному решению, которое позволило мне оптимизировать количество фактических источников света в сцене.
За основу я взял обычный aiStandartSurface, который использовал и для всех остальных типов поверхностей в сцене. Я полностью выключил его матовую составляющую – Diffuse (параметр Weight в базовых свойствах материала) и включил Emisson, при том, выкрутив его значение до 3-х.
Если значение Emission больше 2-х, а Diffus'а у материала нет, то он начинает самопроизвольно светиться. Далее остаётся только выбрать необходимый цвет, как показано ниже.
Однако данный способ не подходит, если этот источник света должен что-то освещать, поскольку, излучаемый свет находится в Indirect Diffus'е.
Indirect Diffuse – это косвенное освещение, которое не имеет прямых лучей, а потому плохо взаимодействует с остальными поверхностями.
Мне же нужно было, чтобы гирлянды излучали хороший свет, давали мягкие тени и могли отражаться в соответствующих поверхностях.
Поэтому я прибег к следующему решению: я извлёк лампочки гирлянды из MASH, дабы сохранить их расположение на проводе, продублировал и переключил параметр Arnold Translator с режима poly_mesh в режим poly_light.
В этом случае, эта геометрия (лампочки) становится полноценным источником света, но перестаёт быть геометрией, а потому не отображается. К тому же, все присвоенные ей материалы перестают иметь смысл.
Таким образом, я совместил сразу два способа, что дало очень хороший результат на выходе. Лампочки, оставшиеся в MASH светились за счёт выкрученного Emission'а, а их дубликаты, полностью повторяющие положение в гирлянде, работали как источник света, никак не конфликтуя с геометрией.
На тестовом рендере ниже вы можете наглядно увидеть, как это работает.
Все остальные источники света были выключены. А все объекты, которые вы можете увидеть, были подсвечены лишь невидимым дубликатом гирлянды в режиме poly_light. Настроенной интенсивности свечения хватило даже, чтобы свет от гирлянды попал на сугробы, находящиеся на заднем плане.
Если ещё проще: лампочки, которые вы видите – светятся сами по себе, но не освещают; а лампочки, которые находятся поверх первых лампочек – не видны, но дают полноценный свет.
Далее, уже на этапе освещения нужно было лишь сохранить материалы в утверждённом виде.
Выше вы можете видеть как из-за специфического затенения меняется оттенок цвета у столба.
Освещение
Как и в любой другой сцене, в «Night Farm» свет играл главенствующую роль.
Ранее я уже сказал, что: «Оно [небо] должно быть и светлым и тёмным одновременно», – и это касалось не только неба, но и всей сцены в принципе.
Мне необходимо было передать настроение тихой безмятежной ночи и в то же время наполнить сцену деталями. А это означало, что всё пространство должно быть залито светом.. возможно, даже, лунным светом.
И это была ещё одна непростая задача в ходе этого рабочего процесса.
Первая здравая мысль предполагала бы затенение более отдалённых участков сцены и размытое освещение объектов на переднем плане. Но этот метод привёл бы к нагромождению источников света и не решил бы проблемы с небом.
Ко всему прочему, дабы выразить атмосферу, я решил добавить лёгкий туман, который мягко стелется по всей сцене.
Туман
Для создания тумана, как и для остальных атмосферных эффектов, я использовал Atmosphere Volume от Arnold.
Как мы знаем, туман – это взвесь воды в воздухе, а следовательно, он тоже влияет на поведение света.
Помимо этого, он должен быть общей частью пейзажа, не перекрывая никакие объекты. А для этого нужно добиться соответствующей плотности дымки.
Однако основная проблема никуда не делась.
Размышляя о том, как свет должен проецироваться на сцену, я всё больше и больше подходил к идее о лунном свете. И в конечном счёте решил, что основную проекцию света нужно сделать при помощи конкретно-направленного источника.
К тому же, туману требовался именно такой источник. Источник, который будет заполнять всё необходимое пространство, подсвечивая взвесь. Глобальное освещение для этого не подходило, а другие направленные источники света ограничивали разброс.
Идеальным решением стал Spot Light от Arnold. Исходя из названия, не трудно догадаться, что этот источник света работает по принципу фонарика. А это значит, что у него можно контролировать степень размытия краёв и радиус проекции.
Я расположил его справой стороны от камеры под углом в 60 градусов и получил просто потрясающий результат.
Ниже вы можете видеть, как появляется мягкая дымка, при увеличении степени воздействия света (параметр Exposure) на поверхность.
Всего в сцене было создано около 30 различных источников света. Но задействованы из них не более 5.
Глобальное освещение
Как я уже сказал выше, сцену было необходимо сделать и светлой и тёмной одновременно. И эта задача в первую очередь ложилась на глобальное освещение.
Ко всему, многострадальное небо, а точнее, его цвет и проекция этого цвета на сцену, также должны быть выполнены при помощи глобального освещения.
В качестве источника глобального освещения я использовал aiSkyDomeLight от Arnold.
Поскольку во краю угла стояло настроение, в этот раз я отказался от использования HDR-файла заместо цвета, так как не мог найти снимок, который бы соответствовал подобранному оттенку неба.
Поэтому я сразу решил назначить этот оттенок (параметр Color) и настроить под него яркость (ползунок в параметре Color) и интенсивность света.
И вот тут начались первые существенные проблемы.
Во-первых, яркость цвета была выкручена на максимум, поскольку затемнение искажало оттенок. Поэтому все манипуляции нужно было производить только с интенсивностью свечения. А она так же проецировала данный цвет с определённой яркостью, которая тоже искажала оттенок.
Проще говоря, мне нужна была интенсивность света выше единицы, а эти значения засвечивали оттенок цвета, и тёмно-синий превращался в бледно-голубой.
Во-вторых, я понимал, что само небо как часть сцены я смогу дорулить на пост-продакшене. Однако глобальное освещение влияло на всю сцену, как раз таки своей проекцией.
Следовательно, оно окрашивало все объекты в тот оттенок, который был установлен в параметр Color и искажался параметром Intensity. Поэтому баланс между сохранением изначального оттенка цвета и увеличением интенсивности свечения был крайне важен.
В-третьих, источники света нужно было оптимизировать, дабы избежать конфликтов и возможных проблем на рендере.
В итоге, я решил разграничить эти две задачи сразу на два aiSkyDomeLight'а. Первый проецировал нужный оттенок неба на сцену, а второй компенсировал интенсивность свечения.
Первый источник, тот, что отвечал за цвет, я уменьшил до 0.8 от его изначального размера. А второй, отвечающий за интенсивность свечения, имел исходный размер и находился поверх первого. Во Viewport'е это выглядело примерно так..
Так как интенсивность второго SkyDome Light'а была намного выше, он спокойно светил сквозь первый, никак не конфликтуя и не засвечивая цвет его проекции.
Атмосфера
На самом деле, большая часть атмосферы достигалась уже описанными выше способами, поэтому, казалось бы, что тут ещё можно добавить.
Тем не менее, двух aiSkyDomeLight'ов и одного spotLight'а не достаточно, чтобы воплотить идею с одновременно светлой и тёмной ночью. Поэтому сцена содержит в себе ещё несколько ключевых источников света.
Даже выкрученная интенсивность свечения второго SkyDome Light'а не давала нужной выразительности переднему плану. Он попросту казался бледным. А увеличение значения в параметре Intensity уже приводило к засвету всей области, создавая множество конфликтов.
Самым здравым решением было – добавить дополнительный источник света над передней частью сцены. И это же стало ключом к созданию контраста на переднем и заднем фоне, поскольку сзади образовывалось естественное затемнение. Нужно лишь грамотно размыть проекцию света и добиться нужной интенсивности.
За основу я взял источник типа Area Light, опять же, от Arnold. Расположил над передней частью сцены и подобрал нужные значения для его параметров.
При описании настроек света я не называю конкретных значений, поскольку параметров очень много, а расписывать их бессмысленно. Ко всему, мне хочется разглашать эту информацию.
Спустя множество тестовых рендеров я наконец смог получить мягкое наложение света от Area Light'а на проекцию Spot Light'а, подсвечивавшего туман. Это была действительно кропотливая работа, так как мне по-прежнему нужно было соблюдать баланс, не допуская искажения цветов.
Поскольку все материалы настроены корректно, у меня не возникло проблем с внутренними переотражениями или непредсказуемым рассеиванием.
Поэтому единственным камнем преткновения было именно настроение и общая атмосфера сцены.
Свечение на снегу отдаёт холодным оттенком, а мягкие тени на веранде добавляют уют. Вы можете видеть очень классное отражение ёлочной гирлянды на воде. А вода, в свою очередь, очень плавно размывает все элементы, что в ней отражаются.
Всё это груда настроенных параметров выше перечисленных источников света.
На изображении выше вы можете увидеть схему, на которую я опирался, работая над атмосферой сцены.
Градация цветового пространства и насыщенности тона
Возвращаясь к идее о том, чтобы сцена была светлой и тёмной одновременно, стоит ещё упомянуть градацию тона цветового пространства.
Некоторые оттенки и яркости я дорабатывал уже на пост-продакшене. И там же я достиг нужного уровня контраста.
На изображениях выше вы можете видеть градацию цветового пространства на финальном рендере и на конечном изображении уже после пост-продакшена.
Как вы можете заметить, второй градиент приобретает более естественный переход от тёмного к светлому, а цветовой тон становится насыщеней.
Стоит также отметить, что именно при работе над «Night Farm» я впервые использовал Light Editor, так как через него действительно удобно управлять большим количеством источников света в сцене.
Рендеринг
Рендеринг (или визуализация) хоть и является заключительным этапом, тем не менее, он присущ всему рабочего процессу, начиная ещё с этапа моделирования.
В ходе работы над «Night Farm» я запустил рендер примерно 500 раз и вывел более 90 изображений.
Потребность в быстром получении кадров сильно ощущается именно на этапах шейдинга и освещения. Но я не буду сейчас рассказывать о различных методах оптимизации рендеринга, так как этому запросто можно посвятить отдельную статью.
Поэтому далее я кратко пройдусь по настройке рендера для вывода финального кадра «Night Farm».
Камера
Визуальная часть снимка начинается с операторской работы. От этого зависит половина всей композиции и визуальное восприятие сцены.
Изначально, для «Night Farm» я решил выбрать разрешение 1920x1820 пикселей, дабы изображение казалось квадратным, но было чуточку продолговатым. Однако быстро отказался от этого решения, поскольку оно плохо влияло на организацию объектов в кадре: они либо обрубались на краях, либо не влезали.
Замучавшись двигать объекты вправо/влево, я всё же решил использовать полностью квадратное соотношение сторон в разрешении 1920x1920 пикселей.
На скриншоте ниже вы можете увидеть расположение сцены в объективе камеры.
С самого начала я понимал, что не буду рендерить эту сцену в 4K, поэтому даже не пытался корректировать настройки камеры с учётом большего разрешения.
При работе над любыми подобными артами я, как правило, разграничиваю камеру, через которую осуществляю обзор вида, и камеру, через которую этот вид в последствии рендерю.
Не сказать, что это очень инновационный подход, но таким образом я избегаю множество проблем с операторской работой. К тому же, настройка камеры, через которую я осуществляю рендеринг, происходит ещё на самых ранних этапах.
Настройка качества рендера, AOVs
Для начала разберёмся, что такое AOVs.
AOVs (Arbitrary Output Variables) – это различные компоненты рендера, то есть его составляющие.
Любая картинка выводящаяся из трёхмерного пространства собирается из света, теней, материалов, геометрического смысла содержащихся в сцене объектов и прочих подобных вещей.
Все эти компоненты наслаиваются друг на друга и получается двухмерное изображение.
Рендер же позволяет нам посмотреть на эти компоненты отдельно.
Мы можем оставить включёнными лишь прямые лучи и подогнать семплинг (выборку) до значения, при котором данный тип света перестанет создавать излишние шумы.
Или же мы можем отдельно посмотреть на компонент рассеянного света и поработать над качеством теней.
Здесь я, опять же, не буду рассказывать обо всём процессе настройки качества рендера, поскольку это долго и бессмысленно.
Однако стоит сказать, что настройка качества рендера очень сильно переплетается с оптимизацией рендеринга.
Для удаления как можно большего количества шума с изображения и отрисовки самых мельчащих деталей, самым простым способом кажется увеличение выборки.
Избыточная выборка сглаживания (Super-sampling, SSAA) – это сглаживание изображения при его растеризации, то есть во время преобразования всех AOVs-компонентов в растровую двухмерную картинку.
Ниже вы можете видеть настройку семплинга у материала, отвечающего за свет гирлянды на веранде.
Но увеличение количества семплов увеличивает время рендеринга.
Поэтому я выполнял настройку выборки индивидуально для каждого источника света, чтобы не крутить глобальную ручку для всего изображения.
По сути, настройка качества рендера – это череда компромиссов. Но грамотный подход позволяет найти баланс между качественной картинкой и временем её получения.
Альфа- и RGB-каналы
Поскольку я вывожу финальный рендер в EXR-формате, то у меня есть возможность включить все необходимые каналы в файл заранее.
Однако первичная коррекция тона происходила ещё на этапе разработки цветового пространства, поэтому в ходе всего рабочего процесса я периодически выводил каналы Red, Green, Blue и Alpha в отдельных изображениях.
Финальный рендер
Финальное изображение на рендере я выводил 3 часа 27 минут 37 секунд.
Рядом вы можете видеть и значения семплинга, которые я использовал при рендере.
А теперь внимание!.. вот исходное изображение, которое я получил на рендере.
Вы можете сравнить изображение полученное на рендере и финальный вариант, получившийся уже после пост-продакшена.
Пост-продакшен
Под пост-продакшеном я подразумеваю все мероприятия, проводимые уже после того, как основной рабочий процесс закончился. Когда можно закрыть Maya и приступить к обработке изображения, полученного на финальном рендере.
Детально рассказывать про обработку «Night Farm» я не буду, так как там нет ничего интересного.
Скажу лишь, что обрабатываю арты я в Photoshop'е в 16-битном канале. Поскольку в Photoshop'е нельзя напрямую работать с 32-битными изображениями, приходится идти на такой компромисс.
К тому же, ни один популярный сервис не поддерживает 32-битные изображения, поэтому, конечный файл я сохранил в двух вариантах: 16-битном и в 8-битном канале в формате PNG.
Основная задача при всех этих манипуляциях – не потерять цвета, поскольку от битности зависит количество возможных оттенков на каждый бит файла.
Далее идёт загрузка получившегося изображения на ArtStation и в Instagram.
Заключение
Работа, протянувшаяся в три месяца позволила мне выйти на новый уровень в создании подобных изображений. Каждый шаг заставлял решать всё больше и больше задач, что, опять же, способствовало развитию моих навыков.
Абстрагировавшись от всей технической подоплёки, следует сказать, что это было увлекательное приключение.
В первую очередь «Night Farm» несёт в себе вдохновение, праздничное настроение и умиротворённую атмосферу.
Весь этот сложный путь был проделан только для того, чтобы можно было сесть в то кресло, закрыть глаза, выдохнуть и насладиться умиротворением на ночной ферме.
Примечания
Некоторые материалы могут быть не совсем качественными, так как я снимал это для личного архива, не думая, что буду это публиковать.
Арт в хорошем качестве вы можете посмотреть у меня на ArtStation по этой ссылке.
Данная статья больше обзорная, поэтому содержит множество пояснений. Я решил не вставлять ссылки на отдельные источники (ту же Википедию) и пояснить некоторые термины в простой форме самостоятельно.
ArtStation – rabbitgraned.artstation.com
Instagram – @rabbit_graned
Twitter – @rabbitGraned
Мой блог об анимации и моделировании в Blogger: rabbitgranedartist.blogspot.com
Блог, посвящённый Lamp: