Three.js: Погрузчики

Созданный на 28 окт. 2014  ·  66Комментарии  ·  Источник: mrdoob/three.js

Список загрузчиков, которые было бы неплохо иметь:

3D

Enhancement Loaders

Самый полезный комментарий

Что касается загрузчика 3dm: я начал работать над этим сейчас, когда библиотека openNURBS была скомпилирована в wasm благодаря emscripten ( rhino3dm ).

Я работаю над этим здесь , и поддержка сетки, брепсов, экструзий, облаков точек, материалов, слоев и групп запущена и работает.

image

Соответствующие файлы:

Я надеюсь представить PR с поддержкой большего количества типов объектов когда-нибудь _в ближайшее время_. Я должен признать, что у меня мало опыта работы с веб-воркерами, и я опираюсь на примеры draco и base loader. Надеюсь, #18234 немного упростит это.

ps мы уже добавляем поддержку threejs непосредственно в библиотеку rhino3dm.js, как здесь и здесь .

Редактировать: обновить ссылки, чтобы они указывали на форк McNeel org.

Все 66 Комментарий

Очень обширный список!
Я также предлагаю загрузчик AMF (http://en.wikipedia.org/wiki/Additive_Manufacturing_File_Format).
(формат 3D-файла, используемый для 3D-печати).
У меня уже есть основы загрузчика, так что я мог бы немного изменить его и добавить к примерам.

Большинство из этих загрузчиков более важны для особых случаев, таких как редактор, потому что, скажем, для игр может быть лучше сразу конвертировать в формат three.js, верно? В этих случаях переработчики/экспортеры более важны.

Мы протестировали glTF в качестве замены форматов three в качестве оптимизации — там данные бинарные и могут быть сжаты сжатием geom.

[email protected] kirjoitti 28 октября 2014 г. kello 17:38:

Большинство из этих загрузчиков более важны для особых случаев, таких как редактор, потому что, скажем, для игр может быть лучше сразу конвертировать в формат three.js, верно? В этих случаях переработчики/экспортеры более важны.


Ответьте на это письмо напрямую или просмотрите его на GitHub.

@kaosat-dev Добавлено в список!
@Херст Да. Это в основном для редакторов или приложений, которые не требуют быстрой загрузки.

Я также ищу загрузчик IGES. Я бы даже, возможно, начал строить его сам, но не знаю, с чего начать.

как насчет добавления 3DM (используется Rhinoceros ) в список?

@nyaaao добавил. Благодарность!

О загрузчике 3DS:

Привет всем, давным-давно мне нужно было сделать загрузчик 3DS для 3D-движка 3DzzD Web, это было немного сложно сделать... не сложно получить некоторые первые результаты, а скорее правильно обработать все куски, но через некоторое время Мне удалось создать довольно эффективный загрузчик. Спецификации формата файла 3DS найти сложно, но я нашел тот, который работал довольно хорошо. Я создал загрузчик для 3DzzD с этой документацией, и он работает даже лучше, чем тот, что есть в текущем фотошопе (лучше работает с поворотными/сглаженными группами/масштабом/ключевым кадром/и т. д.), так что вот спецификации, которые я использовал. (Исходный код 3DzzD является открытым и может помочь, но код действительно уродлив... проект десятилетней давности...)

http://dzzd.net/3DSChunkDefinitions.html

О загрузчике OBJ:

Я модифицировал текущий загрузчик OBJ и получил как минимум 10/15 кадров в секунду на многих 3D-моделях, но пока я не нашел, как мне опубликовать эти изменения?

Проблема была в основном из-за того, что текущий загрузчик OBJ создает слишком много объектов (больше, чем исходная 3D-модель, один объект создается при каждом изменении материала), а также 3dFaces с одинаковым материалом не были сгруппированы вместе даже внутри одного объекта, и производил слишком много вызовов WebGL

http://dzzd.net/3DSChunkDefinitions.html

Спасибо! Добавил в первый пост.

Проблема была в основном из-за того, что текущий загрузчик OBJ создает слишком много объектов (больше, чем исходная 3D-модель, один объект создается при каждом изменении материала), а также 3dFaces с одинаковым материалом не были сгруппированы вместе даже внутри одного объекта, и производил слишком много вызовов WebGL

Ой! Интересный. Вы имеете в виду OBJMTLLoader . Правильно?

Ой! Интересный. Вы имеете в виду OBJMTLLoader. Правильно?

Да, если быть более точным, блок "if (/^usemtl /.test(line))" создает новый объект/сетку для каждого переключения материала, это заканчивается плохой производительностью и неправильной иерархией объектов.

Я опубликую простой тестовый пример, показывающий разницу между текущим загрузчиком и модифицированным (разница в основном заметна на мобильном устройстве)

Вот тестовый пример для текущего загрузчика и оптимизированного:

http://demo.dzzd.fr/threejs/OBJMTLLoaderTest/

РЕДАКТИРОВАТЬ:
Я получил 10 FPS на GalaxyTab3 с текущим загрузчиком и более 60 FPS с новым, разницу может быть трудно увидеть на быстрых устройствах.

PS: Если вам интересно, откуда взялась 3D-модель :)

