3D-художник Алиреза Хаджехали – натуральный мастер ландшафтного дизайна. Он создал бесчисленное количество виртуальных локаций, целиком играбельных в UE4. В этом интервью она описал свой рабочий процесс и рассказал о том, как WorldMachine и Megascans помогают ему конструировать вящие и реалистичные цифровые миры.

Это не туториал, а интервью, которое поможет представить пролетарий процесс. Обучающая статья заняла бы более десяти страниц.

С оригинальным материалом можно ознакомиться тут.

Всем привет! Меня призывают Алиреза Хаджехали, и я здорово подсел на реализм. В данный момент я получаю степень бакалавра по специальности «Программирование», и мой выпуск должен состояться образцово через 8 месяцев. Что касается 3D-графики, то здесь я самоучка, и эта район знаний для меня – настоящая страсть. Именно она и помогает мне подвигаться вперед.

02-virtual-landscapes

Все началось с того, когда я обнаружил, что у моего Crysis 1 есть редактор, какой можно открыть двойным кликом мышки и тут же стать игровым разработчиком. «Никогда не сообщаете ребенку, что посадить пару деревьев – это непосильная задача!» Вскоре вышел CryENGINE 3 Free SDK, после чего моей основной деятельностью сделались создание сцен и помощь маленьким инди-проектам, плюс я несколько лет коротал кучу свободного времени за бесплатной работой и в один отличный момент смог, наконец, представить себя как художника окружения с солидным портфолио.

Из того, что я мастерил недавно, можно выделить LawBreakers, где я делал природные полы для уровней. Работая над Chronicles of Elyria, я был в позиции универсала, то есть основывал и игровые уровни, и рекламные шоты. Кроме того, я мастерил ландшафт в Squad и сейчас работаю с друзьями над Our Ghosts of War, это собственный проект.

03-virtual-landscapes

Я думаю, каждый художник окружения мечтал заниматься этим с самого младенчества. К примеру, когда мне было 4-5 лет, то я всегда, смотря фильмы, размышлял о том, как бы я оформил декорации, доверь они это дело мне. Мне всегда нравилось комбинировать предметы таким образом, чтобы они отлично смотрелись друг с товарищем – именно это я и делал в CryENGINE 2 в свои моддеррские деньки.

Переход от махоньких сцен к обширным пространствам произошел, когда я впервые увидал Battlefield 3. Я был очень впечатлен этими огромными ландшафтами и особенно – работой Эндрю Гамильтона. Он собаку съел на всем, что прикасается открытых локаций, поэтому в его работе все детали изумительны и есть в полной гармонии друг с другом. В общем-то, в этом и есть секрет неплохих открытых ландшафтов. «Не нужно недооценивать что-либо, исходя из размера. Даже махонькая галька на земле так же важна, как и огромные горы!» На тот момент я по-прежнему пользовался CryENGINE 3, но из-за недостачи инструментов для создания больших открытых пространств я таки кинул его и перешел на UE 4.0.1.

Должен признаться, что когда вы, наконец, доделываете вящую открытую локацию, где все сделано до последней песчинки правильно, эмоция удовлетворения гораздо сильней, чем от создания маленькой изолированной подмостки. И это именно тот наркотик, который заставляет меня двигаться дальней. Я всегда жду момента, когда закончу очередную работу и смогу насладиться тем, что создал.

04-virtual-landscapes

05-virtual-landscapes

06-virtual-landscapes

Труд над каждой сценой начинается с идеи, родившейся в голове, или с картинки-референса. К образцу, недавно я создал кусочек Исландии, и этот проект завязался с того, что я случайно увидел классные фотки полуострова Рейкьянес. Локация, какую я сделал после, была вдохновлена сценой из фильма «Безумный Макс: Путь Ярости».

Мне всегда лень делать закладку того, что я лишь что визуализировал в своей голове, поэтому как только у меня является идея желаемого, я начинаю работать над картой высот грядущего ландшафта.

07-virtual-landscapes

08-virtual-landscapes

09-virtual-landscapes

10-virtual-landscapes

Как правило, для генерации карты высот я использую WM2 (World Machine 2). Дальше беру карты высот и несколько масок, с их помощью мастеря карту веса (splat map). Использование карты веса для ландшафтов – это престарелый, но по-прежнему самый лучший метод. Я также экспортирую карту вышин в сетку, а затем использую эту сетку для дизайна фонов локации. Для этого я вначале упрощаю сетку, а затем запекаю высокополигональную модель в низкополигональную, чтобы у меня был низкополигональный ландшафт и карта нормалей, какие можно разместить за пределами локации и тем самым создать видимость, что локация вяще, чем на самом деле. Вот две картинки, показывающие разницу с фоновыми моделями и без них:

