reckfellENGINE

GltfDocument

Класс для импорта и экспорта файлов glTF в Reckfell и из него.

На этой странице
class GltfDocumentReckfellSharpНаследует Resource

Класс для импорта и экспорта файлов glTF в Reckfell и из него.

GLTFDocument поддерживает чтение данных из файла glTF, буфера или сцены Reckfell. Затем эти данные можно записать в файловую систему, буфер или использовать для создания сцены Reckfell. Все данные в сцене glTF хранятся в классе GltfState. GLTFDocument обрабатывает объекты состояния, но не содержит никаких данных самой сцены. GLTFDocument имеет переменные-члены для хранения параметров конфигурации экспорта, таких как формат изображения, но в остальном не имеет состояния. Несколько сцен можно обрабатывать с теми же настройками, используя тот же объект GLTFDocument и разные объекты GltfState. GLTFDocument можно расширить с помощью произвольной функциональности, расширив класс GltfDocumentExtension и зарегистрировав его в GLTFDocument через GltfDocument.RegisterGltfDocumentExtension. Это позволяет импортировать и экспортировать пользовательские данные.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

GltfDocumentКонструктор
# GltfDocument
C#
public GltfDocument();

Свойства7

FallbackImageFormatСвойство
# FallbackImageFormat
C#
public string FallbackImageFormat { get; set; }

Удобное для пользователя, имя резервного формата изображения. Используется при экспорте файла glTF, включая запись в файл и запись в массив байтов. Это свойство может быть только одним из "None", "PNG" или "JPEG" и используется только тогда, когда GltfDocument.ImageFormat не является одним из "None", "PNG" или "JPEG". Если требуется иметь несколько форматов изображений с расширением, это можно сделать с помощью класса GltfDocumentExtension — это свойство охватывает только вариант использования предоставления базового резервного изображения glTF при использовании пользовательского формата изображения.

FallbackImageQualityСвойство
# FallbackImageQuality
C#
public float FallbackImageQuality { get; set; }

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

ImageFormatСвойство
# ImageFormat
C#
public string ImageFormat { get; set; }

Удобное для пользователя название формата экспортируемого изображения. Используется при экспорте файла glTF, включая запись в файл и запись в массив байтов. По умолчанию Reckfell допускает следующие параметры: «None», «PNG», «JPEG», «Беспотерянный ВебП» и «Потерянный ВебП». Поддержка дополнительных форматов изображений может быть добавлена в классы GltfDocumentExtension. Один класс расширения может предоставлять несколько параметров для конкретного используемого формата или даже параметр, который использует несколько форматов одновременно.

LossyQualityСвойство
# LossyQuality
C#
public float LossyQuality { get; set; }

Если GltfDocument.ImageFormat — это формат изображения с потерями (lossy), это определяет качество изображения с потерями. В диапазоне от 0.0 до 1.0, где 0.0 — самое низкое качество, а 1.0 — самое высокое качество. Качество с потерями 1.0 не то же самое, что и без потерь.

RootNodeModeСвойство
# RootNodeMode
C#
public GltfDocument.RootNodeModeEnum RootNodeMode { get; set; }

Как обрабатывать корневой узел во время экспорта. Значение по умолчанию и рекомендуемое значение — GltfDocument.RootNodeModeEnum.SingleRoot. Примечание: Независимо от того, как экспортируется файл glTF, при импорте тип и имя корневого узла можно переопределить на вкладке настроек импорта сцены.

TextureMapModeСвойство
# TextureMapMode
C#
public GltfDocument.TextureMapModeEnum TextureMapMode { get; set; }

Как обрабатывать текстурные карты во время импорта. Значение по умолчанию и рекомендуемое значение — GltfDocument.TextureMapModeEnum.RemapToStandardMaterial, которое автоматически переназначает карты текстур из гибкой системы текстурных карт glTF на более специфические слоты текстурных карт в классе StandardMaterial3D Reckfell. В качестве альтернативы можно использовать GltfDocument.TextureMapModeEnum.DoNotRemap для сохранения исходных текстурных карт из файла glTF, что может быть желательно при использовании файла glTF с пользовательскими шейдерами, но может отображаться некорректно со встроенными материалами Reckfell.

