This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
VR Development
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Сэмплы материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Система импорта

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

Imported Scene это набор метаданных об объектах, импортируемых в UNIGINE, который может содержать следующие компоненты:

  • Источники света
  • Камеры
  • Меши
  • Анимации
  • Текстуры
  • Материалы
  • Ноды

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

Import System

Структура Системы импорта

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

Процессоры и импортеры#

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

Каждый импортер имеет набор параметров, управляющих всем процессом импорта (например, множитель масштаба, использование различных процессоров, таких как static mesh merger или vertex cache optimizer и т.д.). Он также имеет набор флагов, определяющих, какие компоненты сцены следует извлекать и импортировать. Таким образом, импортер должен быть инициализирован перед использованием.

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

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

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

Import System предлагает вам DefaultProcessor — это, как следует из названия, процессор по умолчанию, используемый для сохранения объектов, созданных импортером, в соответствующие форматы файлов UNIGINE (.mesh, .dds, .node и т.д.).

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

Базовый алгоритм работы#

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

Основной рабочий процесс импорта файлов выглядит следующим образом:

  1. Проверьте расширение указанного входного файла и найдите подходящий импортер среди зарегистрированных.
  2. Извлеките метаданные сцены из входного файла, поместите данные в соответствующие структуры импорта (ImportMesh, ImportMaterial и т.д.) и создайте сцена импорта .
  3. При необходимости используйте препроцессоры для подготовки метаданных сцены (объединение всех статических мешей в один, оптимизация кеша вершин и т. д.).
  4. Используйте соответствующий импортер для создания объектов UNIGINE (узлов, источников света, камер, материалов и т.д.) на основе метаданных сцены.
  5. Используйте соответствующий процессор импорта для сохранения сгенерированных объектов в соответствующие файлы в указанном выходном каталоге.
  6. Используйте постпроцессор(ы) для выполнения необходимых операций с сгенерированными файлами.

Расширение системы#

Система импорта используется как движком, так и редактором UnigineEditor. В настоящее время она предлагает:

  • Импортер для сцен FBX реализован в виде плагина UnigineFbxImporter, который помимо формата .fbx также поддерживает форматы .obj, .dae, и .3ds.
  • Импортер для CAD-моделей , реализованный в виде плагина UnigineCadImporter , который поддерживает форматы САПР .iges, .step, и .stl.

Пользовательские модули импорта (импортеры и процессоры) для любого формата файлов, содержащих данные 3D-сцены, также должны быть реализованы в виде плагинов. Таким образом, вы можете рассмотреть плагины UnigineFbxImporter и UnigineCadImporter в качестве примеров для создания собственных пользовательских модулей импорта. Вы также можете изменить и восстановить эти плагины для использования собственного пользовательского импортера в редакторе (добавляют функциональность для обработки используемых определенных атрибутов моделей САПР, некоторые дополнительные функциональные возможности обработки сцен и т.д.).

Чтобы использовать плагин UnigineFbxImporter, просто загрузите его через plugin_load консольная команда или следующая параметр командной строки при запуске приложения:

Shell-команды
-extern_plugin UnigineFbxImporter

В общем виде рабочий процесс через API можно представить следующим образом:

Исходный код (C++)
// create an importer for the imported file ("1.fbx" in our case)
ImporterPtr importer = Import::createImporterByFileName("../data/1.fbx");

if (importer)
{
	// set up import parameter "scale" to 0.5
	importer->setParameterFloat("scale", 0.5f);

	// add a pre-processor to merge static meshes
	importer->addPreProcessor("MergeStaticMeshes");

	// initialize importer with all available import flags
	importer->init("1.fbx", ~0);

	// import our model to the specified directory
	importer->import("../data/1/");

	// create a node reference using the .node file generated for our model
	NodeReferencePtr noderef = NodeReference::create(importer->getOutputFilepath());
}

Вы также можете загрузить модель с настройками по умолчанию следующим образом:

Исходный код (C++)
// string to store the path to the .node file for your model
String filepath_node;

// import an fbx file to the specified location and get the path to the generated .node file
filepath_node = Import::doImport("../data/1.fbx", "../data/1/");

// create a node reference using the .node file generated
NodeReferencePtr noderef = NodeReference::create(filepath_node.get());

Встроенные параметры импорта#

Встроенные импортеры движка (такие какFBX, а такжеCAD Importer) имеют ряд параметров импорта которые также можно использовать в пользовательских импортерах.

Наименования параметров#

В следующей таблице перечислены имена параметров, доступных из коробки, которые можно установить с помощью метода setParameterInt("name", value).

need_reset_mesh

Удаляет сетку из FBX SDK после ее преобразования.

  • 0 — отключено (по умолчанию)
  • 1 — включить
create_unique_material_names

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

  • 0 — отключить
  • 1 — включено (по умолчанию)
vertex_cache

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

  • 0 — отключено (по умолчанию)
  • 1 — включить
workflow

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

  • 0 — рабочий процесс Metalness, использующий новый стандарт текстур (альбедо, металличность, шероховатость) (по умолчанию).
  • 1 — рабочий процесс Specular, в котором используется старый стандарт текстур, который использовался в материале mesh_base (диффузный, бликовый, глянцевый).
import_bones_without_skin

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

  • 0 — отключено (по умолчанию)
  • 1 — включить
import_tangent_space

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

  • 0 — отключено (по умолчанию)
  • 1 — включить
Примечание
Если опция включена, но актив FBX не имеет касательного пространства, он будет рассчитан с ориентацией для правой системы координат.
import_morph_targets

