Переход на UNIGINE с Unreal Engine 4: гайд для 3D-художников +6


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

Специально для тех, кто ищет полноценный аналог Unity или Unreal Engine 4, мы продолжаем цикл статей про безболезненный переход на UNIGINE. Во втором выпуске рассмотрим миграцию с Unreal Engine 4 с точки зрения 3D-художника.

Ассеты

Как и Unreal Engine 4, UNIGINE также имеет систему управления ассетами — ресурсами проекта. Хоть в большинстве вещей они очень похожи (структура папок и файлов, ассеты глобально доступны в проекте), подход к исходным файлам отличается.

Unreal Engine 4 хранит ссылки на исходный контент (*.fbx, текстуры и т.д.), представленные файлами *.uasset в папке проекта.

В UNIGINE все импортированные файлы будут скопированы в папку data проекта.

Первым делом взглянем на окно Asset Browser (аналог окна Content Browser в UE).

Здесь расположено содержимое папки data. Как и в UE, файлы можно редактировать, используя сторонние приложения (подправить текстуру или модель) и изменения автоматически подхватятся в UNIGINE Editor.

Набор возможностей определяют редакция SDK, а также плагины движка и редактора. Community Edition сама по себе — полноценная среда разработки, а Engineering и Sim содержат дополнительные возможности для специфических требований.

  • Пакеты в UNIGINE Editor — ассеты *.upackage — позволяют удобно переносить наборы ассетов со всеми зависимостями между проектами, они импортируются в проект как обычные ассеты и распаковывают содержимое уже на месте. А дополнительные наборы контента, подобно Asset Packs в UE, в UNIGINE доступны в качестве аддонов, которые можно установить и  в SDK Browser.

  • Набор стандартных ресурсов — материалов, шейдеров, текстур — лежит в папке core (содержимое архива core.ung).

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

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

Аналогом Global Asset Picker (доступный в Unreal Engine 4 через сочетание клавиш Ctrl+P) можно считать каждый слот для ассета в параметрах объектов, позволяющий искать ассеты по имени:

Actor vs Node

В UE основной объект сцены — Actor. Каждый actor обладает иерархией компонентов, определяющих его функциональность. Есть набор стандартных actor’ов, добавление которых на сцены создает экземпляр actor’а с предустановленным набором компонентов.

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

Все ноды доступны в меню Create (Shift + ПКМ во вьюпорте):

Можно выделить следующие основные объекты для дизайна уровней:

Кучево-дождевые облака (Cumulonimbus) над террейном
Кучево-дождевые облака (Cumulonimbus) над террейном

Node Dummy — это пустая нода, которую можно использовать для группировки объектов и в логике. Пожалуй, это одна из самых часто используемых нод в проектах, знакомый хоткей Ctrl+G позволит создать новую Dummy ноду (если нет выделения) или сгруппировать выделенные ноды.

World Nodes в UNIGINE
World Nodes в UNIGINE

В окне World Nodes представлен весь контент мира. Из важных отличий от World Outliner в UE: выключение родительской ноды строго влияет на все дочерние ноды.

Прототипирование уровня

Geometry Brush — базовый инструмент для построения уровней в Unreal Engine 4, полезный для быстрого прототипирования уровней и объектов.

В UNIGINE вы можете использовать примитивы для такого рода задач. Перейдите в меню Create -> Primitives и выберите нужный тип.

Создание прототипа уровня из блоков на UNIGINE
Создание прототипа уровня из блоков на UNIGINE

Меши

Так же как в Unreal Engine 4, меш — основной графический примитив в UNIGINE.

В Unreal Engine 4 все данные, хранящиеся в FBX-модели (меши, скелетные данные, последовательности анимации, материалы и встроенные текстуры), импортируются как набор отдельных ресурсов, связанных с исходным файлом (полезно для обновления ресурсов при изменении исходной модели). Ассеты Static Mesh можно редактировать в отдельном окне.

Настройка ассета Static Mesh в UE
Настройка ассета Static Mesh в UE

И меши, и материалы только для чтения отображаются как компоненты ассета.

В UNIGINE после импорта в проект, FBX-ассет становится доступен в Asset Browser и представляет собой контейнер для всех мешей, которые он хранит. Файл при импорте копируется в папку data проекта и не связан с исходным файлом. Доступ к содержимому можно получить двойным кликом по ассету (или ПКМ -> Open):