VisibilityModeСвойство
# VisibilityMode
C#
public GltfDocument.VisibilityModeEnum VisibilityMode { get; set; }

Как работать с видимостью узлов во время экспорта. Эта настройка ничего не делает, если все узлы видны. Значение по умолчанию и рекомендуемое значение — GltfDocument.VisibilityModeEnum.IncludeRequired, которое использует расширение KHR_node_visibility.

Методы26

AppendFromBuffer2 перегрузки
# AppendFromBuffer · 1/2
C#
public Error AppendFromBuffer(byte[] bytes, string basePath, GltfState state, uint flags = 0);

Принимает byte[], определяющий glTF, и импортирует данные в заданный объект GltfState через параметр state. Примечание: base_path сообщает GltfDocument.AppendFromBuffer, где найти зависимости, и может быть пустым.

Параметры
ИмяТипПо умолчанию
bytesbyte[]—
basePathstring—
stateGltfState—
flagsuint0
Возвращает Error
# AppendFromBuffer · 2/2
C#
public Error AppendFromBuffer(ReadOnlySpan<byte> bytes, string basePath, GltfState state, uint flags);

Принимает byte[], определяющий glTF, и импортирует данные в заданный объект GltfState через параметр state. Примечание: base_path сообщает GltfDocument.AppendFromBuffer, где найти зависимости, и может быть пустым.

Параметры
ИмяТипПо умолчанию
bytesReadOnlySpan<byte>—
basePathstring—
stateGltfState—
flagsuint—
Возвращает Error
AppendFromFileError
# AppendFromFile
C#
public Error AppendFromFile(string path, GltfState state, uint flags = 0, string basePath = "");

Читает glTF/GLB в GltfState с разрешением зависимостей относительно basePath. Само дерево Entity ещё не создаётся: после Error.Ok вызовите GenerateScene. Для независимой загрузки используйте новый state. Не является универсальным загрузчиком FBX, Blender или проекта Reckfell.

Параметры
ИмяТипПо умолчанию
pathstring—
stateGltfState—
flagsuint0
basePathstring""
path

Путь входного glTF/GLB файла через FileAccess. Соседние буферы и изображения должны быть доступны.

state

Экземпляр состояния glTF для этой операции. Для чтения/преобразования создайте новый; для записи/генерации передайте уже заполненный.

flags

Битовая маска GltfDocument.ImportFlags, переданная как uint; 0 оставляет эти дополнительные флаги отключёнными. Это не настройки качества рендера.

basePath

Базовая папка внешних изображений и буферов. При пустой строке берётся папка path; не передавайте здесь путь к отдельной текстуре.

Возвращает Error

Error.Ok при успешном выполнении этапа; иначе код ошибки. Не означает визуальную идентичность и полноту переноса всех возможностей.

AppendFromSceneError
# AppendFromScene
C#
public Error AppendFromScene(Entity node, GltfState state, uint flags = 0);

Преобразует переданный корень Entity и его потомков в данные GltfState. Файл не записывает и исходное дерево не освобождает. Для независимого экспорта создавайте новый state, затем вызывайте WriteToFilesystem. Успешное преобразование не гарантирует перенос ShaderMaterial и игровых возможностей.

Параметры
ИмяТипПо умолчанию
nodeEntity—
stateGltfState—
flagsuint0
node

Живой корень экспортируемого дерева. Параметр C# действительно называется node; его тип Entity, имя параметра не меняет терминологию модели движка.

state

Экземпляр состояния glTF для этой операции. Для чтения/преобразования создайте новый; для записи/генерации передайте уже заполненный.

flags

Битовая маска GltfDocument.ImportFlags, переданная как uint; 0 оставляет эти дополнительные флаги отключёнными. Это не настройки качества рендера.

Возвращает Error

Error.Ok при успешном выполнении этапа; иначе код ошибки. Не означает визуальную идентичность и полноту переноса всех возможностей.

ExportObjectModelPropertyGltfObjectModelProperty
# ExportObjectModelProperty
C#
public static GltfObjectModelProperty ExportObjectModelProperty(GltfState state, EntityPath entityPath, Entity reckfellNode, int gltfNodeIndex);

