Основы формата GLTF и GLB, часть 1
Что такое GLTF и GLB?
GLTF (GL Transmission Format) — это формат файла для хранения 3Д сцен и моделей, который является крайне простым в понимании (структура записана в стандарте JSON), расширяемым и легко взаимодействующим с современными веб-технологиями. Данный формат хорошо сжимает трёхмерные сцены и минимизирует обработку во время выполнения приложений, использующих WebGL и другие API. GLTF сейчас активно продвигается Khronos Group как JPEG от мира 3D. На сегодняшний день используется GLTF версии 2.0. Существует и бинарная версия данного формата, которая называется GLB, единственное различие которого в том, что все хранится в одном файле с расширением GLB.
Эта статья — 1 часть из 2х. В ней мы с вами рассмотрим такие артефакты формата и их атрибуты, как Scene, Node, Buffer, BufferView, Accessor и Mesh. А во второй статье мы рассмотрим оставшиеся: Material, Texture, Animations, Skin и Camera. Больше общей информации о формате можно найти здесь.
Если в процессе просмотра статьи захочется лично поработать с данным форматом, то можете скачать модели GLTF 2.0 с официального репозитория Khronos на GitHub
Проблематика и её решение
Изначально GLTF формат был задуман Khronos Group как решение для передачи 3D контента по интернету и был призван минимизировать количество импортеров и конвертеров, разные виды которых создаются при работе с графическими API.
На текущий момент GLTF и его бинарный брат GLB используются как унифицированные форматы и в CAD программах (Autodesk Maya, Blender и т. д.), в игровых движках (Unreal Engine, Unity и прочих), AR/VR приложениях, соц. сетях и т.д.
Представители Khronos Group утрвеждают следующее:
Система координат и единицы измерения
GLTF использует правостороннюю систему координат, то есть перекрестное произведение +X и +Y дает +Z, где +Y — верхняя ось. Передняя часть 3D ассета GLTF обращена к оси +Z. Единицами измерения для всех линейных расстояний являются метры, углы же измеряются в радианах а положительное вращение объектов — против часовой стрелки. Node трансформации и channel paths анимаций являются трехмерными векторами или кватернионами со следующими типами данных и семантикой:
translation: трехмерный вектор, содержащий перевод по осям x, y и z
rotation: кватернион (x, y, z, w), где w скаляр
scale: трехмерный вектор, содержащий коэффициенты масштабирования по осям x, y и z
GLTF — взгляд изнутри
Структура формата строго иерархическая и имеет следующий вид:
Рассказывая далее о структуре я буду использовать примеры простейшего GLTF файла, который хранит в себе 1 односторонний треугольник с материалом по умолчанию. Если захотите, то вы можете его скопировать и вставить в любой GLTF просмотрщик, чтобы «пощупать» содержимое файла лично. В своей практике я использовал разные, но остановился на этом, который использует Three.js под капотом. Также хорошей опцией будет использование Visual Studio Code с GLTF плагином. Так у вас появится выбор сразу из 3х движков: Babylon.js, Cesium, Three.js
Scene и Node элементы
Первым-наперво идет основная нода под названием Scene. Это корневая точка в файле, с которой все и начинается. Данная нода содержит массив сцен, которые хранит GLTF и выбор той, которая будет грузится по умолчанию после открытия файла. Контент же 3D сцены начинается со следующего объекта, который называется “Node”. Массив сцен и нод был упомянут не зря, т.к. возможность хранить несколько сцен в одном файле реализована, но на практике стараются хранить одну сцену в одном файле.
Каждая нода является “входной точкой” для описания отдельных объектов. Если объект сложный и состоит из нескольких мешей, то такой объект будет описан «родительской» и «дочерними» нодами. Например, автомобиль, который состоит из корпуса и колес, может быть описан следующим образом: основная нода описывает машину и, в частности, ее корпус. В этой ноде содержится список “дочерних нод”, которые, в свою очередь, описывают уже оставшиеся составные части, такие как, к примеру, колеса. Обработка всех элементов будет осуществляться рекурсивно. Ноды могут иметь TRS (translation, rotation, scale a.k.a. смещени е, поворот и масштабирование) анимации. Кроме того, что такие трансформации влияют непосредственно на сам меш, они точно также воздействуют и на дочерние ноды. В довесок ко всему вышесказанному думаю стоит упомянуть, что внутренние «камеры», если таковые имеются, которые отвечают за отображение для пользователя объекта в кадре, также прикреплены к объекта Node. Объекты ссылаются друг на друга используя соответствующий атрибуты: scene имеет атрибут node, node объект имеет атрибут mesh. Для более простого понимания всё вышесказанное проилюстрировано на следующем рисунке.
Buffer, BufferView и Accessor
JSON в нашем примере с треугольником будет выглядеть следующим образом:
Пример буфера, закодированного в base64:
Если же у вас будет внеший файл, то JSON преобразует свой вид в следующий:
Блок Buffers также имеет дополнительный атрибут byteLength, который хранит в себе значение размера буфера.
Первым шагом в структуризации данных из буфера служит объект BufferView. BufferView можно назвать «срезом» информации из Buffer, который характеризуется определенным сдвигом байт от начала буфера. Данный «срез» описывается при помощи 2х атрибутов: отсчет “сдвига” от начала буфера для считывания и длинной самого среза. Простой пример нескольких объектов BufferView для наглядности их использования на основе нашего примера:
Как вы видите, в данном примере содержится 4 основных атрибута:
Стоит сказать еще пару слов об атрибуте target. Он используется для классификации типа информации на которую ссылается bufferView. Здесь всего 2 варианта: либо это будет значение 34962, которое используется для ссылки на атрибуты вертексов (vertex attributes — 34962 — ARRAY_BUFFER) или же 34963, которое используется для индексов вертексов (vertex indices — 34963 — ELEMENT_ARRAY_BUFFER). Последним штрихом при для понимания и структуризации всей информации в Buffer является объект Accessor.
Accessor — это объект, который обращается к BufferView и содержит атрибуты, которые определяют тип и расположение данных из BufferView. Тип данных аксессора кодируется в type и componentType. Значением атрибута type является строка и имеет следующие значения: SCALAR для скалярных значений, VEC3 для 3х мерных векторов и MAT4 для матрицы размерностью 4х4 или же кватерниона, который используется для описания rotation (поворота).
В свою очередь componentType указывает тип компонентов этих данных. Это GL константа, которая может иметь такие значение, как, к примеру, 5126 (FLOAT) или 5123 (UNSIGNED_SHORT), для указания того, что элементы имеют плавающую запятую и т.п.
Различные комбинации этих свойств могут использоваться для описания произвольных типов данных. Пример основанный на нашем треугольнике.
Разберём атрибуты, представленные в JSON:
Объект Meshes содержит информацию о мешах, расположенных в сцене. Одна нода (node объект) может хранить только 1 меш. Каждый объект типа mesh содержит массив типа mesh.primitive, в свою очередь примитивы — это примитивные объекты (к примеру треугольники) из которых состоит непосредственно меш. Данный объект содержит много дополнительных атрибутов, но все это служит одной цели — правильному хранению информации об отображении объекта. Основные атрибуты меша:
Данный объект будет иметь следующий вид для нашего случая:
К сожалению из-за ограничения весь материал не вместился с одну статью, поэтому оставшуюся часть можно найти во второй статье, в которой мы рассмотрим оставшиеся артефакты: Material, Texture, Animations, Skin и Camera, а также соберём минимальный рабочий GLTF файл.
.glb Расширение файла
Тип файла1 STK Globe File
Binary
This file is saved in a binary format, which requires a specific program to read its contents.
Что такое GLB файл?
Файл, используемый STK, программа, используемая для моделирования и операционных миссий для космоса, систем защиты и электронных систем; хранит глобус, который представляет собой 3D-модель имитируемого или реального мира; используется для обмена глобусами с другими пользователями STK; могут быть импортированы и экспортированы с использованием компонента STK Globe Manager.
Файлы GLB также могут быть загружены на сервер Globeserver, в котором хранятся файлы для многопользовательского доступа.
Тип файла2 Glulx Blorb Game File
Binary
This file is saved in a binary format, which requires a specific program to read its contents.
.GLB вариант № 2
Игровой файл, созданный в формате Glulx Blorb, формат, используемый для объединения разных файлов игровых ресурсов в один архив; может содержать графику, информацию уровня, музыку или другие данные; используемые играми, такими как DemonStar, игра с вертикальным прокруткой шутеров, которая проходит в космосе.
Файлы GLB изначально были предназначены для использования с текстовыми приключенческими играми «Z-machine», но были адаптированы для других типов игр.
Тип файла3 Binary GL Transmission Format File
Binary
This file is saved in a binary format, which requires a specific program to read its contents.
.GLB вариант № 3
Файлы GLB похожи на файлы GLTF, поскольку они могут включать внедренные ресурсы или могут ссылаться на внешние Ресурсы. Если файл GLB поставляется с отдельными ресурсами, скорее всего, это будут следующие файлы:
glTF разработан как эффективный, расширяемый, совместимый формат для передачи и загрузки 3D-контента. Цели формата включают в себя: компактные размеры файлов, быструю загрузку, полное представление 3D-сцены, независимость от времени выполнения и расширяемость для сопровождения дальнейшего развития. Для получения дополнительной информации о glTF нажмите здесь.
О GLB файлах
Тип файла Binary GL Transmission Format File, описания программ для Mac, Windows, Linux, Android и iOS, перечисленные на этой странице, были индивидуально исследованы и проверены командой FileExt. Мы стремимся к 100-процентной точности и публикуем только информацию о форматах файлов, которые мы тестировали и проверяли.
форматы glb/gltf
Кто что может рассказать о специфике работы?) Пнятно, что затекстурил, выбрал в сабстансе, как gfltf и выгрузил ( и опять везде пишут рекомендации по 1024 х1024 px. но некоторые выгружают 2048х2048?. Вопрос, что дальше делать и как проверить затекстуренное? Залить на фейсбук и покрутить?) или может еслть прогграммы для этого?
зы. Соррян за тупые вопросы)
Разобрался. Можно удалить!
Разобрался. Можно удалить!
Поделись с народом раз разобрался)
Так особо и нечего рассказывать.
1) Делаешь модель хайполи
2) птм делаешь мид поли или лоуполи взависимости от задачи. (пункты 1-2 можно варировать)
3) подготавливаешь так, чтобы тексель был на требуемом уровне (развертку подготавливаешь) При необходимости разбиваешь на несколько сетов, чтобы удовлетворить требования
5) выгружаешь текстуры как GLTf
6) Перегоняешь png в jpeg (чтобы уменьшить вес (кроме опасити)) или удаляешь ненужное
6) закидываешь на любой сайт для GLTF (есть онлайн сервисы) где можно покрутить и проверить свое
зы. есть определенные требования к GLtf формату по весу и текстурам инфу можно найти на просторах интернета
Нужен совет человека с опытом подготовки моделей в glb-формате, сам чё-то в лёгком тупике.
Подготавливаю модели мебели для онлайн-крутилок. Схема работы такая:
1. Моделлинг, текстуринг, виз в максе.
2. Экспорт модели в Substance Painter, настройка материалов, экспорт сетов текстур.
4. Экспорт из макса в glb с помощью Babylon File Exporter.
Такое чувство, что не работает текстура в рафнесс. Но, все остальные материалы кроме тканей показываются корректно.
Буду рад любой наводке, которая поможет отыскать «вредителя» в процессе работы, идентифицировать его и принять меры к устранению. Если есть опытный человек, готовый решить этот вопрос за деньги, тоже буду рад, ибо моего опыта явно не хватает, чтобы понять эту внезапную аномалию.
возможно баг экспортера.такое бывает
попробуйте на других сервисах проверить модель
возможно баг экспортера.такое бывает
попробуйте на других сервисах проверить модель
Но в то же окно загруженная старая модель работает, значит у меня что-то поменялось. А вот куда именно смотреть, ума не приложу.
Цитата Zeeed3D:
возможно баг экспортера.такое бывает
попробуйте на других сервисах проверить модель
Но в то же окно загруженная старая модель работает, значит у меня что-то поменялось. А вот куда именно смотреть, ума не приложу.
Нужен совет человека с опытом подготовки моделей в glb-формате, сам чё-то в лёгком тупике.
Подготавливаю модели мебели для онлайн-крутилок. Схема работы такая:
1. Моделлинг, текстуринг, виз в максе.
2. Экспорт модели в Substance Painter, настройка материалов, экспорт сетов текстур.
4. Экспорт из макса в glb с помощью Babylon File Exporter.
Такое чувство, что не работает текстура в рафнесс. Но, все остальные материалы кроме тканей показываются корректно.
Буду рад любой наводке, которая поможет отыскать «вредителя» в процессе работы, идентифицировать его и принять меры к устранению. Если есть опытный человек, готовый решить этот вопрос за деньги, тоже буду рад, ибо моего опыта явно не хватает, чтобы понять эту внезапную аномалию.
Я обычно сразу с сабстенса выгружаю, там же есть специальный пресет для GLTF
А вообще, достаточно смешно, что заказчик требует картинку как на рендере в GLTF. Такое не бывает, т.к. текстуры сильно ужимаются и ограничения на 3,0-3,5 мб по весу. Но при этом еще на маты надо разбить и соответсвенно не которые карты всего 512 px.
Что это за файл — GLB? Как вы конвертируете файлы glb?
Так же, как мы используем формат файла ZIP для уменьшения размера нескольких файлов, GLB используется для уменьшения размера glTF файлы. В этом посте мы объясняем, что такое .glb файл, и как вы можете конвертировать файлы GLB. К сведению: glTF — это расширение файла, используемое 3D приложения которые содержат информацию о 3D-сцене.
Что такое файл GLB
GLB — это двоичный формат файла, также известный как JPEG для 3D, который описывает 3D-сцены для веб-форматов. Таким образом, GLB в конечном итоге представляет собой представление 3D-моделей, сохраненных в формате передачи GL. Информация включает #d детали, такие как камеры, материалы, иерархию узлов, анимацию. Короче говоря, все важные данные, которые могут помочь воссоздать 3D-сцену.
Как конвертировать файлы glb в PNG или JPEG
Файлы GLB содержат изображения, которые используются в 3D-сцене. Эти изображения качественные и могут представлять интерес. Тем не менее, вы не можете преобразовать, потому что это контейнер, но вы можете извлечь из него файл. glTF-Shell-Extensions — бесплатный инструмент имеется в наличии в GitHub. После установки программа будет добавлять контекстное меню — распаковать в glTF — каждый раз, когда вы щелкаете правой кнопкой мыши файл GLB. Если вы выбрали извлечение, выберите распаковку изображений в отдельную папку. Это гарантирует, что вам не придется исследовать, чтобы найти, где доступны все изображения.
Как конвертировать файлы glb в FBX, OBL и STL
Вы можете конвертировать в один из этих форматов на сайте anyconv.com. Время обработки будет зависеть от размера файла GLB, и для открытия этого формата вам потребуются приложения, которые могут его поддерживать.
Надеюсь, вам удалось преобразовать или извлечь изображения из файла GLB на вашем компьютере.
Хотите узнать больше о других файлах, типах и форматах файлов в Windows? Проверьте эти ссылки:
Расширение файла GLB
Что это за файл — GLB?
GLB file is a GIS document used by Systems Tool Kit software. GLB file contains a globe, that is a 3D model of given terrain. Globes are used to simulate and analyze land, space, sea, and air objects. The projects is actively developed by engineers form AGI.
GLB files can be viewed and edited offline using Globe Manager STK tool or online using Globeserver service. Globes can be shared online with other users.
Файл GLB представляет собой документ ГИС, используемый программным обеспечением Systems Tool Kit. Файл GLB содержит глобус, который является трехмерной моделью данной местности. Глобусы используются для моделирования и анализа наземных, космических, морских и воздушных объектов. Проекты активно разрабатываются инженерами из AGI.
Файлы GLB можно просматривать и редактировать в автономном режиме с помощью инструмента Globe Manager STK или в Интернете с помощью службы Globeserver. Глобусы могут делиться в Интернете с другими пользователями.
Программа(ы), умеющие открыть файл .GLB
Windows
Как открыть GLB файлы
В дальнейшей части этой страницы Вы найдете другие возможные причины, вызывающие проблемы с файлами GLB.
Возможные проблемы с файлами в формате GLB
Отсутствие возможности открытия и работы с файлом GLB, совсем не должен значить, что мы не имеем установленного на своем компьютере соответствующего программного обеспечения. Могут выступать другие проблемы, которые также блокируют нам возможность работы с файлом STK Globe Format. Ниже находится список возможных проблем.
Если Вы уверены, что все перечисленные поводы отсутствуют в Вашем случае (или были уже исключены), файл GLB должен сотрудничать с Вашими программами без каких либо проблем. Если проблема с файлом GLB все-таки не решена, это может значить, что в этом случае появилась другая, редкая проблема с файлом GLB. В таком случае остается только помощь специалиста.
Похожие расширения
| .adf | ArcView ARC/INFO Coverage Data Format |
| .apl | ArcPad Layer Format |
| .apr | ArcView Project Format |
| .aqm | AlpineQuest GPS Hiking Map Format |
| .at5 | Lowrance Chart Format |
| .atx | Animation Master Plugin Format |
| .avl | ArcView Legend Template Format |
| .axe | Microsoft Autoroute Map Format |
Как связать файл с установленной программой?
Есть ли универсальный метод открытия неизвестных файлов?
Многие файлы содержат данные в виде текста или чисел. Возможно, что во время открытия неизвестных файлов (напр. GLB) популярный в системе Windows простой редактор текста, которым является Notatnik позволит нам увидеть часть данных, закодированных в файле. Этот метод позволяет просмотреть содержимое многих файлов, однако не в такой форме, как программа, предназначенная для их обслуживания.