Кто-нибудь знает о ИГЕС. Я действительно мог бы использовать загрузчик IGES. Если бы кто-нибудь мог просто указать мне направление, чтобы начать, как его построить? Или если он где-то есть. Я заметил, что люди на http://www.3dfile.io/ и некоторых других сайтах 3D-визуализации используют ThreeJS и позволяют загружать IGES.

K3D.js (лицензия MIT) имеет парсер для OBJ, 3DS, MD2 и Collada. http://k3d.ivank.net. См. № 3843.

как насчет NIfTI для врача?

@jugl У вас есть информация о формате?

Я очень надеюсь на модели .m2, это огромное сообщество вокруг. Я хотел бы предложить свою помощь с файлами моделей и т. Д. В этом случае вы можете связаться со мной по скайпу: deexone. Как подсказка от одного разработчика библиотеки http://bridge.net/ может быть использована для преобразования его библиотеки в js.

Эй, у меня есть загрузчик BVH, который анализирует файл BVH и выводит THREE.Skeleton и AnimationClip для удобного использования с микшером:
https://github.com/herzig/BVHImporter
и рабочий пример: http://herzig.github.io/BVHImporter/
В основном тестировался на файлах CMU BVH и некоторых других.

Существуют ли какие-либо рекомендации о том, как должен выглядеть API-интерфейс загрузчика?

@herzig Сладко! BVHLoader было бы здорово! Загрузчики в основном имеют .load() и .parse() . Вы можете использовать MD2Loader в качестве эталона, но я был бы рад очистить ваш код, если вы сделаете PR с тем, что у вас есть сейчас (пример + пример анимации также будут очень признательны).

Всем привет,
просто синхронизировать этот список с загрузчиком файлов в репозитории...

3MFLoader отсутствует в списке, но уже реализован.
BinaryLoader отсутствует в списке, но уже реализован.
DDSLLoader отсутствует в списке, но уже реализован.
FBXLoader не проверен, но уже реализован.
HDRCubeTextureLoader отсутствует в списке, но уже реализован.
MD2Loader не проверен, но уже реализован.
NRRDLoader не проверен, но уже реализован.
PCDLLoader отсутствует в списке, но уже реализован.
PlayCanvasLoader отсутствует в списке, но уже реализован.
RGBLLoader отсутствует в списке, но уже реализован.
SVGLoader не проверен, но уже реализован.
TGALoader отсутствует в списке, но уже реализован.
TTFLoader отсутствует в списке, но уже реализован.

следующий:

ASLoader должен быть добавлен в список, и PR будет отправлен в течение нескольких дней.
LASLoader должен быть добавлен в список, и PR будет отправлен в течение нескольких дней.
XYZLoader должен быть добавлен в список, и PR будет отправлен в течение нескольких дней.

С наилучшими пожеланиями,
Тристан

просто синхронизировать этот список с загрузчиком файлов в репозитории...

Обновлено!

OpenCTM может быть хорошим дополнением, поскольку Autodesk использует его для своих
облачный сервис
https://en.m.wikipedia.org/wiki/OpenCTM

В воскресенье, 13 ноября 2016 г., в 6:33 [email protected] написал:

просто синхронизировать этот список с загрузчиком файлов в репозитории...

Обновлено!


Вы получаете это, потому что подписаны на эту тему.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/mrdoob/three.js/issues/5524#issuecomment -260168120,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/AAkmxkkOn179ZJvqc8yScOoxnaDGzuH6ks5q9qE6gaJpZM4CzpFw
.

