Система импорта
UNIGINE предлагает гибкую и расширяемую систему импорта, позволяющую импортировать целые сцены, а также выбранные компоненты сцен из любого внешнего формата и использовать их в своих проектах.
Imported Scene это набор метаданных об объектах, импортируемых в UNIGINE, который может содержать следующие компоненты:
- Источники света
- Камеры
- Меши
- Анимации
- Текстуры
- Материалы
- Ноды
Структура системы импорта показана ниже. Он включает диспетчер импорта и динамический набор импортеров а также процессоров для различных форматов внешних файлов.
Import Manager используется для создания и управления импортерами и обработчиками, а также для прямого импорта файлов в неродных форматах, если ранее был зарегистрирован импортер для таких файлов.
Процессоры и импортеры#
Importer — это модуль, используемый системой импорта для переноса данных, хранящихся в различных неродных форматах, в UNIGINE. Он генерирует объекты UNIGINE на основе метаданных, извлеченных из импортированного файла. Один импортер может использоваться для импорта нескольких внешних форматов файлов (расширений), но не должно быть двух или более импортеров, зарегистрированных для одного формата файла.
Каждый импортер имеет набор параметров, управляющих всем процессом импорта (например, множитель масштаба, использование различных процессоров, таких как static mesh merger или vertex cache optimizer и т.д.). Он также имеет набор флагов, определяющих, какие компоненты сцены следует извлекать и импортировать. Таким образом, импортер должен быть инициализирован перед использованием.
Importers используют набор процессоров для выполнения всех необходимых вспомогательных операций. Процессор — это модуль, выполняющий вспомогательные операции в процессе импорта (подготовка данных, сохранение файлов, управление файлами и т.д.). Список типов процессоров, которые можно использовать, включает следующее:
- Препроцессор — выполняет дополнительные операции над метаданными сцены (ImportScene) и подготавливает их к этапу генерации объекта.
- Процессор импорта — сохраняет объекты UNIGINE, сгенерированные импортером на основе метаданных, в файл в собственном формате UNIGINE. Вы можете использовать набор различных процессоров для каждого компонента сцены или один процессор для всех.
- Постпроцессор — выполняет дополнительные операции с генерируемыми файлами (копирование файлов в другие папки, добавление файлов в пакеты и т.д.).
Importer позволяет добавлять любое количество пре- и постпроцессоров. Однако вы можете установить только один процессор для каждого компонента сцены.
Import System предлагает вам DefaultProcessor — это, как следует из названия, процессор по умолчанию, используемый для сохранения объектов, созданных импортером, в соответствующие форматы файлов UNIGINE (.mesh, .texture, .node и т.д.).
Если ваше приложение не требует каких-либо конкретных операций сохранения файлов, вы можете использовать DefaultProcessor, в противном случае вы можете реализовать свои собственные пользовательские процессоры со всеми дополнительными функциями (например, импортировать модели прямо в память ).
Базовый алгоритм работы#
Чтобы их можно было использовать, импортеры и переработчики должны быть зарегистрированы в системе через Import Manager. Вы можете динамически управлять списком доступных модулей, добавляя их в реестр или удаляя из него. Когда вы импортируете файл в любом внешнем формате, система импорта автоматически пытается найти и использовать соответствующий импортер, зарегистрированный для указанного расширения файла.
Основной рабочий процесс импорта файлов выглядит следующим образом:
- Проверьте расширение указанного входного файла и найдите подходящий импортер среди зарегистрированных.
- Извлеките метаданные сцены из входного файла, поместите данные в соответствующие структуры импорта (ImportMesh, ImportMaterial и т.д.) и создайте сцена импорта .
- При необходимости используйте препроцессоры для подготовки метаданных сцены (объединение всех статических мешей в один, оптимизация кеша вершин и т. д.).
- Используйте соответствующий импортер для создания объектов UNIGINE (узлов, источников света, камер, материалов и т.д.) на основе метаданных сцены.
- Используйте соответствующий процессор импорта для сохранения сгенерированных объектов в соответствующие файлы в указанном выходном каталоге.
- Используйте постпроцессор(ы) для выполнения необходимых операций с сгенерированными файлами.
Расширение системы#
Система импорта используется как движком, так и редактором UnigineEditor. В настоящее время она предлагает:
- Импортер для сцен FBX реализован в виде плагина UnigineFbxImporter, который помимо формата .fbx также поддерживает форматы .obj, .dae, и .3ds.
- Импортер для CAD-моделей , реализованный в виде плагина UnigineCadImporter , который поддерживает форматы САПР .iges, .step, и .stl.
Пользовательские модули импорта (импортеры и процессоры) для любого формата файлов, содержащих данные 3D-сцены, также должны быть реализованы в виде плагинов. Таким образом, вы можете рассмотреть плагины UnigineFbxImporter и UnigineCadImporter в качестве примеров для создания собственных пользовательских модулей импорта. Вы также можете изменить и восстановить эти плагины для использования собственного пользовательского импортера в редакторе (добавляют функциональность для обработки используемых определенных атрибутов моделей САПР, некоторые дополнительные функциональные возможности обработки сцен и т.д.).
Чтобы использовать плагин UnigineFbxImporter, просто загрузите его через plugin_load консольная команда или следующая параметр командной строки при запуске приложения:
-extern_plugin UnigineFbxImporter
В общем виде рабочий процесс через API можно представить следующим образом:
// 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());
}
Вы также можете загрузить модель с настройками по умолчанию следующим образом:
// 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 после ее преобразования.
|
create_unique_material_names |
Создает уникальные имена для материалов с одинаковыми именами.
|
vertex_cache |
Оптимизирует кэш вершин. Этот параметр переупорядочивает индексированный список треугольников, чтобы улучшить использование кэша вершин во время выполнения. Его можно отключить, чтобы ускорить процесс сохранения; однако его всегда следует включать при сохранении окончательной версии.
|
workflow |
Определяет рабочий процесс для импортируемых физически обоснованных материалов (если таковые имеются).
|
import_bones_without_skin |
Импортирует кости, которые не прикреплены к скелету и не влияют на скин анимации, например, оружие, которое персонаж держит в руках. Если отключено, такая кость не импортируется, а связанные с ней кости, если таковые имеются, становятся сиротами.
|
import_tangent_space |
Импортирует встроенные данные касательного пространства вместо их пересчета.
Если опция включена, но актив FBX не имеет касательного пространства, он будет рассчитан с ориентацией для правой системы координат. |
import_morph_targets |
Импортирует цели морфинга из файла.
|
create_transform_bones_for_joints |
Импортирует иерархию суставов (костей) для анимированных ресурсов в виде списка World Transform Bones.
|
joints_reorientation |
Определяет ориентацию костей для анимации и анимированной геометрии. Когда эта функция включена, все кости будут иметь ту же прямую ось, что и геометрия. Это упрощает работу с анимацией через код для программистов, уменьшая количество манипуляций с осями: если меш имеет +Y в качестве прямой оси, кости также будут иметь +Y.
|
use_instances |
Импортирует FBX с экземплярами сетки. При включении импортируется одна сетка вместо нескольких одинаковых. Если вы добавите такой FBX в сцену, все сетки в мировой иерархии будут ссылаться на одну сетку, хранящуюся внутри импортированного контейнера FBX.
|
up_axis |
Определяет, какая ось является вектором вверх мировой системы координат.
Значение up_axis должно отличаться от значения front_axis. |
front_axis |
Определяет, какая ось является прямым вектором мировой системы координат.
Значение front_axis должно отличаться от значения up_axis. |
need_triangulate |
Обеспечивает правильную триангуляцию сеток, NURBS и патчей.
|
skip_empty_nodes |
Пропускает пустые узлы. Сложные CAD-модели могут содержать много пустых узлов, что приводит к перегруженной мировой иерархии. Вы можете включить эту опцию, чтобы упростить сгенерированную иерархию, игнорируя узлы, которые не содержат никакой полезной информации.
|
merge_similar_materials |
Объединяет материалы с одинаковыми настройками, но разными именами.
|
uv_channel |
Устанавливает UV-канал для хранения карты освещения.
Требуется добавить постпроцессор CreateUV. |
uv_padding |
Устанавливает значение отступа от 0 до 8 в пикселях. Значение по умолчанию — 0. Требуется добавить постпроцессор CreateUV. |
uv_resolution |
Устанавливает разрешение результирующей карты освещения. Доступные значения: 32, 64, 128, 256, 512, 1024, 2048, 4096. Значение по умолчанию — 0. Требуется добавить постпроцессор CreateUV. |
uv_high_quality |
Определяет эффективность размещения UV-островков на текстуре.
|
В следующей таблице перечислены имена параметров, доступных из коробки, которые можно установить с помощью метода setParameterFloat("name", value).
scale |
---|
Множитель масштаба геометрии. |
fps |
Количество кадров в секунду импортированной анимации. |
bound_size |
Размер ячейки сетки для разделения импортированных сеток, в единицах. Требуется добавить препроцессор SplitByBound. |
В следующей таблице перечислены имена параметров, доступных из коробки, которые можно установить с помощью метода setParameterString("name", value).
lods_postfixes |
---|
Перечисляет постфиксы, которые будут использоваться для различения LOD, в следующем формате:
Количество постфиксов должно быть таким же, как количество перечисленных lods_distances. |
lods_distances |
Перечисляет минимальные расстояния для LOD в следующем формате:
Количество расстояний должно быть таким же, как количество перечисленных 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.