Определяет график между данным Reckfell entity_path и соответствующий ЦГОКМ Object Модель JSON Указатель(и) в генерируемом файле glTF. Подробности этого картирования возвращены в GltfObjectModelProperty Дополнительные карты могут быть получены через GltfDocumentExtension._ImportObjectModelProperty Метод обратного вызова.

Параметры
ИмяТипПо умолчанию
stateGltfState—
entityPathEntityPath—
reckfellNodeEntity—
gltfNodeIndexint—
Возвращает GltfObjectModelProperty
GenerateBufferbyte[]
# GenerateBuffer
C#
public byte[] GenerateBuffer(GltfState state);

Принимает объект GltfState через параметр state и возвращает glTF byte[].

Параметры
ИмяТипПо умолчанию
stateGltfState—
Возвращает byte[]
GenerateSceneEntity
# GenerateScene
C#
public Entity GenerateScene(GltfState state, float bakeFps = 30f, bool trimming = false, bool removeImmutableTracks = true);

Создаёт дерево Entity из подготовленного GltfState. Дерево не добавляется в EntityTree автоматически; присоедините его явно или освободите через Free. Параметр bakeFps заменяет частоту запекания в state. Создание анимаций зависит также от данных и настроек state.

Параметры
ИмяТипПо умолчанию
stateGltfState—
bakeFpsfloat30f
trimmingboolfalse
removeImmutableTracksbooltrue
state

Экземпляр состояния glTF для этой операции. Для чтения/преобразования создайте новый; для записи/генерации передайте уже заполненный.

bakeFps

Частота запекания импортируемой анимации; задавайте положительное значение. По умолчанию 30; не задаёт FPS игрового рендера.

trimming

Обрезать диапазон импортируемой анимации по временам ключей вместо сохранения начала в нуле. Не меняет геометрию.

removeImmutableTracks

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

Возвращает Entity

Корень нового дерева Entity либо null при неудаче. Это не PackedEntity и не автоматически активный уровень.

GetFallbackImageFormatstring
# GetFallbackImageFormat
C#
public string GetFallbackImageFormat();
Возвращает string
GetFallbackImageQualityfloat
# GetFallbackImageQuality
C#
public float GetFallbackImageQuality();
Возвращает float
GetImageFormatstring
# GetImageFormat
C#
public string GetImageFormat();
Возвращает string
GetLossyQualityfloat
# GetLossyQuality
C#
public float GetLossyQuality();
Возвращает float
GetRootEntityModeGltfDocument.RootNodeModeEnum
# GetRootEntityMode
C#
public GltfDocument.RootNodeModeEnum GetRootEntityMode();
Возвращает GltfDocument.RootNodeModeEnum
GetSupportedGltfExtensionsstring[]
# GetSupportedGltfExtensions
C#
public static string[] GetSupportedGltfExtensions();

Возвращает список всех поддерживаемых расширений glTF, включая расширения, поддерживаемые непосредственно движком, и расширения, поддерживаемые пользовательскими плагинами, регистрирующими классы GltfDocumentExtension. Примечание: Если этот метод запущен до регистрации GLTFDocumentExtension, его расширения не будут включены в список. Обязательно запускайте этот метод только после регистрации всех расширений. Если вы запускаете его при запуске движка, рассмотрите возможность ожидания кадра перед вызовом этого метода, чтобы убедиться, что все расширения зарегистрированы.

Возвращает string[]
GetTextureMapModeGltfDocument.TextureMapModeEnum
# GetTextureMapMode
C#
public GltfDocument.TextureMapModeEnum GetTextureMapMode();
Возвращает GltfDocument.TextureMapModeEnum
GetVisibilityModeGltfDocument.VisibilityModeEnum
# GetVisibilityMode
C#
public GltfDocument.VisibilityModeEnum GetVisibilityMode();
Возвращает GltfDocument.VisibilityModeEnum
ImportObjectModelPropertyGltfObjectModelProperty
# ImportObjectModelProperty
C#
public static GltfObjectModelProperty ImportObjectModelProperty(GltfState state, string jsonPointer);