@dlabz У нас уже есть CTMLoader .

Я работаю с некоторыми разработчиками iOS в области AR, может ли быть загрузчик для двоичных файлов SCN, используемых Apple в ARKit? Я работаю над использованием BinaryLoader, и мы посмотрим, смогу ли я заставить его работать.

Есть ли где-нибудь спецификация для этого формата SCN ?

@mrdoob Извините, что так поздно. NIfTI — это формат данных ЯМР, переданный из DICOM. Мое текущее решение - получить из него 3D-форму в формате VTK/OBJ.

Я понимаю. Где-то есть спецификация?

Как насчет загрузчика IFC. Этот формат очень распространен в строительстве для своей 3D-модели.

@mrdoob Большое спасибо.

@mrdoob каковы рекомендации + необходимые знания для создания загрузчика three.js?
Я хочу построить один, но я хочу быть уверенным, что сделаю это правильно. Спасибо

@Aarbel , для какого формата вы хотите создать загрузчик?

Файлы @looeee .ifc

Базовая структура вашего загрузчика будет выглядеть так:

import {
    FileLoader,
    Loader,
    LoaderUtils
} from '../../../build/three.module.js';

function IFCLoader( manager ) {

    Loader.call( this, manager );

}

IFCLoader.prototype = Object.assign( Object.create( Loader.prototype ), {

    constructor: IFCLoader,

    load: function ( url, onLoad, onProgress, onError ) {

        var scope = this;

        var path = ( this.path !== undefined ) ? this.path : LoaderUtils.extractUrlBase( url );

        var loader = new FileLoader( scope.manager );

        loader.load( url, function ( text ) {

            try {

                scope.parse( text, path, onLoad, onError );

            } catch ( e ) {

                if ( onError !== undefined ) {

                    onError( e );

                } else {

                    throw e;

                }

            }

        }, onProgress, onError );

    },

    parse: function ( text, path, onLoad, onError ) {

        // parsing logic goes here

    }

} );

спасибо, поработаю над этим в следующем месяце

Удачи! 😊

Должен ли по умолчанию crossOrigin быть Anonymous ?

Я повторно использовал шаблон из GLTFLoader и ColladaLoader .

Я хотел бы увидеть загрузчик LWO.
Спецификация файла хорошо документирована здесь: http://static.lightwave3d.com/sdk/2018/html/filefmts/lwo3.html

Я часто вижу, что размер файла LWO составляет около 1/10 размера OBJ, и этот формат может содержать данные морфинга и ряд других функций, которые OBJ не допускает. Также многие модели, которые предоставляет НАСА, представлены только в формате LWO https://nasa3d.arc.nasa.gov/search/lwo/model .

Если бы я знал, что делаю, я бы попытался это запустить, но написание загрузчика выходит за рамки всего, что я делал раньше.

FWIW здесь есть синтаксический анализатор LWO: https://github.com/marcbizal/lwo-parser ... гипотетически это было бы хорошим началом для загрузчика или конвертера, но, к сожалению, он не поддерживает конкретную версию. формата LWO, который использует НАСА. Он ожидает LWOB (двоичный?), но волшебная строка версии на модели НАСА, которую я пробовал, была LWO2. Если вы найдете работающий синтаксический анализатор, написанный на каком-либо языке, отличном от JS, может быть проще написать конвертер на что-то, что поддерживает three.js, чем пытаться написать новый синтаксический анализатор на JS.

Привет, мой график сильно изменился, поэтому нет времени работать над загрузчиком .ifc для three.js. Было бы здорово получить контакт этого парня: https://github.com/mrdoob/three.js/issues/9764

мне жаль, что я не понял

Делал загрузчик "LWO 2". Однако я подумал, что спроса нет, и не выполнил его.

http://adrs2002.com/sandbox/lwoLoader/lwoTest.html
https://github.com/adrs2002/threeLwoLoader

Я надеюсь, что это будет полезно для чего-то.

Всем привет,

Я видел, что М2 есть в списке.

Это интересно для меня, потому что я хотел бы реализовать персонажа, объект, NPC и средство просмотра предметов с помощью Three.

В связи с M2 является синонимом BLP2 (Blizzard Picture File), который аналогичен используемому сжатию текстур DDS S3.

