Загрузчик для ресурсов glTF 2.0.
glTF (GL Transmission Format) — это спецификация открытого формата для эффективной доставки и загрузки 3Д-контента. Ассеты могут предоставляться как в формате JSON (.gltf), так и в бинарном формате (.glb) (оба поддерживают компрессию LZMA). Внешние файлы хранят текстуры (.jpg, .png, .webp, .hdr) и дополнительные двоичные данные (.bin). Ассет glTF может предоставлять одну или несколько сцен, и включать меши, материалы, текстуры, скины, скелеты, морфинг, анимацию, свет, световые зонды, шрифты и камеры.
GLTFLoader использует ImageBitmapLoader когда это возможно. Учитывайте что хранящиеся в таком формате карты изображений автоматически не собираются сборщиком мусора и требуют ручной обработки во время выгрузки сцены.
Чаще всего GLTFLoader вам не потребуется использовать напрямую. Вместо этого используйте метод App.loadScene и App.appendScene, скрывающие сложность обработки ассетов в формате glTF 2.0.
GLTFLoader поддерживает следующие S8S-расширения glTF 2.0:
А также стандартные расширения glTF 2.0:
// создаёт экземпляр загрузчика
const loader = new GLTFLoader();
// загружает glTF-ресурс
loader.load(
// УРЛ
'duck.gltf',
// вызывается когда ресурс загружен
function(gltf) {
app.scene.add(gltf.scene);
gltf.animations; // массив v3d.AnimationClip
gltf.scene; // v3d.Scene
gltf.scenes; // массив v3d.Scene
gltf.cameras; // массив v3d.Camera
gltf.asset; // object
gltf.world; // object
},
// прогресс
function(xhr) {
console.log((xhr.loaded / xhr.total * 100) + '% loaded');
},
// вызывается в случае ошибок
function(error) {
console.log('An error happened');
}
);
Текстуры, содержащие информацию о цвете (напр. MeshStandardMaterial.map), всегда используют цветовое пространство sRGB, тогда как вертексные цвета и параметры материалов (напр. MeshStandardMaterial.color) используют линейное пространство. В типовом случае рендеринга, все текстуры конвертируются в линейное пространство, далее в этом производятся расчёты освещения, после чего результат конвертируется обратно в sRGB. За исключением случаев, когда требуется производить пост-обработку в линейном пространстве, всегда выставляйте пространство WebGLRenderer при использовании формата glTF в:
renderer.outputEncoding = v3d.sRGBEncoding;
GLTFLoader автоматически установит цветовое пространство текстур, загруженных из .gltf or .glb файла, только если указанная выше настройка произведена. Если же вы загружаете текстуры снаружи (например, с помощью TextureLoader) и применяете эти текстуры на glTF-моделях, цветовое пространство и ориентация должны быть установлены вручную:
// устанавливаем цветовое пространство
texture.encoding = v3d.sRGBEncoding;
// делаем так, чтобы координата (0, 0) соответствовала верхнему левому краю текстуры
texture.flipY = false;
Метаданные из неизвестных загрузчику расширений сохраняются в поле .userData.gltfExtensions
экземпляров Object3D, Scene, и Material, либо назначаются на возвращаемом объекте gltf
. Например:
loader.load('foo.gltf', function(gltf) {
const scene = gltf.scene;
const mesh = scene.children[3];
const fooExtension = mesh.userData.gltfExtensions.EXT_foo;
gltf.parser.getDependency('bufferView', fooExtension.bufferView).then(function(fooBuffer) { ... });
});
Создает новый GLTFLoader.
Смотрите свойства базового класса.
0
.Загружает и парсит glTF-ресурс по указанному пути и вызывает коллбек с содержимым данного ресурса.
ktx2Loader — экземпляр класса v3d.KTX2Loader, используемый для загрузки сжатых текстур формата KTX2.
Парсит glTF-данные и выполняет коллбек по завершении. Аргументом коллбека будет объект, содержащий загруженные части: .scene, .scenes, .cameras, .animations и .asset.
«Вердж3Д» поддерживает 2 пазла, упрощающие загрузку ресурсов в формате glTF 2.0:
О том как получить исходный код этого модуля читайте тут.