Файл gltf чем открыть
JPEG от мира 3D. Что такое glTF?
Определение и краткая история
GLTF (GL Transmission Format) — это формат файла для хранения 3Д сцен и моделей, который является крайне простым в понимании (структура записана в стандарте JSON), расширяемым и легко взаимодействующим с современными веб-технологиями. Данный формат хорошо сжимает трёхмерные сцены и минимизирует обработку во во время выполнения приложений, использующих WebGL и другие API. glTF сейчас активно продвигается Khronos Group как JPEG от мира 3D.
Предполагается, что glTF будет эффективным, совместимым форматом доставки активов, который сжимает размер трехмерных сцен и минимизирует обработку во время выполнения приложениями, использующими WebGL и другие API. glTF также определяет общий формат публикации для инструментов и сервисов 3D-контента.
Первые упоминания о glTF датируются 2012м годом, но в обиход он вошел с 19 октября 2015 года, вместе с анонсом спецификации glTF 1.0. На данный момент используется 2я версия спецификации (glTF 2.0), которая вышла 3 марта 2017. Далее речь будет идти только про glTF 2.0.
Детальное описание внутренностей данного формата можно найти в моих последующих публикациях: первая часть и вторая часть
Основа glTF и его плюсы
glTF базируется на 2х файлах: JSON для описания структуры всей 3D сцены и бинарного файла, для хранения всех данных из сцены, включая текстурные карты, которые можно «вшивать» в бинарный файл или хранить внешними файлами. Существует и бинарная версия glTF, которая называется GLB, единственное различие которого в том, что все хранится в 1м файле с расширением GLB.
В качестве дополнительных плюсов в glTF можно выделить:
На сегодняшний день 3D приходит к клиенту из абсолютно разных источников, каждый со своим форматом. Далеко не вся информацию нужна пользователю, не все форматы могут быть открыты в его приложении. Структура сцены должна быть проанализирована, данные трехмерной геометрии преобразованы в формат, требуемый графическим API. 3D данные должны быть переданы в память видеокарты, затем процесс рендеринга может быть описан с помощью последовательных вызовов графического API. Как итог, каждое исполняемое приложение должно создавать свои импортеры, загрузчики или конвертеры для всех форматов файлов, которые оно будет поддерживать, как показано на слайде.
GLTF формат определяет стандарт для представления 3D контента в форме, подходящей для использования в приложении во время выполнения (runtime). Существующие форматы плохо подходят для передачи через интернет: некоторые содержат лишь информацию о геометрии, некоторые содержат в себе абсолютно все и получаются слишком громоздкими по размеру и трудными для анализа, не говоря уже о запуске в режиме реального времени (runtime).
GLTF был разработан как раз для того, чтобы решить эту проблему. Это не «еще один формат файла», коих и так уже очень много, это определение формата передачи 3Д сцен!
Структура сцены, описываемая JSON может легко быть проанализирована, 3Д данные хранятся в форме, легко читаемой и используемой напрямую графическими API-интерфейсами, в связи с чем нету необходимости в декодировании или предварительной обработке 3Д данных. Таким образом GLTF может помочь преодолеть разрыв между созданием контента и рендерингом.
Основы формата 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 файл.
Как экспортировать (и распространять) 3D-графики результатов расчета в виде файлов формата glTF™
Ищете легкий и визуально привлекательный способ поделиться трехмерными графиками результатов, полученных с помощью программного обеспечения COMSOL Multiphysics®? В этой статье мы расскажем, как экспортировать ваши трехмерные графики в виде файлов формата glTF™, открывать и делиться ими посредством различных программ для онлайн просмотра и даже в постах на платформе Facebook®.
Различные форматы файлов для экспорта результатов моделирования
Программное обеспечение COMSOL Multiphysics поддерживает экспорт результатов во многих различных форматах. Здесь я перечислю лишь некоторые из доступных возможностей:
А как насчет результатов в трехмерном предствлении?
Khronos Group — это организация, которая помогает производителям графики создавать открытые стандарты, которые любой человек может использовать для создания независимых от платформы графических файловых форматов и прикладных программных интерфейсов (API). Группа Khronos известна двумя своими API: OpenGL® и Vulkan®, — которые используются графическими картами для быстрых и качественных расчетов двухмерной и трехмерной графики, при этом компания также разработала формат файла glTF™ (сокращение от GL Transmission Format, «формат передачи для GL»).
Этот формат можно использовать для обмена полностью трехмерными сценами и графическими моделями между программами. В формате файла glTF™ особое внимание уделяется отображению на дисплее трехмерного изображения, а не точности экспортируемой геометрии. Это означает, что данный графический формат хорош для экспорта визуально выразительных трехмерных результатов, но не для экспорта геометрий и результатов, которые будут использоваться при дальнейшем моделировании.
Для экспорта трехмерных результатов теперь вы можете использовать формат glTF™. Множество организаций и программ преобразования файлов поддерживают glTF™, включая компании из индустрии компьютерной графики, поставщики программного обеспечения и компании, создающие открытый программный код. Файлы glTF™ представлены в двух вариантах:
Можно преобразовать GLB-файл в файл glTF™ и наоборот.
Как экспортировать 3D результаты расчета из COMSOL Multiphysics®
Начиная с версии 5.4 COMSOL Multiphysics® можно экспортировать результаты в виде файлов glTF™. Программное обеспечение COMSOL® экспортирует GLB-файлы, которые легко открывать и можно использовать для обработки геометрии в других программах.
Обратите внимание, что можно экспортировать только трехмерные результаты, так как форматы glTF™ и glb поддерживают только трехмерную графику.
Результаты можно экспортировать либо добавлением операции Export Image (Экспорт изображения) в дереве модели, либо просто щелчком по кнопке Image Snapshot (Снимок/скриншот изображения) в верхней части Графического окна. Последний метод — более простой. При нажатии кнопки Image Snapshot (Снимок изображения), которая имеет иконку в виде значка камеры, открывается диалоговое окно. В диалоговом окне вы можете выбрать опцию экспорта в формат glTF™ и указать, какое имя файла следует использовать. Вам не нужно указывать расширение для имени файла, так как автоматически будет использоваться расширение GLB.
Когда вы нажмете OK, файл будет экспортирован и готов к использованию с помощью любых графических программа, которые могут отображать и работать с объектом. Обратите внимание, что экспортируется только основное содержимое Графического окна. Элементы, такие как название графика и легенда, не экспортируются, поскольку формат файла glTF™ не поддерживает эти элементы.
Как загрузить файл glTF™ в ваш пост на Facebook®
Платформа Facebook® уже некоторое время поддерживает формат glTF™. Экспортированный GLB-файл легко вставить в пост на Facebook®, но перед этим важно знать о некоторых ограничениях.
В настоящее время Facebook® поддерживает только GLB-файлы размером не более 3 МБайт. Файлы, содержащие графики результатов, созданные в COMSOL Multiphysics, могут быть намного больше этого предельного размера, поэтому следует подумать, как уменьшить количество данных, включенных в графический файл. Кроме того, Facebook® не поддерживает графики, которые включают точки и линии. Это серьезное ограничение для большинства трехмерных графиков, так как края/границы используемого набора данных отображаются по умолчанию, и для их отображения всегда используются линии. Для того, чтобы обойти данное ограничение, нужно снять опцию Plot data set edges (Отображать границы набора данных) для тех групп графиков, которые вы хотите экспортировать (вы всегда можете повторно включить опцию после экспорта).
Существуют и другие типы графиков, которые создают линии. Чаще всего, это графики типа Streamline (линии тока). Если у вас есть график типа Streamline, то вы можете переключиться на отображение лент или трубок вместо линий. Имейте в виду, что использование отображения в виде трубок обычно приводит к созданию довольно больших GLB-файлов.
После изменения параметров экспорта для соответствия спецификациям платформы Facebook® вы можете вставить GLB-файл в свой пост, просто перетащив его в пустую запись. Блок с записью изменится и покажет, куда можно перетащить файл, как показано ниже:
Просто перетащите GLB-файл и, если хотите, напишите подпись к изображению. Теперь, когда GLB-файл встроен в ваше сообщение, ваши друзья, коллеги и подписчики на Facebook® смогут просматривать, вращать и изменять масштаб иллюстрации.
Обратите внимание, что текущие ограничения на размер файла и содержимое, налагаемые Facebook, скорее всего, со временем изменятся. Мы ожидаем, что в будущем появится поддержка более крупных файлов, а также точек и линий на графиках.
Инструменты для просмотра трехмерных изображений в формате glTF™
Формат glTF™ уже поддерживается многими графическими редакторами и программами для просмотра графических изображений. Одна из таких программ для графического просмотра доступна онлайн в вашем браузере: https://gltf-viewer.donmccurdy.com/. Вы можете просто перетащить свой GLB-файл во вкладку браузера с откртытым онлайн-просмотрщиком. Данная программа для просмотра поддерживает линии и точки, а также поверхности, поэтому все функции COMSOL Multiphysics можно экспортировать и просмотреть с помощью этого инструмента.
Поддержка файлов glTF™ в продуктах Microsoft
Компания Microsoft® также начала поддерживать формат glTF™ в своих различных инструментах. Windows® 10 поставляется с приложением Paint 3D, которое сильно отличается от старого приложения Paint, появившегося еще в Microsoft® Windows® 1.0. В Paint 3D добавлены возможности импорта и экспорта файлов glTF™ для создания изображений и сцен. Вы также можете рисовать на импортированных объектах в 3D!
Файл glTF™, открытый в приложении Microsoft® Windows® Paint 3D.
В последней версии Windows® 10, в обновлении от ноября 2018 года, появилось новое приложение 3D Viewer, которое можно использовать для просмотра файлов glTF™ и трехмерных файлов других форматов. Если у вас есть Microsoft® Office 365 или Office 2019, вы можете вставить файлы glTF™ в PowerPoint®, Word или Excel®, чтобы создавать презентации и документы с точным трехмерными изображениями, полученными в COMSOL Multiphysics® и в других источниках. Microsoft® Office поддерживает прямой импорт трехмерных файлов из Интернета для создания более насыщенных и привлекательных документов. Обратите внимание, что упомянутые здесь программы от Microsoft® не поддерживают графику, содержащую линии и точки, поэтому данное ограничение нужно обходить так же, как и при создании GLB-файла для публикации в Facebook®.
Дальнейшие шаги
Узнайте больше о специализированных функциях для обмена результатами расчетов, проведенных в COMSOL Multiphysics — обратитесь к нам для получения тральной версии программного обеспечения.
Ознакомьтесь с другим функционалом по экспорту результатов моделирования:
ACIS является зарегистрированной торговой маркой компании Spatial Corporation. Facebook является зарегистрированным товарным знаком Facebook, Inc. glTF и логотип glTF являются товарными знаками Khronos Group Inc. Microsoft, Excel и PowerPoint являются зарегистрированными товарными знаками или товарными знаками Microsoft Corporation в США и/или других странах. OpenGL является торговой маркой или зарегистрированной торговой маркой компании Silicon Graphics, Inc. в США и (или) других странах мира. Parasolid является зарегистрированной торговой маркой или торговой маркой компании Siemens Product Lifecycle Management Software Inc. или ее дочерних компаний в США и других странах. VTK является зарегистрированным товарным знаком Kitware, Inc. Vulkan и логотип Vulkan являются зарегистрированными товарными знаками Khronos Group Inc.
Рубрики блога
Файл gltf чем открыть
Всем привет. Хочу поделиться плагином, который позволяет импортировать glTF и GLB в Cinema 4D. Присутствует возможность импорта текстур и анимации. Протестирован на версиях R19, R21 и R23.
Работа над ним не закончена, в ближайшие пару недель постараюсь добавить пару функций в меню импорта и улучшить быстродействие.
На данный момент самые времязатратные функции это импорт UV развертки и создание тега Фонга вместо Тега нормалей.
Хочу поделиться плагином, который позволяет импортировать glTF и GLB в Cinema 4D.
А можно для самых «деревянных» ( ) объяснить очень коротко и популярно про форматы glTF и GLB (ну чтобы не тратить время на поиски в интернете и затем изучение)?
Класс! Спасибо, @Magnus!
Проверил на glTF — работает хорошо. Было бы ещё отлично если бы в какой-то из будущих версий он доставал имена объектов из файла. Но и без того это уже очень круто.
@aler, если вкратце, то этот формат используется в вебе. Он вроде бы специально для него и создан. Хорошо оптимизирован под это дело.
Но, думаю, @Magnus может рассказать детальнее.
Я экспортировал модель из Блендера. И в JavaScript получаю доступ к имени из массива nodes, вот так: nodes[0].name
Вот сам файл: https://nordskill.com/files/book_v2.gltf
@magnus Как установить этот плагин?
недавно столкнулся с этим форматом, крутил его, вертел, так и ничего не понял, большое спасибо, будем тестить. но возник резонный вопрос, а наоборот можно конвертировать?
@vlad1 обратно — чере экспорт.
Ещё у нас тут была тема о том как экспортировать в glTF.
@aleksei что-то у меня в 18 версии тишина.
@vlad1 а это появилось только в 21–22 версии. Если очень нужен именно glTF, то могу порекомендовать экпортировать FBX в Блендер. А из блендера — в glTF.
@magnus супер, всё открывает, большое спасибо
@magnus Спасибо за плагин. На MacOS он должен работать? При установке в C4D R23 и рестарте, MacOS предлагала разрешить пользование библиотеками из этого плагина, т.е. плагин был увиден в C4d, Однако далее я не вижу никаких следов его присутствия в C4D, например в меню Extensions. Я все правильно делаю?
такое впечатление, что ваш плагин надо допиливать под каждую модель. как-то выборочно открывает