Меши внутри FBX-ассета в UNIGINE
Меши внутри FBX-ассета в UNIGINE

Каждый отдельный объект в FBX-модели представлен, как ассет в формате .mesh. При необходимости отдельные объекты можно объединить в один — настройки импорта моделей достаточно гибкие. Материалы и текстуры (при их наличии в сцене и при условии, что их импорт включен) располагаются в папке рядом с ассетом.

Так же, как и в Unreal Editor, достаточно просто перетащить FBX-ассет во вьюпорт, чтобы расположить объект на сцене. В UNIGINE это добавит ноду Object Mesh Static в иерархию мира для каждого отдельного меша — аналогично Actor с компонентами StaticMeshComponent в UE.

Ноды группы Object представляют собой основные строительные блоки для виртуального мира. Например, Static Mesh представляет неизменяемую геометрию, Dynamic Mesh для деформируемой геометрии (из кода или при помощи физики).

Схожие параметры меша в UE и UNIGINE
Схожие параметры меша в UE и UNIGINE

Здесь в игру вступают поверхности (Surfaces). UNIGINE разбивает исходную сетку на группы полигонов в соответствии с назначенным материалом (при моделировании в 3D-пакете) — поверхности. Это используется при оптимизации вызовов отрисовки и позволяет настраивать параметры видимости и освещения для каждой поверхности отдельно. Чтобы использовать разные материалы (прозрачный/непрозрачный, блестящий металл / человеческая кожа) на разных частях объекта нужно разделить меш на поверхности (т.е. назначить разные материалы полигонам в 3D-редакторе). Но если требуется, чтобы части геометрии двигались по отдельности (например, крутящиеся колеса автомобиля), то они должны быть представлены отдельными мешами.

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

Уровни детализации (LODs)

В Unreal Editor настройка LOD для Static Mesh ассета производится в окне Static Mesh Editor. Обычно используются несколько файлов FBX для всех LOD и указывается размер экрана для каждого из них. Активный LOD определяется порогом, основанным на отношении высоты экранного пространства объекта к общей высоте экрана.

В UNIGINE уровни детализации представлены поверхностями с настройками видимости на основе расстояний от камеры — более низкоуровневым образом, чтобы сделать возможной тонкую настройку. Можно выбрать минимальное и максимальное расстояние видимости от камеры для каждой поверхности. Для плавного переключения между лодами (Cross Fading) надо установить минимальную и максимальную дистанцию проявления (Minimum Fade/Maximum Fade).

Эти параметры поддерживают значения -inf и inf (-бесконечность и +бесконечность) для обозначения минимального и максимального возможного значения, чтобы сделать, например, последний лод видимым на сколь угодно большом расстоянии от камеры.

UNIGINE предлагает автоматическую генерацию уровней детализации каждого меша с возможностью автосглаживания нормалей при импорте модели.

Если же нужен полный контроль над геометрией лодов, можно воспользоваться опцией Combine By Postfixes и объединить объекты из импортируемой FBX-сцены по постфиксам в их именах: например, меши car_lod_0, car_lod_1 и car_lod_2 превратятся в поверхности с выбранными дистанциями видимости. Подробности читайте в руководстве по импорту FBX.

Скелетная анимация

Модели FBX с анимацией костей содержат анимационные клипы. В UNIGINE такие клипы представлены ассетами .anim, отдельный ассет на каждый клип.

Ассеты анимации в UE и в UNIGINE
Ассеты анимации в UE и в UNIGINE

UNIGINE импортирует только скелетную анимацию. Объект Skinned Mesh является аналогом Skeletal Mesh Actor из Unreal Engine 4 для обработки скелетной анимации: помимо меша в нем можно указать клип для проигрывания анимации. Для создания синематиков и произвольной анимации любых объектов и свойств в UNIGINE используется инструмент Tracker.

В UNIGINE нет концепции скелета как особого типа ассетов. Система анимации со скинами ориентирована на работу со слоями анимации: вы можете настроить несколько слоев с различными анимационными клипами и выполнять смешивание между ними с помощью программного API.

Пример анимации с использованием двух слоев
Пример анимации с использованием двух слоев

Дополнительные сведения см. в следующих статьях:

Morph Targets

Объект Skinned Mesh также поддерживает морфинг. Если включен Import Morph Targets, из FBX будут импортированы морфинговые объекты для каждой поверхности.

