Threejs/Blender: Как определить тип используемой карты текстуры на основе изображения текстуры
Я скачал несколько 3D моделей с сайта sketchfab. Импортировал их в blender и экспортировал с помощью gltf exporter в файл.gltf и использовал один и тот же файл в течение трех js для отображения 3D-изображения в браузере...(Я не применял текстуры в blender, так как хочу применить файлы текстур непосредственно в threejs). Я мог бы сделать все успешно, но не мог понять, как сопоставить файлы текстуры в три js... т.е. скачанный zip из sketchfab содержит 3 файла текстуры, и мне нужно применить их к 3D-объекту... Как решить, какие карты на используйте ie diffusemap, specular map и т. д..... чтобы применить эти текстуры. Кроме того, я хочу определить карту текстуры программно на основе изображения текстуры... Возможно ли это? Мне нужно решить это программно только потому, что конечный пользователь, который использует мое приложение, просто предоставит в качестве входных данных файл 3d-модели (.obj, .3ds и т. Д.) Вместе с файлами текстур и ожидает увидеть полный 3D-объект на браузер с отлично примененными текстурами. Может кто-нибудь, пожалуйста, помогите мне в этом?
2 ответа
Да. Это может быть довольно сложно решить. Подход, который я использовал / использую сейчас... заключается в том, чтобы позволить пользователю загружать файлы на сервер, а затем использовать три для загрузки его с сервера. Это требует, чтобы пути к текстурам были относительными путями... (что не всегда так.) Но, похоже, работает достаточно хорошо для моих целей...
Я не мог найти способ постоянно разрешать мне перехватывать загрузку разных частей, в течение трех.js. Было бы хорошо, если бы существовал интерфейс к загрузчику, который позволял бы вам подключить "поставщика ресурсов", который загрузчик использует для получения ресурсов для загрузки определенной вещи. Таким образом, по умолчанию, он будет просто загружать вещи как обычно, но если вы предоставите обратный вызов, вы можете перехватить URL-адрес и перенаправить его, или синтезировать объект "Файл" в памяти для использования в качестве ответа. Это может включать такие вещи, как предварительная обработка текстур и переназначение отсутствующих / абсолютных ссылок на текстуры.
Я полагаю, что вы могли бы реализовать это на сервере, перехватывая запрос и перераспределяя их, но это звучит действительно сложно, поскольку для этого требуется, чтобы сервер поддерживал состояние каждого пользователя в контексте того, что они запрашивают, и управлял всем жизненным циклом этого.
Но в своих исследованиях я не нашел способа сделать это, поэтому пока я либо сохраняю модели в их первоначальном формате (в виде каталога на моем сервере вместе с их текстурами / анимациями / и т. Д.), Либо храню их временно разрешить пользователю просматривать их / исправлять их / изменять их размер / группировать их, а затем я экспортирую результаты этих операций в формат THREE.JSON или GLTF и сохраняю их на моем сервере.
Надеюсь, что это помогает, и я надеюсь, что некоторые люди, возможно, вмешиваются с дополнительной информацией....
Спасибо, Мантракс. Мое приложение использует 3D-модель (.obj, .dae и т. Д.) И файлы текстур в качестве входных данных и транскодируется в файл формата gltf, который берется в качестве входных данных для Threejs для отображения полного трехмерного объекта в браузере. Это то, что мне нужно добиться.. Я внес изменения по мере необходимости. Я скачал несколько моделей с веб-сайта sketchfab и попытался протестировать свое приложение. Я думал, что будут файлы.mtl и файлы текстур будут связаны с ними, или файлы текстур могут быть связаны с основным файлом (.obj, .3ds и т. Д....). Тем не менее, я не мог видеть никаких таких ссылок, и я подумал, что мне нужно связать файлы текстур с соответствующими картами (диффузная карта и т. Д.) Программно в три раза, чтобы я мог видеть изображение с текстурами в браузере. Теперь проблема в том, какой файл текстуры должен быть связан с какой картой... и теперь, увидев ваши ответы, я понял, что это невозможно сделать без вмешательства пользователя. Возможно, приложению потребуется предоставить пользователю платформу или диалоговое окно. связать файлы текстуры с соответствующими картами. Правильное ли это понимание? С этой проблемой не сталкиваются при импорте файлов, ссылки на которые уже существуют в файлах.obj/.mtl, поскольку сгенерированный файл.gltf будет иметь ссылки на текстуры, а загрузчик gltf выдает правильный JSON и, следовательно, Полное изображение с текстурами можно отобразить в браузере. Пожалуйста, исправьте меня, если я ошибаюсь.