11-virtual-landscapes

12-virtual-landscapes

Затем я использую 3ds Max и ZBrush для создания вспомогательных объектов для окружения. К образцу, камни. Чтобы «распластать» камни по UV-плоскости, я использую программу Unfold3D. Она, к слову, весьма быстрая. Затем я делаю плиточные текстуры в UE4 при помощи нода Object Radius, чтобы плотность текселей оставалась равной, как бы я не менял масштаб камня.

13-virtual-landscapes

14-virtual-landscapes

15-virtual-landscapes

К слову, у меня есть одна особая функция, которая позволяет использовать цветовую информацию определенной точки ландшафта на объектах, какие на этой точке находятся. Это позволяет делать более мягкие переходы между землей и камнями.

16-virtual-landscapes

17-virtual-landscapes

Самое интересное начинается после того, как я импортирую в UE4 карту вышин и начинаю играться с материалами, функциями, освещением, атмосферой и т.д. Я мастерю кучу поправок, постоянно все меняя, пока не поймаю расположение локации.

Я использую, как правило, 4-6 материалов на один пейзаж, и последний результат, который можно видеть на картинках, как правило, спрашивает 3 Гб памяти RAM (4K-текстуры) и бегает с частотой от 60 до 100 кадров в секунду на моей 970, что недурно для мира площадью в 64 квадратных километра, с динамическим глобальным освещением (при поддержки LPV) и включенной тесселляцией (от англ. «tessellation»; это технология, разбивающая стрельбища на мелкие части, которые затем можно использовать для улучшения качества картинки), меняющейся в подневольности от расстояния.

Что касается тесселляции, меняющейся в зависимости от расстояния, то я создал библиотеку модульных функций, с поддержкой которых могу улучшить качество пейзажа, причем с весьма небольшими затратами вычислительных ресурсов. Более того, эти функции универсальны, и я могу использовать их при труду с другими локациями, делая абсолютную красоту и очень скоро. Вот пара картинок, показывающих, как было до и стало после.

18-virtual-landscapes

19-virtual-landscapes

20-virtual-landscapes

21-virtual-landscapes

А вот еще одна функция, какая в качестве входной информации использует траву и на ее основе позволяет основывать бесконечное количество вариаций – не генерируя новые текстуры, а попросту по-другому окрашивая траву. Впрочем, иной раз для того, чтобы пространство не выглядело монотонно, достаточно лишь одного типа травы, безо всяких вариаций.

22-virtual-landscapes

Я генерирую немало рельефа, пока не увижу тот, что соответствует моему видению отличного. Я пытаюсь визуализировать то, как люди будут ориентироваться по этому ландшафту – это и помогает мне отыскать наилучший рельеф.

Другая важная вещь – это масштаб, поскольку погружение мощно зависит от того, насколько велика, к примеру, вон та гора или вон та песчаная дюна. Необходимо, чтобы все эти горы, холмы и прочее оставались одного масштаба, какой не будет слишком большим или слишком маленьким, а также содержать в уме геймплей. То есть локация должна быть не только прекрасной, но и подходящей для геймплея.

К сожалению, при создании карты высот в WM2 тяжело уловить чувство масштаба, и эта программа больше не обновляется. Потому я просто импортирую карту высот в UE4 и немного бегаю туда-сюда, чтобы постичь, правильный ли получился масштаб. Потом вы немного привыкаете к этому масштабу и дальше просто доверяете своему выбору.

Megascans – это очень состоятельный источник материалов для художников окружения. Впрочем, этой библиотеке пока не достает вариативности материалов, потому я не полагаюсь лишь на нее, а использую также CGTextures и делаю собственные текстуры.

23-virtual-landscapes

Сейчас к важному. Вы об этом не спрашивали, но, как мне кажется, этим стоит поделиться. Неважно, Megascans это или нет, но когда вы импортируете текстуру в движок, она начинает глядеть посредственно. В библиотеке Megascans поверхности отрендерены в миллионы стрельбищ. Мельчайшая детализация, все в 3D, поддержка теней и генерация AO. Но совсем иное дело, когда вы импортируете эти материалы в игровой движок. В игровых движках поверхности выполнены с небольшим числом полигонов – как правило, 2 треугольника на один квадратный метр. Но есть способы это обогнуть. Среди художников окружения есть расхожее мнение, что на PBR-движке металлическим материалам не необходима карта отражений. Также многие ошибочно думают, что на карте альбедо не надлежит быть теней. Согласиться с этим категорически не могу.