В UNIGINE можно назначить произвольное количество слоев морфинга из имеющихся морфинговых объектов и управлять их смешиванием с помощью методов API.

Материалы и шейдеры

Как и в Unreal Engine 4, шейдинг в UNIGINE основан на физически-корректных свойствах материалов (PBR). Хотя для тех, кто привык управлять зеркальными бликами материалов по-старинке, в UNIGINE доступен Specular Workflow.

В Unreal Engine 4 вы наверняка привыкли создавать и редактировать материалы с помощью нодового редактора материалов. Каждый узел представляет собой фрагмент кода HLSL, так что, по сути, таким образом собирается шейдер. Чтобы избежать трудоемкой перестройки материала при настройке параметров, можно использовать Material Instances (экземпляры материала).

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

Материалы в конвейере рендеринга UNIGINE
Материалы в конвейере рендеринга UNIGINE

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

Все материалы перечислены в окне Materials (меню: Windows -> Materials Hierarchy). Базовые материалы находятся на верхнем уровне.

mesh_base — это базовый PBR-материал в UNIGINE с внушительным списком стандартных эффектов и настроек, используемый для мешей.

Из основных параметров у него:

  • Albedo,

  • Metalness,

  • Roughness,

  • Specular (для тонкой настройки бликов у диэлектриков),

  • Microfiber (для симуляции ворсистых поверхностей).

Также важен пресет прозрачности материала (Transparency Preset), так как он определяет не только режим прозрачности для материала, но и этап рендеринга кадра для него. Сравним идентичные режимы с Blend Mode в UE:

  • BLEND_Opaque — Opaque;

  • BLEND_Masked — Alpha Test;

  • BLEND_Translucent — Alpha Blend;

  • BLEND_Additive — Additive;

  • BLEND_Modulate — Multiplicative.

В UE три последних режима смешивания не совместимы с динамическим освещением. В UNIGINE поверхности с материалами в этих режимах будут отрендерены при помощи Forward Shading.

От базовых материалов мы наследуем Пользовательские материалы, переопределяя их некоторые параметры. Создавая новый материал в Asset Browser, мы выбираем базовый материал, тем самым определяем тип совместимых объектов.

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

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

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

См. также:

Текстуры

UNIGINE поддерживает такие форматы текстур: 2D, 3D, Cubemap и 2D Array, есть также параметры сжатия, они представлены пресетами настроек. Есть пресеты практически для всех применений текстур в проекте: PBR-текстуры, маски, карты высот и так далее. Важно использовать правильные пресеты для текстур, так как это гарантирует самое подходящее сжатие и корректные настройки импорта.

Для удобства пресеты автоматически применяются на основе постфиксов имен текстур: файл mytexture_alb.png будет распознан как текстура albedo, а mynormal_c.hdr — как cubemap.

UNIGINE также позволяет импортировать и использовать текстуры «как есть», без изменений. В некоторых случаях сжатие текстур только навредит —  например, при использовании текстур вершинной анимации или пользовательских hdr-карт — поэтому можно пометить эту текстуру как Unchanged.

Пара слов о подготовке текстур. Текстура Shading для mesh_base должна иметь следующий формат каналов:

  • R — Metalness;

  • G — Roughness;

  • B — Specular (при необходимости);

  • A — Microfiber (при необходимости).

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

Карты нормалей в UNIGINE - Y- (DirectX-style normal) — можно использовать текстуры напрямую из проектов на UE. UNIGINE использует двухканальные карты нормалей (третья координата вектора нормалей вычисляется), а третий канал при необходимости можно использовать для карты прозрачности или для другой информации.

UNIGINE использует собственный формат представления пространства касательных (Tangent Space), используемого для Normal Mapping, не полностью совместимый с Unreal Engine 4. Обычно Tangent Space можно импортировать прямо из FBX, но надо быть осторожным — разные пакеты для моделирования используют разные Tangent Space. В общем случае 3D художники дают такие рекомендации для запекания карт нормалей:

  • Стараться делать разрыв островов UV-развертки и ребро без сглаживания (Hard Edge) в местах, где углы соприкосновения полигонов острее 45 градусов;

  • Запекать карты нормалей всегда на триангулированном меше, чтобы предотвратить искажения нормалей в будущем, когда триангуляция изменится при импорте;

  • Соблюдать отступы между островами UV-развертки.

