Разбор.
Энтони Чжэн поделился рабочим процессом, который стоял за проектом «Город в облаках», рассказав, как ему удалось создать замок с помощью системы процедурной генерации Unreal Engine, и объяснив, как он делал текстурирование.

Введение
Здравствуйте, меня зовут Энтони Чжэн. Я — художник по окружению в 3D, стремящийся работать в игровой и развлекательной индустрии. Я начал свой путь в 3D-искусстве в 2021 году, учась в Мичиганском государственном университете. То, что начиналось как пара увлекательных занятий, быстро превратилось в одержимость. Довольно скоро я начал специализироваться на искусстве окружения в 3D, поскольку меня привлекли техническая глубина этой области и потенциал для повествования.
После окончания университета в 2024 году я понял, что мне ещё многому предстоит научиться. Поскольку индустрия стала более конкурентной, я осознал, что мне нужно ещё больше развивать свои навыки, если я хочу добиться успеха. Параллельно работая на неполную ставку и по контрактам, я уделял ещё больше времени совершенствованию своего мастерства, рассматривая каждый проект и работу в портфолио как ступеньку на пути к игровой индустрии.
К середине 2025 года я почувствовал, что готов взяться за что-то более амбициозное. Проект, который не только усовершенствовал бы мои существующие навыки, но и заставил бы меня освоить новые техники и рабочие процессы. Это привело меня к началу работы над моим последним проектом — «Город над облаками».
Город над облаками
При выборе проекта сразу же выделилось это невероятное концепт-арт-произведение художника Тин Юэ. Меня пленила композиция сцены и неземная атмосфера. То, как она приглашает вас в свой небесный мир, парящий над облаками, было одновременно визуально поразительно и богато с точки зрения повествования. Работа была масштабной, пугающей и именно такой, какая должна была подтолкнуть меня к моим пределам.

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

Первоначальная фаза блокировки была относительно простой и началась с создания более крупных элементов в сцене, в первую очередь ландшафта, стен замка и башен. Я всегда стараюсь как можно раньше уловить общую атмосферу и суть произведения. Сосредоточившись на композиции и освещении, прежде чем появятся какие-либо мелкие детали.
Фоновые горы были созданы в Gaea, что позволило мне быстро определить более крупные формы и силуэты. Ландшафт переднего плана, окружающий город, был вылеплен в Unreal Engine, чтобы дать мне больше контроля над деталями. Элементы здания были смоделированы в Blender, прежде чем были собраны в Unreal, где я продолжал работать над освещением и композицией.


Процедурная генерация замка
Я знал, что с самого начала размещение вручную каждой детали замка было бы отнимающим много времени и сложным для итераций. Поэтому я решил посвятить несколько недель изучению системы процедурной генерации Unreal Engine, чтобы создать инструмент, который позволил бы мне генерировать большие части замка за считанные секунды.
Это график PCG для моей основной структуры здания. Он даёт мне контроль над размером здания, высотой, типами стен, декоративными деталями, колоннами, деталями крыши и более мелкими элементами, такими как заборы на крыше. Хотя график может показаться пугающим для тех, кто никогда не использовал Unreal PCG, все функции следуют схожим инструкциям.

Используя систему Unreal Blueprint и Spline, я смог распределить модульные стены вдоль точек сплайна и продублировать их вверх, чтобы создать многоэтажное строение. Умножая размер стен и количество этажей, я смог получить точную высоту строения.
Благодаря этому измерению я могу гарантировать, что верхний этаж, заборы или другие декоративные элементы будут постоянно совпадать с верхом здания. Также важно сохранять важные значения в виде параметров blueprint, чтобы иметь возможность управлять отдельными элементами в обзорной сцене.
Помимо основной структуры замка, я также расширил рабочий процесс PCG, чтобы создать инструменты для управления размером моих башен, создания деревень на вершинах зданий и заполнения моих фоновых гор плоскостями с растительностью.
Существует множество отличных руководств и вводных материалов по системе PCG в Unreal. Это видео от Procedural Minds стало ключевым в помощи мне создать систему многоэтажных зданий и позволило мне контролировать высоту и части стен моего замка.
Процесс текстурирования
Для процесса текстурирования все материалы, использованные в сцене, были созданы в Substance 3D Designer и Painter. Среди них были значимые плиточные материалы Designer, которые использовались в проекте.

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

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

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

