Использование Процедурных Генераторов При Создании Контента Для 3D-Приложений Реального Времени: Часть 2. Valley Benchmark

Бенчмарк Вэлли

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

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

Вы можете найти первую часть Здесь .

В этой части, как и в предыдущей, приведены ссылки для скачивания созданных нами исходных материалов, которые можно свободно использовать (с модификациями или без) в своих проектах, но только не продавать/распространять в чистом виде и/или как часть.

любой или библиотеки.

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

На этот раз мы поговорим о том, какие инструменты и приемы мы использовали при создании бенчмарка Valley, чтобы производить большое количество фотореалистичного контента в кратчайшие сроки.

Вы можете оценить то, чего мы достигли Здесь скачав бенчмарк бесплатно или просто посмотрев видео: Итак, при работе над этим проектом перед нами стояла задача создать максимально реалистичную сибирскую горную долину размером 8 на 8 километров с широким диапазоном масштабов создаваемых объектов (от горы до цветка на лугу) и высокий уровень детализации.

Прежде чем приступить непосредственно к производству, мы разделили весь необходимый контент по принципам подхода к его созданию:

  1. сетки и текстуры камней, деревьев, травы, цветов и т.д.
  2. пейзаж (и маски распределения по нему различных объектов)
  3. текстуры для конкретных эффектов, некоторых природных явлений и объектов
Если контент, указанный в первом пункте, создается в большинстве случаев с использованием любых обычных инструментов 3D-моделирования и текстурирования, то то, что указано в пунктах 2 и 3, требует особых подходов, в которых использовались инструменты процедурной генерации.

Так, например, программа Мировая машина использовался как специализированный инструмент для создания ландшафтов и масок распределения объектов, а программа Фильтр Кузница - для создания:

Облака рекламных щитов в эталоне Valley

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

В движке Unigine имеются инструменты для моделирования как физически правильных, динамически изменяющихся облаков (физически-объемные облака), так и создания статичных облаков нужной формы в необходимых местах (облака-билборды).

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

Настройка параметров объекта Рекламные щиты в движке Unigine

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Чтобы превратить полученный массив полигонов в облака, к нему назначается специальный материал, учитывающий освещенность от глобального источника света (солнца), а также светорассеяние.

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

Диффузная текстура фрагментов облака была создана процедурно с помощью редактора Filter Forge. Меш, в объёме которого генерируются рекламные щиты облаков (вверху) и текстура диффузного облака (внизу)

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Загрузите Clouds_variation.ffxml Мох на камняхМох на камнях в долине

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Для создания мха на камнях Unigine использует специальный материал, позволяющий объединить 2 материала, один из которых проецируется на второй с помощью маски в мировом пространстве.

Параметры материала мха

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

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

Форма фрагментов мха определяется двумя текстурами — грубой, но уникальной для всей поверхности ландшафта маской и детализированным, но повторяющимся (за счет тайлинга) альфа-каналом диффузной текстуры.

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

Все текстуры (включая карту нормалей) и маску для этого природного объекта были созданы в Filter Forge. Диффузная (вверху), нормальная (средняя), неравномерная (внизу) текстуры мха

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Скачать moss.ffxml Используя этот материал, вы также можете легко имитировать ржавчину, коррозию или плесень на предметах.

Блики объектива Грязь? Блики линз Эффект грязи в действии

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Движок Unigine имеет эффект, имитирующий подсветку объективов фотоаппаратов яркими источниками света.

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

Проще и удобнее было реализовать необходимую текстуру для этого эффекта с помощью Filter Forge, что и было сделано.

Текстура, используемая для создания эффекта грязных линз.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Скачать Lens_dirt.ffxml ПейзажСоздание больших сцен на открытом воздухе — довольно сложная задача как с точки зрения рендеринга ландшафта и множества объектов на нем в реальном времени, так и с точки зрения создания контента для таких сцен.

В Unigine имеется множество инструментов для этих целей, которые позволяют:

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

Будет полезна как наземная, так и аэрофотосъемка.

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

Рельеф в движке Unigine — это объект, который динамически меняет уровень детализации своей сетки и текстур в зависимости от степени удаленности камеры для оптимальной работы на больших дистанциях (более 40 километров).

Ландшафтный объект с динамически меняющимися деталями

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Для создания ландшафта в движке Unigine необходимо иметь следующие исходные текстуры:

  • карта высот — 16-битная текстура в оттенках серого, описывающая местность (высота каждой точки ландшафта)
  • диффузная карта — текстура, определяющая базовый цвет
  • маска материала — текстура, определяющая области детализации с использованием определенного материала (см.

    ниже).

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

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

Для создания исходных текстур, перечисленных выше, существуют специализированные программы-генераторы ландшафта.