Все это позволит не волноваться о корректности запекания нормалей в любом ПО. При этом нет нужды сохранять Tangent Space при экспорте модели в FBX — UNIGINE автоматически рассчитает его при импорте модели.

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

Общие настройки текстур (качество и разрешение) доступны в настройках рендеринга.

Освещение и окружение

Так же, как и в Unreal Engine 4, освещение в UNIGINE можно рассматривать как в режиме реального времени, так и предварительно просчитанное. Набор объектов и инструментов позволяет использовать оба подхода.

Источники света

В Unreal Engine 4 источники света представлены несколькими actor’ами Light. UNIGINE также предоставляет несколько типов источников света, подобных тем, что используются в Unreal Engine 4.

Тени

В Unreal Engine 4 источники света могут быть статичными (Static), стационарными (Stationary) и подвижными (Moveable), actor’ы имеют такие же режимы. Тени от подвижных actor’ов, освещенных подвижными источниками света, строятся динамически, при помощи техники Shadow Mapping. Когда дело доходит до запекания света (включая тени), рабочий процесс Unreal Engine 4 подразумевает использование карт освещения (Lightmaps).

В UNIGINE рендеринг и динамических, и кэшированных (предрассчитанных) теней реализован с использованием Shadow Mapping. Все источники света могут быть в динамическом (Dynamic) или статическом (Static) режиме. Это определяет, вычисляются ли карты теней каждый кадр или сохраняются в текстуре, что значительно сокращает количество число полигонов для отрисовки. Очевидно, что движущиеся источники света должны быть динамическими — мы не можем предварительно вычислить тени, отбрасываемые движущимся источником света.

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

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

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

Источник света World, как и источник света Directional из UE, использует сложную технику рендеринга теней (Parallel-Split Shadow Mapping) для обработки теней на больших расстояниях в открытых пространствах. В параметрах каждого такого источника света можно настроить размеры теневых каскадов, используемых для теней на разном расстоянии.

Контактные тени (Contact Shadows) известны в UNIGINE как Screen-Space Shadows. Настройки для них доступны для каждого источника света.

Light Functions

Для фильтрации интенсивности света в Unreal Engine 4 есть Light Functions.

В UNIGINE вы можете использовать как произвольную Diffuse- или Albedo-текстуру, так и IES-файл в параметре Texture источника света. Для всенаправленных источников света (Light Omni) можно использовать кубическую карту.

Окружение

В Unreal Engine 4 атмосферное освещение обычно представлено набором actor’ов: SkyLight, SkyAtmosphere, AtmosphericFog и DirectionalLight.

В UNIGINE все настройки освещения окружения доступны в разделе >Render Settings (выберите Window -> Settings в главном меню, затем перейдите в Runtime -> Render -> Environment).

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

Настройки UNIGINE Environment
Настройки UNIGINE Environment

Чтобы добиться физически-корректной визуализации атмосферы, система среды UNIGINE имитирует рассеяние света в атмосфере путем интерполяции подготовленных LUT (Look-Up Textures, текстур поиска). Больше деталей в статье про освещение.

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

Если вам нужно изменить отражения локально, например, в помещении, используйте Environment Probe с уникальной кубической картой.

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

Туман

Для симуляции тумана в Unreal Engine 4 вы привыкли использовать разные типы actor’ов, такие как AtmosphericFog, ExponentialHeightFog с поддержкой Volumetric Fog.

Для той же цели в UNIGINE вы можете использовать Environment Haze в режиме Solid или Scattering (для более реалистичного взаимодействия с окружением), а для особых эффектов используйте волюметрики (Volumetric Objects) — они отлично подходят для имитации световых лучей (Light Beam) и объемного света (Light Shafts), тумана (Fog) и фигурных облаков (Shaped Clouds).

Глобальное освещение (Global Illumination)

Unreal Engine 4 предоставляет набор передовых систем, моделирующих непрямое освещение, что значительно улучшает реалистичность сцены. Как и UNIGINE. В этом разделе перечислены методы GI в Unreal Engine 4 и способы получения таких же или похожих результатов в UNIGINE.

Карты освещения (Lightmaps)

Unreal Engine 4 предоставляет систему Lightmass, позволяющую предварительно рассчитать (запечь) яркость поверхностей в сцене и сохранить результат в карте освещения для последующего использования во время выполнения. Для этого требуются неперекрывающиеся UV-развертки, которые автоматически генерируются для статических мешей при импорте.