Определяет картирование между данным gITF Object Модель json_pointer и соответствующий путь (пути) узла Reckfell в генерируемой сцене. GltfObjectModelProperty Дополнительные карты могут быть получены через GltfDocumentExtension._ExportObjectModelProperty Метод обратного вызова.

Параметры
ИмяТипПо умолчанию
stateGltfState—
jsonPointerstring—
Возвращает GltfObjectModelProperty
RegisterGltfDocumentExtensionvoid
# RegisterGltfDocumentExtension
C#
public static void RegisterGltfDocumentExtension(GltfDocumentExtension extension, bool firstPriority = false);

Регистрирует заданный экземпляр GltfDocumentExtension с GLTFDocument. Если first_priority равен true, это расширение будет запущено первым. В противном случае оно будет запущено последним. Примечание: Как и сам GLTFDocument, все классы GLTFDocumentExtension должны быть без состояния для правильной работы. Если вам нужно сохранить данные, используйте методы set_additional_data и get_additional_data в GltfState или GltfNode.

Параметры
ИмяТипПо умолчанию
extensionGltfDocumentExtension—
firstPriorityboolfalse
SetFallbackImageFormatvoid
# SetFallbackImageFormat
C#
public void SetFallbackImageFormat(string fallbackImageFormat);
Параметры
ИмяТипПо умолчанию
fallbackImageFormatstring—
SetFallbackImageQualityvoid
# SetFallbackImageQuality
C#
public void SetFallbackImageQuality(float fallbackImageQuality);
Параметры
ИмяТипПо умолчанию
fallbackImageQualityfloat—
SetImageFormatvoid
# SetImageFormat
C#
public void SetImageFormat(string imageFormat);
Параметры
ИмяТипПо умолчанию
imageFormatstring—
SetLossyQualityvoid
# SetLossyQuality
C#
public void SetLossyQuality(float lossyQuality);
Параметры
ИмяТипПо умолчанию
lossyQualityfloat—
SetRootEntityModevoid
# SetRootEntityMode
C#
public void SetRootEntityMode(GltfDocument.RootNodeModeEnum rootNodeMode);
Параметры
ИмяТипПо умолчанию
rootNodeModeGltfDocument.RootNodeModeEnum—
SetTextureMapModevoid
# SetTextureMapMode
C#
public void SetTextureMapMode(GltfDocument.TextureMapModeEnum textureMapMode);
Параметры
ИмяТипПо умолчанию
textureMapModeGltfDocument.TextureMapModeEnum—
SetVisibilityModevoid
# SetVisibilityMode
C#
public void SetVisibilityMode(GltfDocument.VisibilityModeEnum visibilityMode);
Параметры
ИмяТипПо умолчанию
visibilityModeGltfDocument.VisibilityModeEnum—
UnregisterGltfDocumentExtensionvoid
# UnregisterGltfDocumentExtension
C#
public static void UnregisterGltfDocumentExtension(GltfDocumentExtension extension);

Отменяет регистрацию указанного экземпляра GltfDocumentExtension.

Параметры
ИмяТипПо умолчанию
extensionGltfDocumentExtension—
WriteToFilesystemError
# WriteToFilesystem
C#
public Error WriteToFilesystem(GltfState state, string path);

Сериализует подготовленный GltfState и пишет glTF-файл. Используйте .glb для двоичного контейнера, .gltf для JSON с зависимостями. Родительская папка должна существовать. Возможна запись нескольких файлов; ошибка не выполняет автоматический откат частичного результата.

Параметры
ИмяТипПо умолчанию
stateGltfState—
pathstring—
state

Экземпляр состояния glTF для этой операции. Для чтения/преобразования создайте новый; для записи/генерации передайте уже заполненный.

path

Выходной путь glTF/GLB, а не папка. Проверяйте доступность папки и сохраняйте созданные файлы зависимостей.

Возвращает Error

Error.Ok при успешном выполнении этапа; иначе код ошибки. Не означает визуальную идентичность и полноту переноса всех возможностей.

GltfDocument.ImportFlags