Импортирует цели морфинга из файла.

  • 0 — отключено (по умолчанию)
  • 1 — включить
create_transform_bones_for_joints

Импортирует иерархию суставов (костей) для анимированных ресурсов в виде списка World Transform Bones.

  • 0 — отключено (по умолчанию)
  • 1 — включить
joints_reorientation

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

  • 0 — отключено (по умолчанию)
  • 1 — включить
use_instances

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

  • 0 — отключено (по умолчанию)
  • 1 — включить
up_axis

Определяет, какая ось является вектором вверх мировой системы координат.

  • -1 — нет (по умолчанию)
  • 0 — Х
  • 1 — отрицательный X
  • 2 — И
  • 3 — отрицательное И
  • 4 - Z
  • 5 — отрицательное Z
Примечание
Значение up_axis должно отличаться от значения front_axis.
front_axis

Определяет, какая ось является прямым вектором мировой системы координат.

  • -1 — нет (по умолчанию)
  • 0 — Х
  • 1 — отрицательный X
  • 2 — И
  • 3 — отрицательное И
  • 4 - Z
  • 5 — отрицательное Z
Примечание
Значение front_axis должно отличаться от значения up_axis.
need_triangulate

Обеспечивает правильную триангуляцию сеток, NURBS и патчей.

  • 0 — отключено (по умолчанию)
  • 1 — включить
skip_empty_nodes

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

  • 0 — отключено (по умолчанию)
  • 1 — включить
merge_similar_materials

Объединяет материалы с одинаковыми настройками, но разными именами.

  • 0 — отключено (по умолчанию)
  • 1 — включить
uv_channel

Устанавливает UV-канал для хранения карты освещения.

  • 0 — Канал 0
  • 1 — Канал 1

Требуется добавить постпроцессор CreateUV.

uv_padding
Устанавливает значение отступа от 0 до 8 в пикселях. Значение по умолчанию — 0. Требуется добавить постпроцессор CreateUV.
uv_resolution
Устанавливает разрешение результирующей карты освещения. Доступные значения: 32, 64, 128, 256, 512, 1024, 2048, 4096. Значение по умолчанию — 0. Требуется добавить постпроцессор CreateUV.
uv_high_quality

Определяет эффективность размещения UV-островков на текстуре.

  • 0 — Низкое качество (по умолчанию)
  • 1 — Высокое качество
Requires adding CreateUV post-processor.


В следующей таблице перечислены имена параметров, доступных из коробки, которые можно установить с помощью метода setParameterFloat("name", value).

scale
Множитель масштаба геометрии.
fps
Количество кадров в секунду импортированной анимации.
bound_size
Размер ячейки сетки для разделения импортированных сеток, в единицах. Требуется добавить препроцессор SplitByBound.


В следующей таблице перечислены имена параметров, доступных из коробки, которые можно установить с помощью метода setParameterString("name", value).

lods_postfixes

Перечисляет постфиксы, которые будут использоваться для различения LOD, в следующем формате:

Исходный код (C++)
importer->setParameterString("lods_postfixes", "_lod_0,_lod_1,_lod_2");
Requires adding CombineByPostfixes pre-processor.
Примечание
Количество постфиксов должно быть таким же, как количество перечисленных lods_distances.
lods_distances

Перечисляет минимальные расстояния для LOD в следующем формате:

Исходный код (C++)
importer->setParameterString("lods_distances", "-1e+09,3,9");
Requires adding CombineByPostfixes pre-processor.
Примечание
Количество расстояний должно быть таким же, как количество перечисленных lods_postfixes.

Наименования типов предпроцессоров#

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

MergeStaticMeshes
Объединяет все дочерние статические сетки в одну (названную в честь родительской сетки). Все поверхности всех поверхностей мешей будут скопированы и показаны в иерархии Surfaces.
MergeSurfacesByMaterials
Позволяет объединять поверхности с одинаковыми материалами.
Repivot
Помещает ось сгенерированной сетки в ее центр. Может использоваться для сеток, геометрия которых расположена слишком далеко от точки опоры, так как это может привести к различным артефактам (джиттер и т.д.), связанным с ошибками позиционирования.
SplitByBound
Разделяет импортированные сетки в соответствии с размером сетки, заданным параметром bound_size.
CombineByPostfixes
Включает автоматическое создание уровней детализации (LOD) на основе значений параметров lods_postfixes и lods_distances.

Наименования типов постпроцессоров#

В следующей таблице перечислены имена типов постпроцессоров, доступных из коробки, которые можно добавить с помощью метода addPostProcessor("type_name").

CreateUV
Создает UV на основе значений параметров uv_channel, uv_padding, uv_resolution и uv_high_quality.

Смотрите также#

  • UnigineFbxImporter в качестве примера для вашего пользовательского плагина импорта: source/plugins/Import/FbxImporter.
  • UnigineCadImporter в качестве примера для вашего пользовательского плагина импорта: source/plugins/Import/CadImporter.
  • Пользовательский плагин импорта пример использования, чтобы изучить основы написания собственного пользовательского плагина импорта.
  • Импорт моделей непосредственно в память пример использования, чтобы изучить основы написания собственного обработчика импорта.

API системы импорта файлов:

  • Классы функциональности импорта файлов для получения более подробной информации об управлении системой импорта, модулями импорта и процессорами с помощью кода (C++, UnigineScript).

    Примечание
    Системный API импорта недоступен для версии Community SDK.
Последнее обновление: 19.12.2023
Build: ()