В UNIGINE карты освещения также поддерживаются и запекаются с помощью встроенного инструмента GPU Lightmapper. При импорте FBX-моделей UNIGINE предлагает выбрать UV-канал для карт освещения и при необходимости совершить автоматическую развертку для этого канала.

UNIGINE поддерживает еще одно решение для статического Global Illumination — GI на основе вокселей (Voxel Global Illumination).

Объекты Voxel Probe представляют собой объем из вокселей фиксированного размера, каждый из которых хранит предварительно рассчитанное непрямое освещение, такой объем не только освещает геометрию внутри него, но и предоставляет диффузные (размытые) отражения и симуляцию каустики. Одно из преимуществ такого подхода — нет необходимости в UV-координатах, любая геометрия без проблем будет корректно освещена. Также этот подход позволяет освещать динамические объекты, что отлично комбинируется с картами освещения для статического окружения.

Комбинация карт освещения и воксельного GI
Комбинация карт освещения и воксельного GI

Подобно использованию Lightmass Importance Volume в UE4, в UNIGINE вы можете сделать вставки Voxel Probes с более плотной сеткой, чтобы запечь более детализированное освещение там, где это необходимо.

Что касается освещения в реальном времени, Unreal Engine 4 поддерживает решение SSGI, обеспечивающее симуляцию GI в реальном времени в пространстве экрана. Для таких случаев UNIGINE предлагает технологию SSRTGI (Screen-Space Ray-Traced Global Illumination, глобальное освещение в экранном пространстве на основе трассировки лучей), значительно улучшающую общую связность сцены.

Предрассчитанное рассеянное затенение (Baked Ambient Occlusion)

Система Lightmass также способна запекать Ambient Occlusion, часть предварительно рассчитанного освещения, которое затемняет складки, отверстия и поверхности, расположенные близко друг к другу.

UNIGINE не имеет встроенного инструмента для запекания АО, однако, позволяет применить дополнительную текстуру рассеянного затенения, сгенерированную с помощью стороннего ПО, в настройках материалов mesh_base и пользовательских материалов.

Объемные карты освещения (Volumetric Lightmaps)

Объемные карты освещения в UE (Volumetric Lightmaps) хранят предварительно рассчитанное освещение во всех точках своего объема, что очень близко к концепту Voxel Probe в UNIGINE.

Volumetric Lightmap в Unreal Editor
Volumetric Lightmap в Unreal Editor

Поскольку объект Voxel Probe хранит информацию о запеченном освещении в его объеме, он будет освещать и динамические объекты, которые движутся в пределах его границ. Параметр Bake Internal Volume позволяет выбрать качество и время, необходимые для запекания GI для пустых вокселей (т. е. вокселей, которые не охватывают какую-либо геометрию).

Voxel-based GI на движущихся объектах в UNIGINE
Voxel-based GI на движущихся объектах в UNIGINE

Для предварительного просмотра окружающего освещения в окне просмотра переключите режим Rendering Debug на Indirect Lighting.

Захват отражения (Reflection Capture)

Практически полным аналогом actor’ов Sphere Reflection Capture и Box Reflection Capture из Unreal Engine 4 является Environment Probe, хранящий кубическую карту для отображения на отражающих поверхностях.

Отражающая сфера, помещенная внутрь Environment Probe
Отражающая сфера, помещенная внутрь Environment Probe

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

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

  • Static Mode. Environment Probe использует предварительно запеченную кубическую карту, полученную с помощью инструмента Bake Lighting. Этот режим подходит в основном для статического окружения.

  • Custom Static Mode. Статический режим с назначенной пользовательской кубической картой.

Возможна прямоугольная и сферическая проекция кубических карт:

Типы проекций, показанные в комнате прямоугольной формы
Типы проекций, показанные в комнате прямоугольной формы

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

Parallax = 0
Parallax = 0
Parallax = 1
Parallax = 1

Environment Probe можно использовать не только для отражений, но и для окружающего освещения, включив опцию Ambient Lighting. В связке с динамическим режимом это позволит добиться симуляции простого глобального освещения.

Для более реалистичного статического глобального освещения лучше подойдут карты освещения и глобальное освещение на основе вокселей.

Планарное отражение (Planar Reflection)

