Оскар Эдлунд (Oskar Edlund) рассказал о создании собственный последней сцены «Скандинавский лес» (Nordic Forest). Это потрясающий проект, созданный на UE4 при поддержки фотограмметрии. В этом материале художник дает несколько здоровых советов о моделировании пейзажей, создании моделей, работе с флорой и съемке фотографий для 3D-сканов.
Оригинальный материал можно почитать тут.
О фотограмметрии при поддержки программы Agisoft Photoscan можно почитать тут.
Привет! Меня призывают Оскар Эдлунд, и я 3D-художник из Швеции, который в данный момент обучается искусству создания 3D-сцен в стокгольмской школе FutureGames. Ранее я трудился интерном в Arrowhead Game Studios. Это маленькая студия, базирующаяся в Стокгольме и трудившаяся над играми вроде Helldrivers и Gauntlet.
Мне всегда были увлекательны новые техники создания окружения, и я хотел попробовать фотограмметрию еще с момента ее появления – по сути, вам необходима лишь приличная камера и место для съемок. К счастью, я вытянулся практически посреди леса в северной Швеции, где таких пунктов буквально пруд-пруди.
Сперва я собрал несколько фотографий и сделал из них муд-борд. Это позволило мне держаться того, какую сцену я хочу сделать, а также учитывать, к каким пунктам у меня есть доступ.
Поймав нужную атмосферу, я отправился в лес за снимками, чтобы затем использовать их для создания модульных объектов. Я разыскивал объекты, которые хорошо смотрелись бы друг с другом, а также пытался мыслить нестандартно и немножко покреативить с окружением. К примеру, я хотел сделать каменную стену, однако не нашел такую и в итоге сделал снимки нескольких камней, а затем превратил их в стену.
Для модульных моделей я снимал объекты вроде мшистых камней, древесных стволов и различного мусора, возлежащего на земле. На каждый объект уходило от 30 до 100 снимок – я делал снимки со всех возможных углов, поэтому число фотографий зависело от сложности объекта. Затем я пользовался Autodesk Remake, чтобы сделать из этих снимок сетки и текстуры. Если вы новичок в фотограмметрии, то я очень советую эту программу, т.к. она будет проста.
Ниже – пример того, как происходит процесс конвертации скана в низкополигональную сетку итого за пару минут при помощи ZBrush.
Слева изображен скан с текстурами, а рядышком с ним – отсканированная высокополигональная сетка внутри ZBrush. Чтобы снизить шум в сетке и упростить процесс конвертации в лоу-поли, я использовал несколько различных полировочных настроек. Этот метод особенно эффективен с объектами, у каких мало среднеразмерных деталей – их можно просто запечь в текстуру.
Отполировав высокополигональную сетку, я сделал низкополигональную базу, для чего использовал функцию Zremesher. Я выставил смысл в «Target Polygons Count» на «0.5» и немного снизил настройку «AdaptiveSize» – чтобы у меня была однородная топология, поскольку для финального итога я хотел использовать шейдер замощения. Затем я выполнил еще 3 этапа: во-первых, с поддержкой кнопки «Divide» увеличил количество полигонов на 4, во-вторых, с поддержкой кнопки «ProjectAll» спроецировал модель обратно на высокополигональную версию, и в третьих, с поддержкой той же «Divide» поделил количество полигонов на 4.
Учтите, что это, возможно, не самый наилучший способ. Я воспользовался им, потому что мне нужно было быстро сделать низкополигональную сетку, чтобы затем доделать и оптимизировать ее в Maya. Когда вы возделываете огромное количество объектов за очень короткое время, доводится думать на ходу.
Кроме того, я удалил из отсканированной текстуры почти тяни направленный солнечный свет, тени и объемное затенение, поскольку получить необходимый результат прямо с фотографии – это почти невозможно.
Чтобы освободиться от объемного затенения, я инвертировал зеленый канал из запеченной карты нормалей и, выставив низенькую прозрачность, поместил его поверх карты альбедо. Затем я подвигал настройки в Image > Adjustments > Shadows/Highlights, пока текстура не основы выглядеть, как мне того хотелось.
На картинке выше показаны настройки, какие я использовал в UE4 для текстур. Благодаря им я мог просто перекидывать уникальные текстуры с одной модели на иную. Кроме того, я бы рекомендовал использовать плиточные текстуры – чтобы объект гляделся хорошо, даже если камера будет к нему совершенно близко. Я в своих материалах этих деталей не добавлял, но если вернусь к проекту, то непременно этим займусь.
Я использовал в UE много текстур с мировыми координатами и маскировал их при поддержки вершинных цветов, тем самым смешивая эти объекты с окружением. Выговор, к примеру, о мхе рядом с камнями. Это позволило мне избавиться от большинства швов в моем махоньком мирке.
Я уже говорил, что хотел сделать каменную стену, но в плиточном облике и в качестве составных элементов используя объекты из реального вселенной, свойством плиточности не обладающие. Это была непростая задача, потребовавшая четы экспериментов.
Я начал с того же процесса, который описал рослее. Затем я разделил низкополигональные модели, которые имели запеченные текстуры и пока не бывальщины плиточными, на разные сегменты, которые можно было бы использовать дальней. В этом случае отсканированный объект был сделан из разных камней, потому я разбил все камни на отдельные объекты. Затем я пересобрал эти камни при поддержки сетки (grid) в Maya. Таким образом у меня вышла каменная стена, но уже в плиточном виде.
Чтобы избавиться от текстурных швов между пересобранными камнями, я использовал Mudbox и с его поддержкой клонировал текстуру. Я также воспользовался раскраской вершин, чтобы смешать камни с текстурой мха, имеющей всемирные координаты.
Этот метод использовался, чтобы сделать каменную стену, стоящую рядышком с дорогой.
Когда я делал материалы с мировыми координатами, то диффузную карту, карту нормалей и карту вышин запекал из разных сканов. Затем я открывал Photoshop и мастерил на их основе плиточные текстуры. Сделав это, я делал карту неровностей из карты альбедо. Таким манером, у меня был полный контроль над деталями в этих текстурах.
Я избрал фотограмметрию, потому что хотел сделать очень детализированную лесную сцену, но как можно скорее. Это была моя первая попытка работы с фотограмметрией, и мне было увлекательно, как далеко я смогу зайти. Мне кажется, в последнее время фотограмметрия становится все популярней, и многие студии уже используют ее в своих играх. Недурной пример – это DICE и их Star Wars Battlefront.
Мой опыт показал, что фотограмметрия – это отличный способ весьма быстро добиться реалистичной картинки, однако это все же не панацея. Суть метода в том, чтобы комбинировать новоиспеченные техники с традиционными. Кроме того, мне еще многому нужно поучиться.
Я снимал на Nikon D1200 с 50-миллиметровым объективом, но для фотограмметрии подойдет и любая пристойная камера. Также могу посоветовать, что фото лучше мастерить в облачный день, то есть при объемном освещении. Благодаря этому у вас будет меньше возни с «очищением» текстур. Для реорганизации фотографий в 3D-сетки я использовал Autodesk Remake – благодаря тому, что эта программа будет проста, и у Autodesk есть студенческие лицензии, позволяющие использовать ее софт даром. Также стоит отметить, что нет смысла сканировать все, что выглядит круто. Оцените, что у вас есть, и поразмыслите, как это можно использовать в игровом движке.
Для растительности фотограмметрию я не использовал. Тут я только делал снимки веток, помещал их на синий фон, вырезал листья и сосновые иголки, а затем мастерил текстуру с альфа-каналом и подповерхностную текстуру. Карты нормалей я основывал из диффузных карт при помощи Quixel NDO. Всю растительность я делал в Maya при поддержки плоскостей (plane), за исключением листьев на деревьях, которые бывальщины созданы в Speed Tree.
Что я делал здесь, так это создавал сферу кругом растения, а затем использовал ее, чтобы перенести нормали ее верхушек на растение при помощи функции «Transfer Attributes» в Maya. Благодаря этому у меня вышло более плавное затенение.
Я моделировал плоскости, стараясь как можно лучше подогнать их к альфа-текстуре (чтобы они гляделись хорошо даже без нее), но при этом стараясь не слишком увлекаться с стрельбищами. Затем я использовал шейдер в UE, чтобы текстура с альфа-каналом удалялась в подневольности от расстояния между объектом и камерой. Благодаря этому растения на дистанции выглядели по-прежнему «густо», хотя плоскости были лишь для 0-го степени детализации. Не думаю, что это хороший способ для создания растительности, но это моя первая попытка, и в моем случае это сработало. Впрочем, я все же рекомендую поискать руководства, где объясняется, как это сделать немало толково.
В шейдере для листвы нет ничего особенного – это просто типовой шейдер, с двух сторон обернутый картой альбедо, подповерхностной текстурой, картой нормалей и блоком «alpha_fade». Однако в самой сцене он сморится довольно неплохо для результата, на который я рассчитывал.
Освещение в сцене весьма простое – я использовал направленный свет от солнца в сочетании с солнечным светом внутри UE4. Затем я сделал световые ударения в некоторых местах: здесь это световое пятно на дороге перед камерой и еще одно – в крышке дороги, где я хотел создать сильный композиционный центр.
Композиция весьма простая, но все же помогает направить зрительский взор в нужном курсе.
Чтобы добиться финального результата, я использовал пост-обработку в Unreal Engine 4. Это мощный инструмент, который очень мне помог. Я сделал сильное виньетирование, а также поигрался с нюансами, чтобы получить более теплый свет и сделать тени немало темными и «холодными».
Вот так сцена выглядит с пост-обработкой и без нее. Разница на лик.
По итогу я пришел к выводу, что UE4 неплохо подходит для создания таких подмостков, так что я планирую использовать его и дальше.