Есть такая штука как микротени, и игровые движки их мастерить не умеют, поэтому эти микротени нужно добавлять на карту альбедо. Чтобы вы лучше соображали, что такое микротени, взгляните на картинку ниже:

24-virtual-landscapes

Если выслать эти тени с карты альбедо, то игровой движок их реконструировать не сможет – самостоятельно от того, используете ли вы отдельную карту для AO или нет. AO-карты никак не повлияют на текстуру, если поверхность есть под освещением, т.к. они работают, только если поверхность покрыта тенями. Так что эти микротени необходимо добавлять на карты альбедо. Некоторые люди зачем-то удаляют эти тени, затем используют отдельную AO-карту, а затем объединяют ее с картой альбедо в редакторе материалов, но я не соображаю, зачем удалять тени, а затем снова их добавлять стоимостью дополнительной AO-карты.

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

25-virtual-landscapes

Я не использую для этого отдельную карту отражений, т.к. это излишняя трата вычислительных ресурсов. Но я могу задействовать карту отражений на карте альбедо, добавив нод Clamp (он ограничивает заданное смысл в пределах определенного диапазона) с минимальным значением «0» и максимальным «0,5» («0,5» – это отражение на большинстве неметаллических поверхностей). Чтобы добавить вариативности на вышедшую карту отражений и сделать поверхность более интересной, мы можем проглядеть ее через нод Power (он берет заданное значение и умножает его на себя определенное число раз), чтобы сделать более контрастной перед тем, как за работу возьмётся нод Clamp. Это позволяет сделать поверхность более правдоподобной, поскольку сейчас дыры и трещины не отражают свет так же, как и плоская поверхность.

Ниже – чета фотографий, демонстрирующих разницу между обычной текстурой для камня и текстурой, куда я добавил изменения, о каких рассказал выше.

26-virtual-landscapes

27-virtual-landscapes

А вот то же самое, но если смотреть только сквозь буфер отражений.

28-virtual-landscapes

29-virtual-landscapes

Здесь также можно было бы рассказать об эффекте Френеля, но поскольку этот текст и так превращается в «Брань и мир», то я, пожалуй, воздержусь. Может быть, в следующий раз.

Способов оптимизировать окружение есть великое масса, и некоторые из них я использую для своих пейзажей. Думаю, самый наилучший метод – это укладка в каналы (от англ. «channel packing»; это техника, при какой каналы R, G и B изображения используются для хранения различных данных), он помогает сберечь ресурсы памяти и убавить сложность шейдеров. То есть вы можете уложить три монохромные карты альбедо в одну RGB-текстуру, а затем раскрасить любой канал в редакторе материалов. Я, правда, этим методом не пользуюсь, т.к. усердствую сохранить оригинальную цветовую информацию. Но что я делаю, так это помещаю карту смещения (displacement map) в кубовый канал карты нормалей и выставляю тип компрессии на «Masks». Затем я несложный математикой реконструирую синий канал карты нормалей в редакторе материалов, что позволяет мне не использовать отдельную карту смещения. Выставление образа компрессии на «Masks» снижает использование памяти примерно на 50%. Я также, случается, извлекаю карту неровностей из карты альбедо и помещаю ее в альфа-канал карты нормалей, но негусто – лишь в случаях, когда нужна уникальная карта неровностей.

Что прикасается сеток для камней, то я, как правило, не экономлю треугольники, и стараюсь держаться уровня примерно в 30 тысяч треугольников на камень – это весьма помогает погружению, если игрок вдруг окажется рядышком с таким камнем. Кроме того, я использую, как правило, 4 или 5 степеней детализации – чтобы при перемещении игрока объект не дергался. Кроме того, я усердствую максимально снизить количество треугольников на уровень детализации, при этом храня форму, поэтому у меня не получается так, что на 0-ом уровне детализации я видаю камень, а на 5-ом – базуку.

30-virtual-landscapes

О другом способе я уже рассказывал выше – это функция для муравы. Смысл в том, что я использую для травы одну текстуру и одну сетку, а затем мастерю много разных вариаций, чтобы покрыть ими сотни метров кругом игрока, причем тот не замечает, что это, по сути», «клоны» одной и той же муравы.

