Меши, материалы, шейдеры, освещение, оптимизация и другое.
Специально для тех, кто ищет полноценный аналог Unity или Unreal Engine, мы продолжаем цикл статей про безболезненный переход на UNIGINE с зарубежных движков. Во втором выпуске рассмотрим миграцию с Unity с точки зрения 3D-художника.
Ассеты
Система ассетов в UNIGINE очень похожа на аналогичную в Unity. Первым делом взглянем на окно Asset Browser (аналог окна Project в Unity).
Здесь расположено содержимое папки data — все ресурсы проекта. Именно сюда копируются текстуры, модели и другие ассеты при импорте. Как и в Unity, ассеты можно обновлять сторонними приложениями (подправить текстуру или модель) и изменения автоматически подхватятся в UNIGINE Editor. Здесь нет привычных Packages, как и менеджера пакетов — набор возможностей определяют редакция SDK, а также плагины движка и редактора. Community Edition сама по себе — полноценная среда разработки, а Engineering и Sim содержат дополнительные возможности для специфических требований.
Пакеты в UNIGINE Editor — ассеты *.upackage — позволяют удобно переносить наборы ассетов со всеми зависимостями между проектами, они импортируются в проект как обычные ассеты и распаковывают содержимое уже на месте. А дополнительные наборы контента в UNIGINE доступны в качестве аддонов в SDK Browser.
Набор стандартных ресурсов — материалов, шейдеров, текстур — лежит в папке core (содержимое архива core.ung).
configs — текстовые файлы конфигурации проекта, здесь, например, можно установить мир, запускаемый по умолчанию.
Файловую систему можно расширить при помощи точек монтирования, в том числе можно создать общее сетевое хранилище ассетов и использовать всей командой.
Компоненты vs Ноды
В Unity основной объект сцены — GameObject — по своей сути просто точка в пространстве сцены с трансформацией. Компонентный подход, принятый в Unity, подразумевает, что любую функциональность GameObject определяют компоненты, назначенные на него, независимо от того, стандартные они или нет.
В UNIGINE подход к элементам мира более строгий. Все ноды имеют свой тип и они поделены на группы: есть объекты, источники освещения, декали, объекты для дизайна уровней и так далее. На все ноды можно назначить C# (или C++) компонент, чтобы применить программную логику или расширить базовую функциональность нод.
Все ноды доступны в меню Create (Shift + ПКМ во вьюпорте):
Node Dummy аналогична пустому GameObject, который можно использовать для группировки объектов и в логике. Пожалуй, это одна из самых часто используемых нод в проектах, поэтому стоит запомнить хоткей Ctrl+G, который создает новую ноду Dummy (если нет выделения) или группирует выделенные ноды.
Многие объекты для дизайна уровней (некоторые из них доступны в Unity в URP/HDRP либо в пакетах сторонних разработчиков), есть в UNIGINE из коробки:
В окне World Nodes представлен весь контент мира. Из важных отличий от Unity: отображается контент только текущего загруженного мира, а также выключение родительской ноды строго влияет на все дочерние ноды.
Меши
Так же как в Unity, меш — основной графический примитив в UNIGINE.
Можно использовать FBX-модели из проектов на Unity без изменения масштабирования — 1 юнит в UNIGINE также равен 1 метру.
Но в UNIGINE правосторонняя система координат: ось Z+ направлена вверх, а ось Y+ смотрит вперед. Если важно, чтобы модель имела правильную ориентацию по умолчанию, это необходимо иметь в виду при экспорте геометрии из 3D пакетов. Рекомендации к самым популярным пакетам есть в нашей документации.
После импорта в проект, FBX-ассет становится доступен в Asset Browser и представляет собой контейнер для всех мешей, которые он хранит.
В Unity Editor для доступа к содержимому FBX-ассета используется кнопка со стрелкой, расположенная рядом с ним:
В UNIGINE можно сделать то же самое двойным кликом по ассету:
Каждая отдельная геометрия в FBX-модели представлена исполняемым ассетом в формате .mesh. При необходимости отдельные объекты можно объединить в один, настройки импорта моделей достаточно гибкие. Материалы и текстуры (при их наличии в сцене и при условии, что их импорт включен) располагаются в папке рядом с ассетом.
Так же, как и в редакторе Unity, достаточно просто перетащить FBX-ассет во вьюпорт, чтобы расположить объект на сцене. В UNIGINE это добавит ноду Object Mesh Static в иерархию мира для каждого отдельного меша — аналогично GameObject с компонентами Mesh Filter и Mesh Renderer в Unity.
Ноды группы Object представляют собой основные строительные блоки для виртуального мира. Например, Static Mesh представляет сетки, у которых не будет изменяться геометрия, Dynamic Mesh для деформируемой геометрии (из кода или при помощи физики).
Здесь в игру вступают поверхности (Surfaces). UNIGINE разбивает исходную сетку на группы полигонов в соответствии с назначенным материалом (при моделировании в 3D-пакете) — поверхности. Это используется при оптимизации вызовов отрисовки и позволяет настраивать параметры видимости и освещения для каждой поверхности отдельно. А чтобы использовать разные материалы (прозрачный/непрозрачный, блестящий металл / человеческая кожа) на разных частях объекта нужно разделить меш на поверхности (т.е. назначить разные материалы полигонам в 3D-редакторе). Но если требуется, чтобы части геометрии двигались по отдельности (например, крутящиеся колеса автомобиля), то они должны быть представлены отдельными мешами.
Для удобства поверхности можно организовывать в иерархию и отключать.
Уровни детализации (LODs)
В Unity компонент LOD Group отвечает за работу с несколькими уровнями детализации геометрии. Активный 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.
Анимация
Unity поддерживает как скелетную анимацию, так и анимацию основных свойств объектов по ключевым кадрам.
Модели FBX с анимацией костей содержат анимационные клипы при импорте. В UNIGINE такие клипы представлены ассетами .anim, отдельный ассет на каждый клип.
UNIGINE импортирует только скелетную анимацию. Объект Skinned Mesh является аналогом компонента Unity Skinned Mesh Renderer для обработки скелетной анимации: помимо меша в нем можно указать клип для проигрывания анимации. Для создания синематиков и произвольной анимации любых объектов и свойств в UNIGINE используется инструмент Tracker.
Unity предоставляет систему анимации Mecanim с поддержкой конечного автомата, управляющего состояниями анимации и переходами между ними.
Система скелетной анимации в UNIGINE основывается на работе со слоями анимации: вы можете настроить несколько слоев с различными клипами (как на всю модель, так и на ее части) и выполнять смешивание между ними с помощью программного API.
Дополнительные сведения см. в следующих статьях:
Справочник по API класса ObjectMeshSkinned
Раздел анимации сэмплов на C#
Блендшейпы (BlendShapes)
Точно так же объект Mesh Skinned поддерживает морфинг. Если включен Import Morph Targets, из FBX будут импортированы морфинговые объекты для каждой поверхности.
В Unity компонент Skinned Mesh Renderer предоставлет доступ к блендшейпам в параметрах:
В UNIGINE можно назначить произвольное количество слоев морфинга из имеющихся морфинговых объектов и управлять их смешиванием с помощью методов API.
Материалы и шейдеры
Как и в Unity, шейдинг в UNIGINE основан на физически-корректных свойствах материалов (PBR). Хотя для тех, кто привык управлять зеркальными бликами материалов по-старинке, в UNIGINE доступен Specular Workflow, аналогично шейдеру Standard (Specular setup) в Unity.
В Unity материалы реализуют определенный выбранный шейдер, в зависимости от совместимости этого шейдера к типу компонента Renderer. Например, для Mesh Renderer используются материалы, реализующие стандартный физически-корректный шейдер поверхности (или Lit в URP/HDRP).
В UNIGINE система материалов состоит из базовых материалов и унаследованных от них пользовательских материалов.
Базовый материал — это нередактируемый набор параметров и текстур, передаваемых фрагментным, вершинным и геометрическим шейдерам в нескольких проходах (пассах) при рендеринге. Базовый материал можно использовать только для нод или поверхностей определенного типа. Для всех типов нод в UNIGINE есть готовая библиотека базовых материалов и стандартных шейдеров для симуляции практически любых материалов реального мира.
Все материалы перечислены в окне Materials (меню: Windows -> Materials Hierarchy). Базовые материалы находятся на верхнем уровне.
mesh_base — это базовый PBR-материал в UNIGINE с внушительным списком стандартных эффектов и настроек, используемый для мешей.
Из основных параметров у него:
Albedo,
Metalness,
Roughness (шероховатость поверхности вместо Smoothness в Unity),
Specular (для тонкой настройки бликов у диэлектриков),
Microfiber (для симуляции ворсистых поверхностей).
Также важен пресет прозрачности материала (Transparency Preset), так как он определяет не только режим прозрачности для материала, но и этап рендеринга кадра для него. Сравним идентичные режимы с Rendering Mode в Unity:
Opaque — Opaque;
Cutout — Alpha Test;
Transparent — Alpha Blend.
От базовых материалов мы наследуем Пользовательские материалы, переопределяя их некоторые параметры. Создавая новый материал в Asset Browser, мы выбираем базовый материал, тем самым определяем тип совместимых объектов.
Все материалы могут формировать иерархию для удобства: меняя параметры родительского материала, можно изменить сразу целую ветвь всех дочерних материалов, только переопределенные параметры у «детей» остаются прежними.
Это очень удобно в больших проектах, когда художник подготавливает базовый материал для определенного типа поверхности (скажем, дерево или крашеный металл), а затем от него наследуются новые материалы, с небольшими изменениями подгоняемые под объекты.
Свой базовый материал со сложными эффектами для мешей и декалей можно собрать с помощью визуального редактора материалов. В отличие от Unity Shader Graph, на выходе мы получаем не шейдер, а материал. Здесь нет мастер-стека с Vertex- и Fragment-контекстами, главным узлом является Material, который включает в себя параметры для вершинного и фрагментного шейдеров. Знакомство с возможностями можно начать с примеров графов материалов.
См. также:
Видеоурок: материалы
Сэмплы материалов.
Текстуры
UNIGINE поддерживает такие же форматы текстур, как и Unity: 2D, 3D, Cubemap и 2D Array, но типы текстур (представленные в UNIGINE пресетами настроек) отличаются. Есть пресеты практически для всех применений текстур в проекте: 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). Если брать текстуры напрямую из проектов на Unity, где используются Y+ (OpenGL-style) карты нормалей, можно воспользоваться флагом Invert G Channel для удобства. UNIGINE использует двухканальные карты нормалей (третья координата вектора нормалей вычисляется), а третий канал при необходимости можно использовать для карты прозрачности или для другой информации.
UNIGINE использует собственный формат представления пространства касательных (Tangent Space), используемого для Normal Mapping, не полностью совместимый с Unity. Обычно Tangent Space можно импортировать прямо из FBX, но надо быть осторожным — разные пакеты для моделирования используют разные Tangent Space. В общем случае 3D художники дают такие рекомендации для запекания карт нормалей:
Стараться делать разрыв островов UV-развертки и ребро без сглаживания (Hard Edge) в местах, где углы соприкосновения полигонов острее 45 градусов;
Запекать карты нормалей всегда на триангулированном меше, чтобы предотвратить искажения нормалей в будущем, когда триангуляция изменится при импорте;
Соблюдать отступы между островами UV-развертки.
Все это позволит не волноваться о корректности запекания нормалей в любом ПО. При этом нет нужды сохранять Tangent Space при экспорте модели в FBX — UNIGINE автоматически рассчитает его при импорте модели.
Также настройки ограничения текстур по осям (клампинг) и флаг выключения анизотропной фильтрации доступны для каждой назначенной текстуры в параметрах материала.
Общие настройки текстур (качество и разрешение) доступны в настройках рендеринга.
Освещение и окружение
Так же, как и в Unity, в UNIGINE есть как динамическое (в режиме реального времени), так и статическое (предварительно просчитанное) освещение. Набор инструментов позволяет комбинировать оба подхода.
Источники освещения
В Unity источники света представлены компонентом Light. UNIGINE предоставляет несколько типов источников света, подобных тем, что используются в Unity.
Тени
В Unity источники света могут находиться в режимах Realtime (реального времени), Mixed (смешанный) и Baked (запеченные), а также отбрасывают тени в реальном времени по умолчанию (при помощи популярной техники Shadow Mapping).
Когда дело доходит до запекания света (включая тени), рабочий процесс Unity подразумевает использование карт освещения (Lightmaps). Вклад GameObject в запекание освещения определяется его флагом Static (Contribute GI).
В UNIGINE рендеринг и динамических, и кэшированных (предзапеченных) теней реализован с использованием Shadow Mapping. Все источники света могут быть в динамическом (Dynamic) или статическом (Static) режиме. Это определяет, вычисляются ли карты теней каждый кадр или сохраняются в текстуре, что значительно сокращает количество число полигонов для рендера. Очевидно, что движущиеся источники света должны быть динамическими — мы не можем предварительно вычислить тени, отбрасываемые движущимся источником света.
Поверхности мешей также могут быть статическими или динамическими для освещения. Тени от статических объектов будут запечены в карту теней у статических источников света, динамические объекты будут отбрасывать тени только будучи освещенными динамическими источниками света.
При этом можно совмещать кэшированные и динамические тени, используя Смешанный (Mixed) режим отбрасывания теней источника света.
Источник света World, как и источник света Directional из Unity, использует сложную технику рендеринга теней (Parallel-Split Shadow Mapping) для обработки теней на больших расстояниях. В параметрах каждого такого источника света можно настроить размеры теневых каскадов, используемых для теней на разном расстоянии.
Lights Cookies
Для проецирования текстур источниками света в Unity есть специальный тип текстур: Cookie. High Definition RP также поддерживает IES профили освещения для реалистичных источников света.
В UNIGINE вы можете использовать как произвольную Diffuse- или Albedo-текстуру, так и IES-файл в параметре Texture источника света. Для всенаправленных источников света (Light Omni) можно использовать кубическую карту.
Окружение
В редакторе Unity настройки освещения сцены размещены в окне Lighting. Раздел Environment содержит настройки для скайбокса (Skybox), рассеянного освещения (Diffuse Lighting) и отражений окружения (Environment Reflections).
В UNIGINE аналогичные настройки освещения окружения доступны в разделе >Render Settings (выберите Window -> Settings в главном меню, затем перейдите в Runtime -> Environment).
UNIGINE предоставляет три предустановки освещения, настроив которые, вы можете создать плавный переход между различными погодными условиями.
Чтобы добиться физически-корректной визуализации атмосферы, система среды UNIGINE имитирует рассеяние света в атмосфере путем интерполяции подготовленных LUT (Look-Up Textures, текстур поиска). Для получения более подробной информации посетите специальную статью.
Вы можете установить текстуру кубической карты в качестве текстуры среды (аналог Unity Skybox) как для цвета неба, так и для отражений.
Если вам нужно изменить отражения локально, например, в помещении, используйте Environment Probe с уникальной кубической картой.
Кроме того, редактор Unity позволяет указать другой скайбокс среды для камеры с помощью скрипта Skybox.
В UNIGINE эти настройки не привязаны к камере, вы можете использовать объект Sky для симуляции небосвода. Он может представлять собой полусферу или полную сферу с назначенной кубической картой и текстурой облаков для создания дешевых динамических облаков.
Для симуляции реалистичных облаков используйте волюметрические облака (Volumetric Clouds).
Туман (Fog)
Для имитации тумана в Unity обычно используется функция Fog окна Lighting при использовании Deferred-рендеринга или функцию Deferred Fog из пакета Post Processing при использовании Forward-рендеринга. HDRP предоставляет отдельную реализацию тумана в проекте.
Для той же цели в UNIGINE вы можете использовать Environment Haze в режиме Solid или Scattering (для более реалистичного взаимодействия с окружением), а для особых эффектов используйте волюметрики (Volumetric Objects) — они отлично подходят для имитации световых лучей (Light Beam) и объемного света (Light Shafts), тумана (Fog) и фигурных облаков (Shaped Clouds).
Глобальное освещение (Global Illumination)
Unity предоставляет набор систем, моделирующих глобальное (непрямое) освещение, что значительно повышает реалистичность сцены. Как и UNIGINE. В этом разделе перечислены основные методы симуляции GI в Unity и способы получения таких же или похожих результатов в UNIGINE.
Карты освещения (Lightmaps)
Unity предоставляет инструменты для предварительного расчета карт освещения на основе трассировки путей (Path-Tracing-Based Lightmappers). Для этого моделям требуются неперекрывающиеся UV-развертки с минимальными угловыми ошибками, а также достаточный отступ между элементами.
В UNIGINE карты освещения также поддерживаются и запекаются с помощью встроенного инструмента GPU Lightmapper. При импорте FBX-моделей UNIGINE предлагает выбрать UV-канал для карт освещения и при необходимости совершить автоматическую развертку для этого канала.
Стоит учесть ограничения карт освещения в UNIGINE: поддерживаются только ненаправленные карты освещения (карты нормалей не учитываются), а также то, что запекается только непрямое освещение.
UNIGINE поддерживает еще одно решение для статического Global Illumination — GI на основе вокселей (Voxel Global Illumination).
Объекты Voxel Probe представляют собой объем из вокселей фиксированного размера, каждый из которых хранит предварительно рассчитанное непрямое освещение, такой объем не только освещает геометрию внутри него, но и предоставляет диффузные (размытые) отражения и симуляцию каустики. Одно из преимуществ такого подхода — нет необходимости в UV-координатах, любая геометрия без проблем будет корректно освещена. Также этот подход позволяет освещать динамические объекты, что отлично комбинируется с картами освещения для статического окружения.
Карты освещения реального времени в Unity (Real-Time Lightmaps) в основном полезны для анимированных источников света. Для таких случаев UNIGINE предлагает технологию SSRTGI (Screen-Space Ray-Traced Global Illumination, глобальное освещение в экранном пространстве на основе трассировки лучей), значительно улучшающую общую связность сцены.
Light Probe
В программном обеспечении Unity информация о свете, проходящем через пустое пространство в сцене, обрабатывается объектами Light Probe. Основное назначение такого объекта — обеспечить высококачественное освещение (включая непрямой отраженный свет) движущихся объектов в сцене.
В UNIGINE, как было сказано ранее, такого же результата можно добиться, используя Voxel Probe. Параметр Bake Internal Volume позволяет выбрать качество и время, необходимое для запекания GI для пустых вокселей (т. е. вокселей, которые не охватывают какую-либо геометрию).
Reflection Probe
Практически полным аналогом Reflection Probe из Unity является объем Environment Probe, хранящий текстуру кубической карты для отображения на отражающих поверхностях.
Для Environment Probe также доступны режимы Static (статический), Realtime (реального времени) и Custom (пользовательский):
Realtime. Кубическая карта захватывается каждый кадр, обеспечивая отражения в реальном времени и большую нагрузку на систему.
Static. Environment Probe использует предварительно запеченную кубическую карту, полученную с помощью инструмента Bake Lighting. Этот режим подходит в основном для статических сред.
Custom. Статический режим с назначенной пользовательской кубической картой.
Возможна прямоугольная и сферическая проекция кубических карт:
Типы проекций, показанные в комнате прямоугольной формы
Кроме того, Environment Probe со сферической проекцией поддерживает эффект параллакса: проецирование отражения на бесконечно большую сферу или соответствие реальному размеру объема с учетом перспективы наблюдателя.
Environment Probe можно использовать не только для отражений, но и для окружающего освещения, включив опцию Ambient Lighting. В связке с динамическим режимом это позволит добиться симуляции простого глобального освещения.
Для более реалистичного статического глобального освещения лучше подойдут карты освещения и глобальное освещение на основе вокселей.
Планарное отражение (Planar Reflection)
Planar Reflection Probes, обеспечивающие динамические планарные (плоские) отражения, являются частью High Definition RP в Unity. Про полный аналог в UNIGINE можно узнать подробнее в статье Planar Reflection Probe.
Предрассчитанное рассеянное затенение (Baked Ambient Occlusion)
Система GI в Unity также поддерживает рассчет Baked Ambient Occlusion — эффекта, затемняющего углубления и поверхности, расположенные близко друг к другу.
UNIGINE не имеет встроенного инструмента для запекания АО, однако, позволяет применить дополнительную текстуру рассеянного затенения, сгенерированную с помощью стороннего ПО, в настройках материалов mesh_base и пользовательских материалов.
Встроенная оптимизация
Асинхронная загрузка текстур (Texture Streaming)
Unity обеспечивает асинхронную подгрузку текстур (Texture Streaming) на основе MIP-уровней текстур. Эта система уменьшает общий объем памяти, загружая только MIP-карты, необходимые для рендеринга текущего положения камеры в сцене.
В UNIGINE подгрузка текстур является частью системы асинхронной загрузки данных (Asynchronous Data Streaming). Эта система предназначена для уменьшения задержек, вызванных загрузкой графических ресурсов, таких как меши и текстуры: загружаются только те ресурсы, которые необходимы для рендеринга текущего вида камеры; и выгружаются, как только другие ресурсы требуют загрузки в видеопамять, чтобы не превысить заданные лимиты памяти. Загрузка разделена по времени, чтобы избежать притормаживаний при загрузке мира.
UNIGINE использует предварительно кэшированные минимизированные копии текстур — Texture Cache. При загрузке мира кэш текстур загружается первым, предоставляя предварительный контент для сцены, в то время как полноразмерные текстуры загружаются асинхронно. Опции для тонкой настройки доступны в разделе Streaming окна Settings:
Отсечение по видимости (Occlusion Culling)
В редакторе Unity можно «запечь» объекты в геометрию для Occlusion Culling, которая будет выключать рендеринг скрытых ею объектов. Этот метод чрезвычайно уменьшает количество визуализируемых полигонов.
В UNIGINE техника Occlusion Culling представлена двумя методами:
Ноды Occluder. Используйте прямоугольные объекты и объекты на основе меша, которые будут отключать рендеринг объектов, которые они перекрывают.
Техника Hardware Occlusion Queries позволяет исключить объекты из рендеринга, если они скрыты другой геометрией, автоматически. Этот подход имеет смысл использовать только для объектов с тяжелыми шейдерами, так как иначе особого преимущества не будет.
Пакетная обработка вызовов отрисовки (Draw Call Batching)
Пакетная обработка вызовов отрисовки (Draw Call Batching) в Unity — это способ сократить количество вызовов отрисовки за счет объединения статических игровых объектов, использующих один и тот же материал, в большие меши. Чтобы воспользоваться преимуществами статической пакетной обработки, необходимо включить флаг Batching Static для GameObject:
Как и Unity, UNIGINE группирует вызовы отрисовки: все непрозрачные поверхности с одним материалом автоматически группируются и визуализируются одновременно, что снижает количество вызовов отрисовки и, следовательно, повышает производительность. Поэтому зачастую целесообразно создавать атласы текстур (Texture Atlases), чтобы даже объекты, использующие разные текстуры, могли использовать один и тот же материал для пакетной обработки.
UNIGINE предоставляет дополнительные объекты для оптимизации сложных сцен:
Mesh Clutter — это объект, используемый для размещения большого количества одинаковых мешей по всей сцене. Он подходит для имитации растительности, сохраняя при этом высокую производительность.
Mesh Cluster — это объект, который может содержать большое количество одинаковых мешей, которые управляются как один объект. Объекты могут быть разбросаны либо автоматически, либо каждый меш может быть позиционирован, повернут и масштабирован вручную.
Дополнительные сведения об использовании этих объектов см. в статье «Работа с большим количеством объектов».
Билборды
В Unity используется Billboard Asset — набор предварительно подготовленных изображений более сложного меша, предназначенной для использования с компонентом Billboard Renderer, — чтобы заменить сложный 3D-меш 2D-билбордом на некотором расстоянии от камеры, тем самым уменьшая нагрузку на GPU.
Самый распространенный способ создания Billboard Asset — это использование стороннего программного обеспечения или создание Billboard Asset из скрипта.
UNIGINE также поддерживает билборды. В UNIGINE билборд — это прямоугольная плоскость, которая всегда обращена к камере (опционально с настройками), поэтому она способна отображать некоторые плоские эффекты и объекты, едва видные издалека.
Билборды для имитации объемной геометрии в UNIGINE именуются импосторами (Impostors). Есть встроенный инструмент для создания импосторов — Impostors Creator. Он автоматически создает серию снимков объекта с сохранением затенения и объединяет их в один билборд. Теперь вы можете использовать объект импостора как самый низкий LOD для меша на расстоянии.
Теги и слои
В редакторе Unity вы привыкли назначать теги игровым объектам для их пользовательской классификации. Вы также используете слои, чтобы определить группы игровых объектов, доступных для источников света и камер, а также для выборочного рейкастинга и столкновений.
В UNIGINE уровень абстракции пониже, обе эти системы представлены механизмом Bit Masking. Объекты, камеры, материалы и другие объекты имеют битовые маски, используемые различными эффектами и функциями для определения области их действия. Каждый бит в битовой маске может быть назван для удобства.
Маски сравниваются побитово с использованием логической связи — если две маски имеют хотя бы один совпадающий бит, они считаются совпадающими, и, следовательно, объект подвергается воздействию.
Например, вы можете отфильтровать определенные объекты (например, всплывающие подсказки) для отражений, настроив маски отражения (Reflection Viewport Masks):
Для получения более подробной информации и примеров использования:
Перейдите к статье «Битовая маскировка».
Посмотрите специальный видеоурок.
Инструменты оптимизации
Все узкие места и проблемы с производительностью можно отслеживать с помощью встроенных инструментов оптимизации:
Performance Profiler, аналог инструмента Unity Profiler, отображает данные о производительности на временной шкале в нескольких режимах.
Microprofile, расширенный профилировщик CPU/GPU с поддержкой проверки для каждого кадра.
Texture Profiler, инструмент, помогающий проверить потребление памяти текстурами.
На этом все. В третьем выпуске разберем все важные моменты по вопросу миграции с Unity с точки зрения программистов.
Напоминаем, что получить доступ к бесплатной версии UNIGINE 2 Community можно заполнив форму на нашем сайте.
Все комплектации UNIGINE:
Community — базовая версия для любителей и независимых разработчиков. Достаточна для разработки видеоигр большинства популярных жанров (включая VR).
Engineering — расширенная, специализированная версия. Включает множество заготовок для инженерных задач.
Sim — максимальная версия платформы под масштабные проекты (размеров планеты и даже больше) с готовыми механизмами симуляции.
maisvendoo
Community — базовая версия для любителей и независимых разработчиков. Достаточна для разработки видеоигр большинства популярных жанров (включая VR).
Что-то я не понял: комьюнити - одна машина - одна лицензия? Хочешь работать на двух машинах - запускай проект залогинившись через SDK Browser? Странное какое-то у вас комьюнити, ребята... Вы так далеко не уедете
maisvendoo
Поясню свою позицию более развернуто.
Что я вижу? Я вижу резкое повышение активности вашей компании по продвижению своего, несомненно интересного продукта, удивительным образом совпавшее с повышением интереса к импортозамещению. В этих публикациях вы противопоставляете свой продукт и Unity. Ок, я это увидел. Но раз так, то извините - Unigine Community и Unity Community предоставляют заведомо неравные условия использования, и заведомо, в моих глазах, как разработчика желающего попробовать ваш продукт для своих задач, падаете в моих глазах.
По моему глубокому мнению, если вы выпускаете Community-вариант своего проекта, то имеете цель создать вокруг вашего продукта сообщество (community - сообщество, англ.), как минимум равное по мощности сообществу Unity, которому вы себя противопоставляете. Однако, столь драконовские условия использования вашей комьюнити-версии этому никак не могут поспособствовать.
Пока что в моих глазах вы просто очередная контора, которая выходит на ниву импортозамещения наперевес с лопатой для загребания денег. Таким способом у вас ничего не получится
Unigine Автор
Поясните, пожалуйста, в чем суть проблемы? Действительно, для работы с SDK нужно бесплатно зарегистировать аккаунт - и его можно использовать на разных машинах. При этом, для готового проекта никуда логиниться не требуется.
maisvendoo
Поясняю. Unigine Community, активирована "плавающая" лицензия, вот такая
Без логина через Unigine SDK Browser запускаю вот это
и получаю вот это
Unigine Автор
.
maisvendoo
Ок, без проблем, напишу
Upd: Написал
Unigine Автор
По умолчанию в проект помещается Development версия движка которая содержит дополнительные средства отладки и так же как и редактор\Debug-движок - требует наличия license хоста(SDK Browser). Что-бы запускать движок без SDK Browser нужно переконфигурировать проект с Release бинарями(https://developer.unigine.com/en/docs/latest/sdk/projects/?rlang=cpp#engine_build)
Их же и нужно использовать в финальном билде проекта.
Извините, что в интерфейсе и документации про это не совсем доходчиво написано, - подумаем, как улучшить.
maisvendoo
Да, так действительно всё работает, спасибо
Деловой подход, приятно признать что я ошибался, вы тоже простите за мою резкость