Planar Reflection actor обеспечивает отражения на плоских поверхностях в реальном времени в Unreal Engine 4. Про полный аналог в UNIGINE можно узнать подробнее в статье Planar Reflection Probe.

Отражения в экранном пространстве (Screen Space Reflections)

Screen-Space Reflections также являются частью UNIGINE. Глобальные настройки SSR позволяют провести возможной тонкую настройку рейтрейсинга в экранном пространстве.

Встроенная оптимизация

Подгрузка графических данных (Levels and Texture Streaming)

Unreal Engine 4 поддерживает потоковую подгрузку уровней: несколько карт, представляющих собой небольшие куски огромного мира, будут подгружаться при приближении к ним игрока. Такие уровни перечислены в окне Levels.

Также Unreal Engine 4 поддерживает подгрузку текстур (Texture Streaming) на основе MIP-уровней текстур. Эта система уменьшает общий объем памяти, занятый текстурами, загружая только MIP-карты, необходимые для рендеринга текущего положения камеры в сцене.

В UNIGINE подгрузка контента является частью системы асинхронной загрузки данных (Asynchronous Data Streaming). Эта система предназначена для уменьшения задержек, вызванных загрузкой графических ресурсов, таких как меши и текстуры: загружаются только те ресурсы, которые необходимы для рендеринга текущего вида камеры; и выгружаются, как только другие ресурсы требуют загрузки в видеопамять, чтобы не превысить заданные лимиты памяти. Загрузка разделена по времени, чтобы избежать притормаживаний при загрузке мира.

UNIGINE использует предварительно кэшированные минимизированные копии текстур — Texture Cache. При загрузке мира кэш текстур загружается первым, предоставляя предварительный контент для сцены, в то время как полноразмерные текстуры загружаются асинхронно. Опции для тонкой настройки доступны в разделе Streaming окна Settings:

Отсечение по видимости (Occlusion Culling)

В Unreal Engine 4, помимо всем известной техники отсечения Frustum Culling (отсечение полигонов и объектов по пирамиде видимости камеры), есть еще несколько. Практически все они имеют аналоги в UNIGINE. Эти методы значительно сокращают количество визуализируемых полигонов.

Предварительно вычисленная статическая видимость в UE4
Предварительно вычисленная статическая видимость в UE4

В UNIGINE техника Occlusion Culling представлена такими методами:

  • Cull Distance Volumes можно заменить нодами Switcher, такие объекты автоматически переключаются между дочерними нодами на основе расстояния.

  • Precomputed Static Visibility. Для пользователей Unreal Engine 4 привычно определять объемы видимости и предварительно вычислять «ячейки видимости».

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

С Occluder
С Occluder
Без Occluder
Без Occluder
  • Техника Hardware Occlusion Queries позволяет исключить объекты из рендеринга, если они скрыты другой геометрией, автоматически. Этот подход имеет смысл использовать только для объектов с тяжелыми шейдерами, так как иначе особого преимущества не будет.

Пакетная обработка вызовов отрисовки (Draw Call Batching)

В Unreal Engine 4 есть пакетная отрисовка мешей для мобильных платформ, также рендер-программисты должны быть знакомы с пайплайном отрисовки мешей (Mesh Drawing Pipeline), позволяющим эффективно управлять вызовами отрисовки и группировки экземпляров мешей. Более популярный подход в Unreal Engine 4 к такой оптимизации — инструмент Proxy Geometry как способ скомбинировать статические меши и используемые ими материалы.

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

UNIGINE предоставляет дополнительные объекты для оптимизации сложных сцен:

  • Mesh Clutter — это объект, используемый для произвольного размещения большого количества одинаковых мешей по всей сцене. Он подходит для имитации растительности, сохраняя при этом высокую производительность.

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

Дополнительные сведения об использовании этих объектов см. в статье «Работа с большим количеством объектов».

Билборды

В Unreal Engine 4 используется компонент BillboardComponent — 2D-текстура, ориентированная всегда на камеру, которую можно использовать для имитации эффектов света (например, дымка в свете солнца).

UNIGINE также поддерживает билборды. В UNIGINE билборд — это тоже прямоугольная плоскость, которая всегда обращена к камере, поэтому она способна имитировать различные плоские эффекты или объекты, едва видные издалека.

Сэмпл Billboards в UNIGINE
Сэмпл Billboards в UNIGINE

Imposter Sprites

