GltfDocument
Класс для импорта и экспорта файлов glTF в Reckfell и из него.
Класс для импорта и экспорта файлов glTF в Reckfell и из него.
GLTFDocument поддерживает чтение данных из файла glTF, буфера или сцены Reckfell. Затем эти данные можно записать в файловую систему, буфер или использовать для создания сцены Reckfell.
Все данные в сцене glTF хранятся в классе GltfState. GLTFDocument обрабатывает объекты состояния, но не содержит никаких данных самой сцены. GLTFDocument имеет переменные-члены для хранения параметров конфигурации экспорта, таких как формат изображения, но в остальном не имеет состояния. Несколько сцен можно обрабатывать с теми же настройками, используя тот же объект GLTFDocument и разные объекты GltfState.
GLTFDocument можно расширить с помощью произвольной функциональности, расширив класс GltfDocumentExtension и зарегистрировав его в GLTFDocument через GltfDocument.RegisterGltfDocumentExtension. Это позволяет импортировать и экспортировать пользовательские данные.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
GltfDocumentКонструктор
public GltfDocument();Свойства7
FallbackImageFormatСвойство
public string FallbackImageFormat { get; set; }Удобное для пользователя, имя резервного формата изображения. Используется при экспорте файла glTF, включая запись в файл и запись в массив байтов.
Это свойство может быть только одним из "None", "PNG" или "JPEG" и используется только тогда, когда GltfDocument.ImageFormat не является одним из "None", "PNG" или "JPEG". Если требуется иметь несколько форматов изображений с расширением, это можно сделать с помощью класса GltfDocumentExtension — это свойство охватывает только вариант использования предоставления базового резервного изображения glTF при использовании пользовательского формата изображения.
FallbackImageQualityСвойство
public float FallbackImageQuality { get; set; }Качество резервного изображения, если таковое имеется. Для файлов PNG это уменьшает изображение по обоим измерениям на этот коэффициент. Для файлов JPEG это качество изображения с потерями. Рекомендуется низкое значение, поскольку включение нескольких высококачественных изображений в файл glTF сводит на нет выигрыш в размере файла за счет использования более эффективного формата изображения.
ImageFormatСвойство
public string ImageFormat { get; set; }Удобное для пользователя название формата экспортируемого изображения. Используется при экспорте файла glTF, включая запись в файл и запись в массив байтов.
По умолчанию Reckfell допускает следующие параметры: «None», «PNG», «JPEG», «Беспотерянный ВебП» и «Потерянный ВебП». Поддержка дополнительных форматов изображений может быть добавлена в классы GltfDocumentExtension. Один класс расширения может предоставлять несколько параметров для конкретного используемого формата или даже параметр, который использует несколько форматов одновременно.
LossyQualityСвойство
public float LossyQuality { get; set; }Если GltfDocument.ImageFormat — это формат изображения с потерями (lossy), это определяет качество изображения с потерями. В диапазоне от 0.0 до 1.0, где 0.0 — самое низкое качество, а 1.0 — самое высокое качество. Качество с потерями 1.0 не то же самое, что и без потерь.
RootNodeModeСвойство
public GltfDocument.RootNodeModeEnum RootNodeMode { get; set; }Как обрабатывать корневой узел во время экспорта. Значение по умолчанию и рекомендуемое значение — GltfDocument.RootNodeModeEnum.SingleRoot.
Примечание: Независимо от того, как экспортируется файл glTF, при импорте тип и имя корневого узла можно переопределить на вкладке настроек импорта сцены.
TextureMapModeСвойство
public GltfDocument.TextureMapModeEnum TextureMapMode { get; set; }Как обрабатывать текстурные карты во время импорта. Значение по умолчанию и рекомендуемое значение — GltfDocument.TextureMapModeEnum.RemapToStandardMaterial, которое автоматически переназначает карты текстур из гибкой системы текстурных карт glTF на более специфические слоты текстурных карт в классе StandardMaterial3D Reckfell. В качестве альтернативы можно использовать GltfDocument.TextureMapModeEnum.DoNotRemap для сохранения исходных текстурных карт из файла glTF, что может быть желательно при использовании файла glTF с пользовательскими шейдерами, но может отображаться некорректно со встроенными материалами Reckfell.
VisibilityModeСвойство
public GltfDocument.VisibilityModeEnum VisibilityMode { get; set; }Как работать с видимостью узлов во время экспорта. Эта настройка ничего не делает, если все узлы видны. Значение по умолчанию и рекомендуемое значение — GltfDocument.VisibilityModeEnum.IncludeRequired, которое использует расширение KHR_node_visibility.
Методы26
AppendFromBuffer2 перегрузки
public Error AppendFromBuffer(byte[] bytes, string basePath, GltfState state, uint flags = 0);Принимает byte[], определяющий glTF, и импортирует данные в заданный объект GltfState через параметр state.
Примечание: base_path сообщает GltfDocument.AppendFromBuffer, где найти зависимости, и может быть пустым.
| Имя | Тип | По умолчанию |
|---|---|---|
bytes | byte[] | — |
basePath | string | — |
state | GltfState | — |
flags | uint | 0 |
Errorpublic Error AppendFromBuffer(ReadOnlySpan<byte> bytes, string basePath, GltfState state, uint flags);Принимает byte[], определяющий glTF, и импортирует данные в заданный объект GltfState через параметр state.
Примечание: base_path сообщает GltfDocument.AppendFromBuffer, где найти зависимости, и может быть пустым.
| Имя | Тип | По умолчанию |
|---|---|---|
bytes | ReadOnlySpan<byte> | — |
basePath | string | — |
state | GltfState | — |
flags | uint | — |
ErrorAppendFromFileError
public Error AppendFromFile(string path, GltfState state, uint flags = 0, string basePath = "");Читает glTF/GLB в GltfState с разрешением зависимостей относительно basePath. Само дерево Entity ещё не создаётся: после Error.Ok вызовите GenerateScene. Для независимой загрузки используйте новый state. Не является универсальным загрузчиком FBX, Blender или проекта Reckfell.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
state | GltfState | — |
flags | uint | 0 |
basePath | string | "" |
pathПуть входного glTF/GLB файла через FileAccess. Соседние буферы и изображения должны быть доступны.
stateЭкземпляр состояния glTF для этой операции. Для чтения/преобразования создайте новый; для записи/генерации передайте уже заполненный.
flagsБитовая маска GltfDocument.ImportFlags, переданная как uint; 0 оставляет эти дополнительные флаги отключёнными. Это не настройки качества рендера.
basePathБазовая папка внешних изображений и буферов. При пустой строке берётся папка path; не передавайте здесь путь к отдельной текстуре.
ErrorError.Ok при успешном выполнении этапа; иначе код ошибки. Не означает визуальную идентичность и полноту переноса всех возможностей.
AppendFromSceneError
public Error AppendFromScene(Entity node, GltfState state, uint flags = 0);Преобразует переданный корень Entity и его потомков в данные GltfState. Файл не записывает и исходное дерево не освобождает. Для независимого экспорта создавайте новый state, затем вызывайте WriteToFilesystem. Успешное преобразование не гарантирует перенос ShaderMaterial и игровых возможностей.
| Имя | Тип | По умолчанию |
|---|---|---|
node | Entity | — |
state | GltfState | — |
flags | uint | 0 |
nodeЖивой корень экспортируемого дерева. Параметр C# действительно называется node; его тип Entity, имя параметра не меняет терминологию модели движка.
stateЭкземпляр состояния glTF для этой операции. Для чтения/преобразования создайте новый; для записи/генерации передайте уже заполненный.
flagsБитовая маска GltfDocument.ImportFlags, переданная как uint; 0 оставляет эти дополнительные флаги отключёнными. Это не настройки качества рендера.
ErrorError.Ok при успешном выполнении этапа; иначе код ошибки. Не означает визуальную идентичность и полноту переноса всех возможностей.
ExportObjectModelPropertyGltfObjectModelProperty
public static GltfObjectModelProperty ExportObjectModelProperty(GltfState state, EntityPath entityPath, Entity reckfellNode, int gltfNodeIndex);Определяет график между данным Reckfell entity_path и соответствующий ЦГОКМ Object Модель JSON Указатель(и) в генерируемом файле glTF. Подробности этого картирования возвращены в GltfObjectModelProperty Дополнительные карты могут быть получены через GltfDocumentExtension._ImportObjectModelProperty Метод обратного вызова.
| Имя | Тип | По умолчанию |
|---|---|---|
state | GltfState | — |
entityPath | EntityPath | — |
reckfellNode | Entity | — |
gltfNodeIndex | int | — |
GltfObjectModelPropertyGenerateBufferbyte[]
public byte[] GenerateBuffer(GltfState state);Принимает объект GltfState через параметр state и возвращает glTF byte[].
| Имя | Тип | По умолчанию |
|---|---|---|
state | GltfState | — |
byte[]GenerateSceneEntity
public Entity GenerateScene(GltfState state, float bakeFps = 30f, bool trimming = false, bool removeImmutableTracks = true);Создаёт дерево Entity из подготовленного GltfState. Дерево не добавляется в EntityTree автоматически; присоедините его явно или освободите через Free. Параметр bakeFps заменяет частоту запекания в state. Создание анимаций зависит также от данных и настроек state.
| Имя | Тип | По умолчанию |
|---|---|---|
state | GltfState | — |
bakeFps | float | 30f |
trimming | bool | false |
removeImmutableTracks | bool | true |
stateЭкземпляр состояния glTF для этой операции. Для чтения/преобразования создайте новый; для записи/генерации передайте уже заполненный.
bakeFpsЧастота запекания импортируемой анимации; задавайте положительное значение. По умолчанию 30; не задаёт FPS игрового рендера.
trimmingОбрезать диапазон импортируемой анимации по временам ключей вместо сохранения начала в нуле. Не меняет геометрию.
removeImmutableTracksПри true пропускать подходящие трансформационные треки, все значения которых совпадают с базовой трансформацией объекта. Не обещает удалить любой постоянный трек произвольного типа.
EntityКорень нового дерева Entity либо null при неудаче. Это не PackedEntity и не автоматически активный уровень.
GetFallbackImageFormatstring
public string GetFallbackImageFormat();stringGetFallbackImageQualityfloat
public float GetFallbackImageQuality();floatGetImageFormatstring
public string GetImageFormat();stringGetLossyQualityfloat
public float GetLossyQuality();floatGetRootEntityModeGltfDocument.RootNodeModeEnum
public GltfDocument.RootNodeModeEnum GetRootEntityMode();GltfDocument.RootNodeModeEnumGetSupportedGltfExtensionsstring[]
public static string[] GetSupportedGltfExtensions();Возвращает список всех поддерживаемых расширений glTF, включая расширения, поддерживаемые непосредственно движком, и расширения, поддерживаемые пользовательскими плагинами, регистрирующими классы GltfDocumentExtension.
Примечание: Если этот метод запущен до регистрации GLTFDocumentExtension, его расширения не будут включены в список. Обязательно запускайте этот метод только после регистрации всех расширений. Если вы запускаете его при запуске движка, рассмотрите возможность ожидания кадра перед вызовом этого метода, чтобы убедиться, что все расширения зарегистрированы.
string[]GetTextureMapModeGltfDocument.TextureMapModeEnum
public GltfDocument.TextureMapModeEnum GetTextureMapMode();GltfDocument.TextureMapModeEnumGetVisibilityModeGltfDocument.VisibilityModeEnum
public GltfDocument.VisibilityModeEnum GetVisibilityMode();GltfDocument.VisibilityModeEnumImportObjectModelPropertyGltfObjectModelProperty
public static GltfObjectModelProperty ImportObjectModelProperty(GltfState state, string jsonPointer);Определяет картирование между данным gITF Object Модель json_pointer и соответствующий путь (пути) узла Reckfell в генерируемой сцене. GltfObjectModelProperty Дополнительные карты могут быть получены через GltfDocumentExtension._ExportObjectModelProperty Метод обратного вызова.
| Имя | Тип | По умолчанию |
|---|---|---|
state | GltfState | — |
jsonPointer | string | — |
GltfObjectModelPropertyRegisterGltfDocumentExtensionvoid
public static void RegisterGltfDocumentExtension(GltfDocumentExtension extension, bool firstPriority = false);Регистрирует заданный экземпляр GltfDocumentExtension с GLTFDocument. Если first_priority равен true, это расширение будет запущено первым. В противном случае оно будет запущено последним.
Примечание: Как и сам GLTFDocument, все классы GLTFDocumentExtension должны быть без состояния для правильной работы. Если вам нужно сохранить данные, используйте методы set_additional_data и get_additional_data в GltfState или GltfNode.
| Имя | Тип | По умолчанию |
|---|---|---|
extension | GltfDocumentExtension | — |
firstPriority | bool | false |
SetFallbackImageFormatvoid
public void SetFallbackImageFormat(string fallbackImageFormat);| Имя | Тип | По умолчанию |
|---|---|---|
fallbackImageFormat | string | — |
SetFallbackImageQualityvoid
public void SetFallbackImageQuality(float fallbackImageQuality);| Имя | Тип | По умолчанию |
|---|---|---|
fallbackImageQuality | float | — |
SetImageFormatvoid
public void SetImageFormat(string imageFormat);| Имя | Тип | По умолчанию |
|---|---|---|
imageFormat | string | — |
SetLossyQualityvoid
public void SetLossyQuality(float lossyQuality);| Имя | Тип | По умолчанию |
|---|---|---|
lossyQuality | float | — |
SetRootEntityModevoid
public void SetRootEntityMode(GltfDocument.RootNodeModeEnum rootNodeMode);| Имя | Тип | По умолчанию |
|---|---|---|
rootNodeMode | GltfDocument.RootNodeModeEnum | — |
SetTextureMapModevoid
public void SetTextureMapMode(GltfDocument.TextureMapModeEnum textureMapMode);| Имя | Тип | По умолчанию |
|---|---|---|
textureMapMode | GltfDocument.TextureMapModeEnum | — |
SetVisibilityModevoid
public void SetVisibilityMode(GltfDocument.VisibilityModeEnum visibilityMode);| Имя | Тип | По умолчанию |
|---|---|---|
visibilityMode | GltfDocument.VisibilityModeEnum | — |
UnregisterGltfDocumentExtensionvoid
public static void UnregisterGltfDocumentExtension(GltfDocumentExtension extension);Отменяет регистрацию указанного экземпляра GltfDocumentExtension.
| Имя | Тип | По умолчанию |
|---|---|---|
extension | GltfDocumentExtension | — |
WriteToFilesystemError
public Error WriteToFilesystem(GltfState state, string path);Сериализует подготовленный GltfState и пишет glTF-файл. Используйте .glb для двоичного контейнера, .gltf для JSON с зависимостями. Родительская папка должна существовать. Возможна запись нескольких файлов; ошибка не выполняет автоматический откат частичного результата.
| Имя | Тип | По умолчанию |
|---|---|---|
state | GltfState | — |
path | string | — |
stateЭкземпляр состояния glTF для этой операции. Для чтения/преобразования создайте новый; для записи/генерации передайте уже заполненный.
pathВыходной путь glTF/GLB, а не папка. Проверяйте доступность папки и сохраняйте созданные файлы зависимостей.
ErrorError.Ok при успешном выполнении этапа; иначе код ошибки. Не означает визуальную идентичность и полноту переноса всех возможностей.
GltfDocument.ImportFlags
| Значение | Описание |
|---|---|
DiscardMeshesAndMaterials = 32 | Игнорировать сетки и материалы при импорте. При импорте сцены в формате |
ForceDisableMeshCompression = 64 | Если |
GenerateTangentArrays = 8 | Если |
UseNamedSkinBinds = 16 | Если этот параметр отмечен, используйте именованные
|
GltfDocument.RootNodeModeEnum
| Значение | Описание |
|---|---|
KeepRoot = 1 | Обрабатывайте корневой узел сцены Reckfell как корневой узел файла glTF, но не помечайте его как что-то особенное. При импорте в Reckfell будет сгенерирован дополнительный корневой узел. Это использует только функции Ванильный гульден. Это эквивалентно поведению в Reckfell и более ранних версиях. |
MultiRoot = 2 | Обрабатывать корневой узел сцены Reckfell как имя сцены glTF и добавлять все его дочерние элементы как корневые узлы файла glTF. Это использует только ванильные функции glTF. Это позволяет избежать дополнительного корневого узла, но будет сохранено только имя корневого узла сцены Reckfell, поскольку оно не будет сохранено как узел. |
SingleRoot = 0 | Обрабатывать корневой узел сцены Reckfell как корневой узел файла glTF и отмечать его как единственный корневой узел с помощью расширения glTF |
GltfDocument.TextureMapModeEnum
| Значение | Описание |
|---|---|
DoNotRemap = 0 | Импортируйте текстурные карты из файла glTF как есть, не пытаясь подогнать их под конкретные слоты текстур, подходящие для встроенных материалов Reckfell. Это может быть желательно при использовании файла glTF с пользовательскими шейдерами, но может отображаться некорректно со встроенными материалами Reckfell. Это эквивалентно поведению в Reckfell и более ранних версиях. |
RemapToStandardMaterial = 1 | Импортируйте текстурные карты из файла glTF, переназначив их на наиболее подходящие слоты текстур в соответствии с классом |
GltfDocument.VisibilityModeEnum
| Значение | Описание |
|---|---|
Exclude = 2 | Если сцена содержит какие-либо невидимые узлы, не включайте их в экспорт. Это то же самое, что и в Reckfell и более ранних версиях. Недостаток: невидимые узлы не будут существовать в экспортированном файле. |
IncludeOptional = 1 | Если сцена содержит какие-либо невидимые узлы, включите их, отметьте их как невидимые с помощью |
IncludeRequired = 0 | Если сцена содержит какие-либо невидимые узлы, включите их, отметьте их как невидимые с помощью |