В результате этот шейдер позволяет мне процедурно накладывать несколько материалов с контролем над каждым слоем, значительно сокращая ручную работу по покраске вершин каждого нового слоя в сцене.
Поле глубины AO для имитации накопления грязи
В процессе разработки я понял, что мне нужны более сильные тени и накопление грязи, чтобы увеличить визуальный контраст на замке и лучше определить места пересечения крупных конструкций. Я нашёл решение, которое реализовало узел поля расстояний AO в Unreal, который имитирует ambient occlusion между сетками в непосредственной близости.
Чтобы создать эффект накопления грязи, я пропустил плиточную текстуру маски грязи через маску, созданную узлом DepthField AO. Таким образом, вместо того, чтобы функционировать исключительно как маска Ambient Occlusion, она также может имитировать естественное накопление грязи в расщелинах замка, дополнительно усиливая контраст в замке без необходимости рисовать дополнительный слой материала.


Я настоятельно рекомендую посмотреть это видео от AndrewWeirArt, если вы хотите узнать больше об узле Depth Field AO.
Обрезные листы и RGB-текстурирование
Для многих мелких деталей я использовал обрезные листы и рабочий процесс маскирования RGB. Обрезной лист позволил мне быстро добавить витиеватые детали в выбранные области моих объектов. Используя несколько UV-каналов, некоторые объекты также включали дополнительное RGB-маскирование для дальнейшего повышения визуальной точности и вариативности деталей.
Изображения ниже демонстрируют рабочий процесс одного из моих объектов, который сочетает в себе несколько техник текстурирования. Основа построена из плиточных материалов, затем добавляются детали обрезки, а затем добавляется RGB-маскирование для дополнительной изношенности краёв и детализации.
Возможность сочетать эти три разных метода не только экономит много времени по сравнению с созданием полностью уникальных текстур, но также помогает сократить количество карт прорисовки, поскольку несколько объектов могут использовать один и тот же обрезной лист и даже иметь одну и ту же RGB-текстурную маску.




Наклейки
В качестве последнего штриха для разнообразия текстур я добавил наклейки грязи и битого кирпича, созданные в Substance 3D Designer. Я хотел сочетание резких и тонких наклеек, при этом разбитые стены должны быть более чёткими, а пятна от капель воды — более тонкими.

Для битых кирпичей я хотел поэкспериментировать с Parallax Occlusion, чтобы создать ощущение реалистичной глубины, которое сложнее достичь с помощью обычной карты нормалей.
Создание пользовательских облаков
Глядя на оригинальную концепцию, я понял, что облака — важная часть этой среды. Чтобы передать то же эфемерное ощущение, которое создают те яркие, пушистые облака, стандартных туманных плоскостей и облаков было недостаточно.
Чтобы решить эту задачу, я решил изучить, как создавать собственные облака в программе EmberGen. Экспериментировать с Embergen было довольно увлекательно, и мне не потребовалось много времени, чтобы ознакомиться с параметрами программы и начать создавать реалистичные облака.
После создания VDB я столкнулся с дополнительной проблемой в Unreal Engine. Я обнаружил, что встроенному в Unreal материалу разреженного объёма VDB не хватает контроля уровня, который мне нужен для создания мягких, пушистых облаков. Конечные результаты часто больше напоминали густой дым, а не атмосферное облако. Чтобы решить проблему, я решил создать собственный шейдер VDB.

Этот урок от Уинбуша стал хорошим началом для понимания основных функций шейдера. После этого я расширил шейдер, включив в него элементы из нативного шейдера Unreal Sparse Volume Material и дополнительные узлы и приёмы, которые я узнал на форумах сообщества Unreal.
Такой подход дал мне более тонкий контроль над плотностью облаков, непрозрачностью, цветом, излучаемыми свойствами и внутренними тенями. Это позволило облакам лучше поддерживать настроение и композицию сцены. Все особенности моих облаков можно увидеть на графике и видео ниже.

Листва
Листва — ещё один важный аспект окружения, но поскольку она будет густо располагаться по всему ландшафту, я сосредоточился на быстрой итерации и оптимизации, а не на деталях.
Атлас листвы для всей растительности в сцене был создан с помощью комбинации ZBrush, Substance 3D Designer и Painter. Я решил смоделировать и вылепить более крупные листья и цветы, чтобы получить больше контроля над деталями.
Листва с более повторяющимися узорами, например, листья папоротника и сосны, была создана в Substance 3D Designer, поскольку это позволило мне гораздо быстрее экспериментировать с плотностью, масштабом и вариациями листьев. После завершения атласа все ветки и растения были созданы в SpeedTree.


Мой шейдер листвы во многом вдохновлён серией видео о шейдерах листвы от Бен Кловард. Это позволило мне получить гораздо более высокий уровень контроля над эстетикой листвы по сравнению со стандартным шейдером, который генерируется при импорте напрямую из Speedtree.
Поскольку деревья занимают такую большую часть окружения, я хотел максимально уменьшить количество полигонов и размер текстур, чтобы повысить производительность. Для этого я использовал LOD для уменьшения количества полигонов и уменьшения размеров текстур.
Кроме того, в областях, которые находятся достаточно далеко, чтобы детали были неразличимы, я заменил полноценные 3D-деревья пересекающимися плоскостями изображений деревьев. Это позволило мне значительно сократить количество полигонов, сохранив при этом общий силуэт и визуальную глубину окружения.