Imposter Sprites в Unreal Engine 4 позволяют заменить сложный меш набором изображений, видимых с разных ракурсов. Создать такие спрайты можно с помощью набора инструментов Render To Texture Blueprint.

В UNIGINE подобные объекты реализованы через билборды и именуются почти так же — импосторами (Impostors). Есть встроенный инструмент для создания импосторов — Impostors Creator. Он автоматически создает серию снимков объекта с сохранением шейдинга и объединяет их в один билборд. Широкий набор настроек позволяет «запечатлевать» только нужные текстуры, включая текстуры глубины и прозрачности для более качественного затенения и интерполяции между соседними «кадрами».

Такой объект можно использовать как самый низкодетальный LOD для меша на расстоянии.

Каналы (Channels)

В Unreal Engine 4 используются каналы для определения групп игровых объектов, доступных или недоступных для источников света, а также для выборочных физических столкновений.

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

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

Например, вы можете отфильтровать определенные объекты (например, всплывающие подсказки) для отражений, настроив маски отражения (Reflection Viewport Masks):

Более подробная информация и примеры использования:

Инструменты оптимизации

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

  • Performance Profiler, аналог инструмента Unreal Engine 4 Profiler, отображает данные о производительности на временной шкале в нескольких режимах.

  • Microprofile, расширенный профилировщик CPU/GPU с поддержкой проверки для каждого кадра.

  • Texture Profiler, инструмент, помогающий проверить потребление памяти текстурами.

* * *

На этом все. В третьем выпуске разберем все важные моменты по вопросу миграции с Unreal Engine 4 с точки зрения программистов.

Миграцию с Unreal Engine 5 рассмотрим с следующем цикле статей.

Напоминаем, что скачать бесплатную версию UNIGINE 2 Community можно, заполнив форму на нашем сайте.

Все комплектации UNIGINE:

  • Community — базовая версия для любителей и независимых разработчиков. Достаточна для разработки видеоигр большинства популярных жанров (включая VR).

  • Engineering — расширенная, специализированная версия. Включает множество заготовок для инженерных задач.

  • Sim — максимальная версия платформы под масштабные проекты (размеров планеты и даже больше) с готовыми механизмами симуляции.

Подробнее о комплектациях и ценах




Комментарии (5):

  1. loginmen
    /#24402548 / +1

    Unreal Engine 4 хранит ссылки на исходный контент (*.fbx, текстуры и т.д.), представленные файлами *.uasset в папке проекта.

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

    В UE основной объект сцены — Actor. Каждый actor обладает иерархией компонентов, определяющих его функциональность. Есть набор стандартных actor’ов, добавление которых на сцены создает экземпляр actor’а с предустановленным набором компонентов.

    Тоже можно поспорить. Actor (или если быть точным то AActor) это пустой компонент, который можно разместить (или заспавнить) на сцене, все остальные объекты от него наследуются если их надо поместить на сцену. Все объекты (включая Actor) в движке наследуются от UObject.

    На все ноды можно назначить C# (или C++) компонент, чтобы применить программную логику или расширить базовую функциональность нод.

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

    В Unreal Engine 4 источники света представлены несколькими actor’ами Light.

    ...

    В Unreal Engine 4 атмосферное освещение обычно представлено набором actor’ов

    ...

    Для симуляции тумана в Unreal Engine 4 вы привыкли использовать разные типы actor’ов

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

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

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

    Ни слова про InstancedStaticMesh (как компонет), про блендинг анимаций, дерево переходов (State Machines).

    Еще хотелось бы услышать про систему коллизий, например для UE надо создавать геометрию с префиксами UCX UBX UCP USP для разных типов, либо можно использовать полную модель как простую. Еще можно в движке создать (но упрощенно). Для меня создание коллизий это одна из базовых вещей которые я хочу узнать о движке.

    • Unigine
      /#24402710

      Спасибо за заметки, обязательно учтем для следующего цикла.

    • xXxVano
      /#24403672

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

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


      Никто их акторами не называет. Actor это пустой базовый класс, как уже писал

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

      • loginmen
        /#24404808

        Конечно же называют.

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

        • xXxVano
          /#24404932

          А как тогда их называть? Я вот ссылку на официальную документация скинул и там в каждом предложении:


          An Actor is any object that can be placed into a Level, such as a camera, Static Mesh, or player start location. Actors support 3D transformations such as translation, rotation, and scaling

          Даже отдельный блок есть про "Working with Actors"