Я нашел до сих пор:

.m2 = https://github.com/vjeux/jsWoWModeViewer

.blp

Я сам пытаюсь добавить это, но я еще слишком неопытен со всем :D

@adrs2002 LWOLoader было бы здорово! Хотели бы вы сделать PR с тем, что у вас есть?

Я сам пытаюсь добавить это, но я еще слишком неопытен со всем :D

Не торопитесь 👌

LWOLader было бы здорово!

Я написал загрузчик LWO3 пару месяцев назад, работая на onthez.com.
Мы договорились о периоде эксклюзивности, тогда мы внесем его сюда. Надеюсь, где-то в конце февраля.

Я думаю, что @jds580s — это Джастин из Z, возможно, он сможет лучше понять, когда мы сможем добавить его сюда.

@мрдуб @looeee
Я думаю, что коммит LWO2 loader не нужен, если будет зафиксирован LWO3 loader loeeee.
Формат LWO3 таков, потому что он содержит все успехи формата LWO2.

LWOLader приземлился! 😁

16011

Какие-нибудь обновления для загрузчика IFC? Было бы неплохо для строительных видов!

Я попробовал IFCLoader и как сказать... Это невозможно! Весь код, необходимый для правильного анализа формата IFC, составляет около 650 файлов классов. (Я знаю это, потому что я сделал это). Загрузчик будет в 5 раз больше библиотеки Threejs.

О спецификации, если вы хотите реализовать свою собственную: http://standards.buildingsmart.org/IFC/RELEASE/IFC4_1/FINAL/HTML/

Я мог бы выпустить свой код, и некоторая помощь в этом была бы крутой. Но не надейтесь увидеть этот загрузчик в ThreeJs раньше времени...

Я мог бы выпустить свой код, и некоторая помощь в этом была бы крутой. Но не надейтесь увидеть этот загрузчик в ThreeJs раньше времени...

Почему нет?

Кстати: недавно я разговаривал с коллегой, и он сказал мне, что IFC основан на формате STEP, который хорошо известен в сообществе САПР. В общем, STEP действительно сложно разобрать, и вам нужно будет написать собственный парсер, похожий на VRMLLoader . Однако файлы IFC также могут быть выражены в формате XML (они имеют расширение .ifcxml ). С такими файлами было бы намного проще работать (см. 3MFLoader или ColladaLoader ), чтобы загрузчик мог сосредоточиться на фактическом построении геометрических данных. Может быть, проще создать загрузчик, который изначально поддерживает только .ifcxml ?

@mrdoob , @Mugen87

Почему нет?

Так как

Загрузчик будет в 5 раз больше библиотеки Threejs.

и я использую Class с последними функциями javascript.

IFC основан на формате STEP, который хорошо известен в сообществе САПР.

Да, однажды я покажу вам, что я делаю с Threejs ;)

Файлы IFC также могут быть представлены в формате XML (они имеют расширение .ifcxml).
...
Может быть, проще создать загрузчик, который изначально поддерживает только .ifcxml?

Разбор явно не представляет большой проблемы. Но поколение геометрий ! Потому что формат ifc не содержит никакой геометрии. Но используйте интерполяцию/взаимодействие между объектами для определения конечной геометрии.

В любом случае, если вы этого хотите, возможно, вам следует создать для этого специальную ветку, прежде чем принимать какое-либо решение. Просто чтобы увидеть БОЛЬШОЕ.

Загрузчик будет в 5 раз больше библиотеки Threejs.

Ну да, если загрузчик не такой компактный, как остальные, наверное, лучше вынести код в отдельный репозиторий.

@Itee Есть ли планы выпустить IFCLOADER в ближайшее время?
Было бы интересно увидеть БОЛЬШУЮ вещь

Не знаю никого, кто хотел бы внести свой вклад и поддерживать его ...

Я с радостью использую IFC-конвертер IfcOpenShell, он делает хорошую геометрию и материалы, может делать Collada DAE (которую мы используем для импорта в Unity), IIRC OBJ и был ли там glTF в наши дни.

Я с радостью использую IFC-конвертер IfcOpenShell, он делает хорошую геометрию и материалы, может делать Collada DAE (которую мы используем для импорта в Unity), IIRC OBJ и был ли там glTF в наши дни.