Персонажи
Поскольку создание персонажей никогда не было моей сильной стороной, я не хотел тратить слишком много времени на лепку традиционного китайского ханьфу. Поэтому я решил потратить пару дней на изучение Marvelous Designer, чтобы получить базовую симуляцию ткани для одежды, прежде чем продолжить лепку в ZBrush, добавить аксессуары в Blender и текстурировать в Substance 3D Painter.

Что касается карт волос, я решил поэкспериментировать с рабочим процессом, который позволил бы мне опираться на уже знакомые мне методы. Я начал с моделирования и укладки волос в Blender и запекания результатов на лист текстуры в Substance 3D Painter перед текстурированием.


После создания карт волос я решил поэкспериментировать с кривыми Nurbs Path для нанесения карт волос. Сначала я преобразовал путь в сетку и выровнял его на картах волос. Затем я продублировал исходную кривую, чтобы убедиться, что у них такое же разрешение и точки, как у оригинала.
Я применил дублированные кривые непосредственно к голове, создав силуэт волос. После этого я продолжил добавлять больше кривых разного размера, чтобы заполнить области и создать эффект растрёпанности и реалистичности.
После того как карты были размещены, я преобразовал их в сетку и перенёс UV с оригинального пути, завершив сборку волос. Хотя этот подход, возможно, не самый оптимизированный метод создания волос, я был очень горд тем, что смог придумать метод, который использовал мои существующие навыки, а также быстро создал волосы, готовые к игре.
Симуляция струящейся ткани в Unreal Engine
Поскольку моя финальная презентация включала видеорендер, я хотел, чтобы шаль персонажа медленно плыла по ветру, напоминая небесные фигуры, которые существуют в азиатской мифологии. Чтобы достичь этого эффекта, я использовал простой узел grasswind в Unreal, который применяет тонкое смещение положения в мире к сетке.
Чтобы ветер воздействовал только на выбранные области, в Blender я использовал рисование красных вершин для определения выбранных областей. Затем эта маска была использована в графе материалов Unreal путём обращения к красному каналу цвета вершин, что позволило мне точно контролировать, где будет применяться движение.


Заключение
В целом, этот проект занял у меня примерно шесть месяцев с перерывами в разработке, балансируя время между контрактной работой, неполной занятостью и подготовкой к неожиданным интервью. Этот проект научил меня гораздо большему, чем я изначально ожидал.
Помимо изучения нового программного обеспечения и техник для решения технических задач, проект также заставил меня улучшить свои навыки управления временем и планирования, чтобы правильно спланировать и выполнить мою самую крупную среду.
Эта постоянная необходимость совершенствоваться, внедрять инновации и исследовать новые идеи утомляет, но это также тот аспект искусства создания 3D-среды, который мне нравится больше всего. Каждый новый проект ставит перед собой ряд проблем, которые нужно решить, и систем, которые нужно изучить, постоянно выводя меня из зоны комфорта.
Необходимость адаптироваться, экспериментировать и разрабатывать новые рабочие процессы — вот что делает процесс одновременно сложным и полезным. Это всё, что я люблю в создании 3D-среды, и я рад начать работу над своим следующим проектом.
Мой совет другим художникам, которые находятся в этом бесконечном пути совершенствования своего мастерства, заключается в следующем:
- Избегайте застоя: я считаю, что худшее, что может сделать художник, — это ничего не делать. Независимо от того, связано ли это с окончанием учёбы в колледже, перегруженностью балансом между работой и личной жизнью или застреванием в проекте, который, кажется, никогда не закончится. Застой — враг роста. Умение управлять временем и стремление к непрерывному пути совершенствования — сильнейшее качество, которым может обладать художник.
- Планирование необходимо для любого художественного проекта: это может быть в разных формах, сбор правильных ссылок, тестирование решений для будущих задач или изучение техник других людей, которые уже прошли аналогичный путь. Искусство — это непредсказуемая гора, поэтому не бойтесь выделять время для планирования чёткого плана действий.
- Обращайтесь за помощью на протяжении всего процесса: ни одна из моих работ в портфолио не была бы возможна без советов, критики и обратной связи, которые я получал во время их разработки. Не стесняйтесь обращаться за обратной связью, пока проект ещё в процессе. Другая точка зрения может обеспечить ясность, необходимую для того, чтобы продвинуть вас вперёд.
Энтони Чжэн, художник 3D-среды и моделлер
Интервью проведеноГлорией Левин
Автор: Anthony Zheng
Материал подготовлен на основе статьи 80.lv. Перевод — Skills Up.