ЗначениеОписание
DiscardMeshesAndMaterials = 32

Игнорировать сетки и материалы при импорте. При импорте сцены в формате AnimationLibrary этот флаг всегда включен.

ForceDisableMeshCompression = 64

Если true, сжатие сетки не будет использоваться. Рассмотрите возможность включения, если вы заметили блочные артефакты в нормалях сетки или UV, или если у вас есть сетки, которые больше нескольких тысяч метров в каждом направлении.

GenerateTangentArrays = 8

Если true, сгенерируйте касательные вершины с помощью Mikktspace(http://www.mikktspace.com/), если входные сетки не содержат данных о касательных. По возможности рекомендуется позволить программному обеспечению для 3D-моделирования генерировать касательные при экспорте, а не полагаться на эту опцию. Касательные необходимы для корректного отображения карт нормалей и высот, а также любых функций материала/шейдера, требующих касательных. Если вам не нужны функции материала, требующие касательных, отключение этой опции может уменьшить размер выходного файла и ускорить импорт, если исходный 3D-файл не содержит касательных.

UseNamedSkinBinds = 16

Если этот параметр отмечен, используйте именованные Skin для анимации. Узел MeshInstance3D содержит 3 важных свойства: скелет EntityPath, указывающий на узел Skeleton3D (обычно ..), сетку и скин:

  • Узел Skeleton3D содержит список костей с именами, их позами и состояниями покоя, имя и родительскую кость.
  • Сетка содержит все необходимые данные о вершинах для отображения сетки. С точки зрения сетки, она знает, как происходит распределение весов вершин, и использует некоторую внутреннюю нумерацию, часто импортируемую из программного обеспечения для 3D-моделирования.
  • Скин содержит информацию, необходимую для привязки этой сетки к этому Skeleton3D. Для каждого из внутренних идентификаторов костей, выбранных программным обеспечением для 3D-моделирования, он содержит две вещи. Во-первых, матрицу, известную как матрица привязки позы, обратная матрица привязки или сокращенно IBM. Во-вторых, Skin содержит имя каждой кости (если этот флаг включен) или индекс кости в списке Skeleton3D (если этот флаг отключен). Вместе эта информация достаточна, чтобы сообщить Reckfell, как использовать позы костей в узле Skeleton3D и для рендеринга сетки каждого MeshInstance3D. Обратите внимание, что каждый MeshInstance3D может использовать общие привязки, как это часто бывает в моделях, экспортированных из Blender, или каждый MeshInstance3D может использовать отдельный объект Skin, как это часто бывает в моделях, экспортированных из других инструментов, таких как Maya.

GltfDocument.RootNodeModeEnum

ЗначениеОписание
KeepRoot = 1

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

MultiRoot = 2

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

SingleRoot = 0

Обрабатывать корневой узел сцены Reckfell как корневой узел файла glTF и отмечать его как единственный корневой узел с помощью расширения glTF RECKFELL_single_root. Это будет проанализировано так же, как GltfDocument.RootNodeModeEnum.KeepRoot, если реализация не поддерживает RECKFELL_single_root.

GltfDocument.TextureMapModeEnum

ЗначениеОписание
DoNotRemap = 0

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

RemapToStandardMaterial = 1

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

GltfDocument.VisibilityModeEnum

ЗначениеОписание
Exclude = 2

Если сцена содержит какие-либо невидимые узлы, не включайте их в экспорт. Это то же самое, что и в Reckfell и более ранних версиях. Недостаток: невидимые узлы не будут существовать в экспортированном файле.

IncludeOptional = 1

Если сцена содержит какие-либо невидимые узлы, включите их, отметьте их как невидимые с помощью KHR_node_visibility и не предъявляйте никаких требований к импортерам. Недостаток: если импортер не поддерживает KHR_node_visibility, невидимые объекты будут видны.

IncludeRequired = 0

Если сцена содержит какие-либо невидимые узлы, включите их, отметьте их как невидимые с помощью KHR_node_visibility и потребуйте, чтобы импортеры учитывали их невидимость. Недостаток: если импортер не поддерживает KHR_node_visibility, файл не может быть импортирован.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.