Но используете ли вы какие-либо данные IFC, такие как Buildingstore, Site и т. д.?
Нет никаких сомнений в том, что Интернету было бы лучше иметь возможность анализировать IFC, а не эту дерьмовую клиент-серверную штуку, с которой все имеют дело.

Недавно я попробовал это. Мне удалось создать некоторую геометрию
image

Но на самом деле должно быть так:
image

Основная вещь, которая пошла не так, — это фактическое размещение и вращение здесь, и мои 3D-математики почти не существуют (у меня просто не хватает терпения).

Хотя в схеме IFC есть много классов. Возможный размер файла можно уменьшить, используя интерфейсы Typescript и используя функции для поиска и применения аргументов каждого «ШАГА» в файле.

Практический результат для загрузчика IFC; Я не знаю, есть ли у нас гений 3D-математики, потому что это решило бы множество проблем с разбором математических отношений при построении геометрии.

Но используете ли вы какие-либо данные IFC, такие как Buildingstore, Site и т. д.?

Да, через сервис преобразования Tridify, который также использует IfcOpenShell (я также использовал его локально) для геометрии. Я полагаю, что эти метаданные легко анализировать.

Генерация геометрии действительно нетривиальна. Если вы хотите сделать это в браузере, возможно, вы можете скомпилировать IfcOpenShell в WebAssembly и использовать его как библиотеку из своего Javascript. Это обычный C++ без графического интерфейса или чего-то еще, просто библиотека, для которой есть отдельный интерфейс командной строки, поэтому ее также может быть легко создать для Интернета. Разбор IFC довольно трудоемок, поэтому получить производительность WASM и низкий объем памяти может быть неплохо. И библиотека отлично справляется с созданием геометрии.

@MaartenBreeedveld Я могу помочь с математикой, в теоретической основе у меня нет сомнений, и у меня есть некоторый опыт работы с ifc, на самом деле может быть несколько последовательных преобразований, необходимых для мировых координат. Для реализации в three.js возможно получится оптимизировать.

Но используете ли вы какие-либо данные IFC, такие как Buildingstore, Site и т. д.?

Да, через сервис преобразования Tridify, который также использует IfcOpenShell (я также использовал его локально) для геометрии. Я полагаю, что эти метаданные легко анализировать.

Генерация геометрии действительно нетривиальна. Если вы хотите сделать это в браузере, возможно, вы можете скомпилировать IfcOpenShell в WebAssembly и использовать его как библиотеку из своего Javascript. Это обычный C++ без графического интерфейса или чего-то еще, просто библиотека, для которой есть отдельный интерфейс командной строки, поэтому ее также может быть легко создать для Интернета. Разбор IFC довольно трудоемок, поэтому получить производительность WASM и низкий объем памяти может быть неплохо. И библиотека отлично справляется с созданием геометрии.

Мы пробовали это в прошлом. Но скомпилированная версия WASM занимает 40 МБ, я думаю, это связано со всеми библиотеками, на которые есть ссылки в ifcConvert.

@Jesusbill , круто! В настоящее время у меня нет времени заниматься этим проектом. Но если все в порядке, я вернусь к вам.

Потрясающий! В настоящее время у меня нет времени заниматься этим проектом. Но если все в порядке, я вернусь к вам.

Звучит хорошо @MaartenBreeedveld

В список добавлено VDBLoader . https://www.openvdb.org/

Есть идеи о IFCLOADER? @мрдуб

Неа

Что касается загрузчика 3dm: я начал работать над этим сейчас, когда библиотека openNURBS была скомпилирована в wasm благодаря emscripten ( rhino3dm ).

Я работаю над этим здесь , и поддержка сетки, брепсов, экструзий, облаков точек, материалов, слоев и групп запущена и работает.

image

Соответствующие файлы:

Я надеюсь представить PR с поддержкой большего количества типов объектов когда-нибудь _в ближайшее время_. Я должен признать, что у меня мало опыта работы с веб-воркерами, и я опираюсь на примеры draco и base loader. Надеюсь, #18234 немного упростит это.

ps мы уже добавляем поддержку threejs непосредственно в библиотеку rhino3dm.js, как здесь и здесь .

Редактировать: обновить ссылки, чтобы они указывали на форк McNeel org.

Мы можем проверить это ;)
image

Была ли эта страница полезной?
0 / 5 - 0 рейтинги