Одной из таких программ является World Machine. World Machine, как и любой другой, не лишен недостатков, но мы выбрали его среди других (см.

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

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

Мы разделим процесс создания ландшафтных текстур на три этапа:

Для каждого этапа в World Machine создается свой график, и каждый последующий этап использует результаты расчетов предыдущего.

Конечно, World Machine довольно умная программа и при изменении параметров узла, в отличие от Filter Forge, пересчитывает только ту ветвь графа, на которую эти изменения повлияли, но при повторном открытии файла этот расчет осуществляется полностью из самое начало.

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



Создание базовых текстур ландшафта

Граф в World Machine, формирующий все основные текстуры местности.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

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

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Ближе к впадинам преобладает холмистый характер поверхности, который воссоздается за счет расширения областей вокруг гор фильтром (а в терминологии World Machine - устройством) Экспандером:

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Далее к получившимся холмам добавляются мелкие детализированные скалы — остатки гор после эрозии:

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Устройство Терраса добавляет выступы, затем делает их шумными, чтобы устранить регулярность эффекта, и ограничивается по высоте и углу наклона поверхности:

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Добавляется эрозия.

Это самое значимое устройство в World Machine, которое предназначено для моделирования процессов разрушения и смещения грунта под воздействием воды, ветра и температуры.

Без него весь ландшафт остался бы просто набором смешанного процедурного шума, далёкого от реальности.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Добавлены волнообразные смещения грунта.

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

Более детально создать и проработать этот эффект в World Machine помогает возможность просчитать результат только для заданной области ландшафта (через настройку необходимых Extents):

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

На вершинах гор добавляется снег.

В основном это осуществляется с помощью устройства «Снег», которое позволяет имитировать эффект накопления снега с учетом таких параметров, как интенсивность, количество, направление ветра и т. д.

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Результаты, полученные на этом этапе, растеризуются с помощью World Machine и сохраняются в файлы.

В результате получается карта высот, карта эрозии и карта глубины снежного покрова.

Карта высот (вверху), карта эрозии (в центре), карта глубины снежного покрова (внизу)

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark



Создание масок деталей местности

В бенчмарке Valley для детализации ландшафта использовались 4 материала, представляющие следующие типы поверхностей: Маски, определяющие видимость материалов этих поверхностей на ландшафте, также создаются в World Machine из текстур, полученных на предыдущем этапе.

Граф в World Machine, генерирующий все необходимые маски

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Скачать Terrain_masks.tmd

Снежная маска

Снежная маска на поверхности ландшафта

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

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



Маска из камней

Маска распределения камней на поверхности ландшафта.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

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



Травяная маска

Маска травы, разбросанная по поверхности ландшафта

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Для этой маски исключены высоты, с которых уже начинается снежный покров.

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

По карте эрозии получают информацию о местах сползания осадочных пород. На определенных высотах, где эта порода более активна (перекатывание и скольжение валунов), трава растет менее активно.

Все это также учитывается при создании маски распределения травы.



Маска Скал

Маска каменной поверхности на пейзаже

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Карта горных пород получается путем исключения всех остальных масок.



Создание масок распространения объектов



Маски деревьев

Маска распределения елей на поверхности ландшафта.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

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

Все маски деревьев являются взаимоисключающими, чтобы обеспечить четкое разделение лесных зон.

Небольшие пересечения происходят только на прилегающих территориях.

В результате мы получаем маски, с помощью которых можно расположить 4 вида деревьев: ель, мертвую ель, сосну, березу.



Цветочные маски

Распределение масок ромашки (вверху) и кипрея (внизу) по ландшафту.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Маски ромашки и цветущей салли создаются путем простого добавления процедурного шума к маске травы.



Маски куста

Маска распространения кустарников на ландшафте.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

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



Камни

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



Создание диффузной текстуры ландшафта

Граф в World Machine, формирующий диффузную текстуру ландшафта.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Скачать Terrain_color.tmd Цветовая текстура создается путем объединения масок, полученных на предыдущих этапах.

Разные цвета смешиваются и добавляется шум.

Так, например, добавляется два вида травы – зеленая и сухая.

В низинах преобладает зеленая трава, на вершинах холмов — сухая трава.

Чтобы сделать пейзаж под лесом визуально темнее, на него накладывается маска деревьев.

При необходимости необходимые корректировки цвета производятся в Photoshop или GIMP. Получившаяся диффузная текстура ландшафта.



Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

Расположение объектов с помощью масок.

Настройка параметров объекта MeshClutter.

Использование процедурных генераторов при создании контента для 3D-приложений реального времени: Часть 2. Valley Benchmark

После того, как все необходимые текстуры и маски получены, ландшафт сгенерирован, все необходимые материалы настроены, остается лишь распределить по нему все подготовленные объекты (деревья, камни, траву, цветы и кустарники).

Трудно даже представить, сколько времени потребуется, чтобы расставить такое огромное количество мелких (по сравнению с ландшафтом) объектов вручную.

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

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

Особенно стоит обратить внимание на то, что распределение объектов в данном случае псевдослучайное - то есть при одинаковых значениях параметров (и одинаковом сид-значении) для двух разных генераторов созданные ими объекты будут всегда находиться в одних и тех же местах.

Таким способом также достигается детерминированность получаемого результата.

выводы

Мировая машина



Преимущества

  • Кэширование результатов вычислений.

    При изменении графа узлы, на которые эти изменения не повлияли, не пересчитываются.

    Это очень удобно и экономит массу времени на создании нового контента.

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

  • Возможность тайлового рендеринга крупных текстур (тайловая сборка).

    При этом текстуры рендерятся фрагментами, что позволяет распараллелить рендеринг (используется многоядерность) и оптимально использовать занимаемую память.

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

  • Достаточный набор устройств (базовых блоков, создающих алгоритм формирования ландшафта) для реализации практически любого алгоритма построения ландшафта.

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

  • Умение точно просчитать только заданный фрагмент ландшафта.

    Экономит массу времени при работе над детализацией выбранных участков.



Недостатки

  • Огромный
Теги: #3d #Работа с 3D-графикой #photoshop #разработка игр #процедурная генерация #текстуры #unigine #процедурные текстуры #filter forge #valley тестовый #конструктор веществ #мировая машина #3D-Coat
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.