glTF (GL Transmission Format) представляет собой открытый формат для передачи 3D-сцен и моделей, разработанный для эффективного обмена между приложениями и вебом. Формат ориентирован на лёгкое считывание и рендеринг, что делает его стандартом де-факто для веб-графики и интеграции с библиотекой Three.js.
Файл glTF структурно состоит из JSON-описания, бинарных буферов и внешних текстур. JSON описывает объекты сцены, их иерархию и свойства, а бинарные буферы содержат геометрию, скелеты и анимации. Основные элементы:
Меш — это базовый строительный блок 3D-объекта. В glTF меш состоит из primitives, каждый из которых содержит:
POSITION), нормали (NORMAL), UV-координаты
(TEXCOORD_0) и дополнительные атрибуты для шейдеров.Формат поддерживает несколько primitive в одном меше, что позволяет использовать разные материалы на разных частях модели.
glTF использует Physically Based Rendering (PBR), что обеспечивает реалистичное освещение. Основные типы свойств:
OPAQUE, MASK, BLEND.В Three.js материалы glTF преобразуются в
MeshStandardMaterial, который полностью поддерживает
PBR.
Анимации в glTF состоят из трёх ключевых объектов:
LINEAR, STEP, CUBICSPLINE) и
связывают временные метки с данными трансформаций.translation,
rotation, scale, weights).Анимации могут управлять положением, вращением, масштабом узлов, а также морфингом мешей для выражения лицевых эмоций или деформаций.
Сцена в glTF — это набор узлов, который может включать вложенные сцены. Узлы обеспечивают иерархию трансформаций:
translation, rotation, scale и
matrix, влияющие на все дочерние объекты.Для оптимизации передачи данных glTF использует буферы:
.bin) или Base64.FLOAT,
UNSIGNED_SHORT), количество компонентов (например, 3 для
векторов), нормализация.Это позволяет Three.js напрямую использовать данные для создания
BufferGeometry, минуя дополнительные преобразования.
В Three.js для работы с glTF используется класс GLTFLoader. Основные шаги:
const loader = new THREE.GLTFLoader();
loader.load('model.gltf', (gltf) => {
scene.add(gltf.scene);
});
gltf.scene – корневая сцена.gltf.animations – массив анимаций.gltf.scenes – массив всех сцен в файле.gltf.cameras – массив камер.gltf.asset – метаданные файла.THREE.AnimationMixer, применяя ключевые кадры к нужным
узлам.glTF поддерживает расширения, которые позволяют добавлять нестандартные материалы, шейдеры, физику или дополнительные свойства. Распространённые расширения:
Эффективная организация узлов, правильное использование материалов и буферов критически важны для производительности, особенно в веб-приложениях с большими сценами.
Этот подход к структуре glTF позволяет создавать сложные, анимированные 3D-сцены с высоким уровнем детализации, поддерживая физически корректное освещение и совместимость с Three.js.