Прощу прощения, но этот раздел обещает быть вящим. Системам для работы с PBR-материалами нужно физическое освещение. Я имею в облику, что мы должны знать, сколько именно света мы проливаем на наши материалы, по-иному смысл в использовании PBR для создания реалистичных ландшафтов, по сути, запросто теряется.

31-virtual-landscapes

К сожалению, свечение от солнца в UE4 не измеряется в единицах измерения вроде люксов, потому мы, в сущности, не знаем, сколько света излучаем на создаваемый мир. Впрочем, есть несколько способов, позволяющих рассчитать эту размер, но результат вряд ли будет таким же удовлетворительным, как с физическим светом. Потому я поделюсь с вами собственными находками. Если у вас облачная погода, то вам необходима, собственно, облачная небесная сфера и параметр «Skylight Intensity», выставленный «1». Для солнечно-облачного денька параметр «Sun Intensity» лучше выставить на «3.14», а «Skylight Intensity» имеет резон немного снизить – для поддержания хорошего контраста между светом и тенью. Если у вас меньше облаков и вяще солнца, то для «Sun Intensity» подойдет значение «4» или «5». Для выжженных пустынь с беспощадным солнцем параметр «Sun Intensity» можно выставить на «7».

Но я весьма не рекомендую идти выше «7», поскольку материалы начинают глядеть хуже. Люди часто ставят «10» или даже «12», но это промах. В итоге либо ваши текстуры будут недостаточно озарены (они будут темнее, чем должны), либо вы станете жертвой тональной компрессии (от англ. «tone mapping»; это конвертация цветового диапазона из HDR в немало «узкий» LDR). В UE4 эта функция ограничивает белый цвет, поэтому поначалу у вас получается весьма блеклое изображение, и немного компенсировать это можно, лишь мощно подняв параметр «Sun Intensity». Но в итоге от такого света материалы теряют свою оригинальную детализацию. Чтобы управиться с этим, но не отключая тональную компрессию (поскольку вместе с ней отключится и груда других функций), я создал специальную таблицу – если загрузить ее в Post Processing Volume, это вернет белоснежные цвета обратно к оригинальным позициям, а вы сможете пользоваться целым диапазоном яркости (0-255).

32-virtual-landscapes

Разобравшись с белыми цветами, можно отведать увеличить контраст картинки, чтобы сделать ее более увлекательной, правда из-за этого может пострадать реалистичность. Потому, если вы больше склоняетесь к «больше реализма!», чем к «даешь увлекательно!», то значение для контраста лучше оставить по умолчанию или возле того.

Будь вы художник окружения или кто-то еще, всегда усердствуйте найти дело, к которому испытываете настоящую страсть. Истина, стоит иметь в виду, что если вы серьезно ввязываетесь в этот бизнес, то значительны будут не только ваши «хотелки», но и желания других членов команды.

Кроме того, после создания карты вышин и до перехода к текстурированию/освещению имеет смысл немного пробежаться степени, чтобы проверить масштаб. Это очень сэкономит вам время.

33-virtual-landscapes

Следите за тем, чтобы ваши материалы выглядели как надо. Не страшитесь менять материалы (особенно цвета), пока не достигнете целой гармонии.

Делая окружение для открытых локаций, станьте первым, кто по нему пройдется, сделайтесь первым, кто будет судить, подходит ли эта локация хотя бы для 2-3 различных типов геймплея или нет. Будьте первым, кто позаботится о производительности и оптимизации. Упростите труд другим.

Обращайте внимание на мелкую детализацию, не делайте исключений. Камни, мурава, галька, горы – не забывайте ни о чем. Не перескакивайте с одного объекта на иной, пока хорошенько его не доделаете. Один хорошо сделанный световой меч заслуживает вяще уважения, чем 10 посредственных локаций.

34-virtual-landscapes

Создавайте модульные функции, какие можно будет использовать повторно. Это здорово экономит пора и усилия, попутно улучшая качество.

Не бойтесь делать по несколько ходов. Делайте одну версию, потом еще и еще, пока не поймете, что да – это оно! И обучаетесь у тех, кто критикует вашу работу.

Если у вас есть какие-то проблемы, можете смело писать мне. Но заранее извиняюсь, если с ответом будут заминки. Бывает, я работаю по 16 часов подряд, забывая даже почесать маковку.

35-virtual-landscapes