Three.js: 装载机

创建于 2014-10-28  ·  66评论  ·  资料来源: mrdoob/three.js

很高兴拥有的装载机列表:

3D

Enhancement Loaders

最有用的评论

关于 3dm 加载器:由于 emscripten ( rhino3dm ),openNURBS 库已编译为 wasm,我已经开始着手这方面的工作。

我正在这里处理这个问题,并且已经启动和工作了网格、breps、挤压、点云、材料、图层和组支持。

image

相关文件:

我希望在某个时候_很快_提交一个支持更多对象类型的 PR。 我必须承认,我对 web worker 的经验很少,并且依赖于dracobasic loader 示例。 希望#18234 能稍微简化一下。

ps 我们已经在 rhino3dm.js 库中直接添加了 threejs 支持,就像这里这里一样。

编辑:更新指向 McNeel org fork 的链接。

所有66条评论

非常广泛的清单!
我还建议使用 AMF(http://en.wikipedia.org/wiki/Additive_Manufacturing_File_Format)加载器。
(用于 3d 打印的 3d 文件格式)。
我已经完成了加载器的基础知识,所以我可以对其进行一些修改并添加到示例中。

这些加载器中的大多数对于编辑器等特殊情况更为重要,因为对于游戏来说,最好直接转换为 three.js 格式,对吧? 在这些情况下,转换器/出口商更为重要。

我们已经测试了 glTF 作为三种格式的替代作为优化 - 那里的数据是二进制的,可以使用 geom 压缩进行压缩。

Herst [email protected] kirjoitti 2014 年 10 月 28 日凯洛下午 5:38:

这些加载器中的大多数对于编辑器等特殊情况更为重要,因为对于游戏来说,最好直接转换为 three.js 格式,对吧? 在这些情况下,转换器/出口商更为重要。


直接回复此邮件或在 GitHub 上查看。

@kaosat-dev 已添加到列表中!
@Herst是的。 它主要用于不需要快速加载时间的编辑器或应用程序。

我也在寻找 IGES 装载机。 我什至可能会开始自己建造一个,但不知道从哪里开始。

3DM (由Rhinoceros使用)添加到列表中怎么样?

@nyaaao补充道。 谢谢!

关于 3DS 加载器:

大家好,很久以前,我需要为 3DzzD Web 3D 引擎制作一个 3DS 加载器,这有点难做……不难获得一些初步结果,而是要正确处理所有块,但经过一段时间我设法生产了一个非常高效的装载机。 3DS 文件格式规范很难找到,但我找到了一个运行良好的文件。 我已经使用此文档为 3DzzD 构建了加载器,它比当前 Photoshop 中的加载器效果更好(更好地处理枢轴/平滑组/缩放/关键帧/等...),所以这是我使用的规范(3DzzD 源代码是开源的,可能会有所帮助,但代码真的很难看……一个十年前的项目……)

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

关于 OBJ 加载器:

我修改了当前的 OBJ 加载器,并在许多 3d 模型上获得了至少 10/15 FPS,但现在我没有找到如何发布这些更改?

问题主要是因为当前的 OBJ 加载器创建了太多的对象(比原来的 3d 模型多,每次材质更改创建一个对象),并且具有相同材质的 3dFaces 即使在同一个对象内也没有分组在一起,并且产生了太多的 WebGL 调用

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

谢谢! 添加到第一个帖子。

问题主要是因为当前的 OBJ 加载器创建了太多的对象(比原来的 3d 模型多,每次材质更改创建一个对象),并且具有相同材质的 3dFaces 即使在同一个对象内也没有分组在一起,并且产生了太多的 WebGL 调用

哦! 有趣的。 你的意思是OBJMTLLoader一个。 对?

哦! 有趣的。 您的意思是 OBJMTLLoader 之一。 对?

是的,更准确地说,“if (/^usemtl /.test(line))”块为每个材质开关创建一个新的对象/网格,这最终会导致性能不佳和对象层次结构错误。

我将发布一个简单的测试用例,显示当前加载器和修改后的加载器之间的差异(差异主要在移动设备上很明显)

这是当前加载程序的测试用例和优化的测试用例:

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

编辑:
我在 GalaxyTab3 上使用当前加载程序获得了 10 FPS,使用新加载程序获得了超过 60 FPS,在快速设备上可能很难看到差异

PS:如果您想知道3D 模型来自哪里 :)

有谁知道IGES。 我真的可以使用 IGES 加载器。 如果有人能指出我开始如何构建一个方向? 或者,如果在某个地方有一个。 我注意到http://www.3dfile.io/和其他一些 3D 可视化网站正在使用 ThreeJS 并允许上传 IGES。

K3D.js(MIT 许可证)具有 OBJ、3DS、MD2 和 Collada 的解析器。 http://k3d.ivank.net。 参见#3843。

医生的 NIfTI 怎么样?

@jugl你有关于格式的任何信息吗?

我真的希望.m2 模型,它是一个巨大的社区。 我会为模型文件等提供帮助。您可以在 Skype 上与我联系:deexone。 作为来自一位 lib 开发人员的提示http://bridge.net/可能用于将他的 lib 转换为 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 进行 PR,我会很乐意清理您的代码(示例 + 示例动画也将非常感谢)。

你好呀,
只是为了将此列表与 repo 中的文件加载器同步...

列表中缺少 3MFLoader,但已实现。
列表中缺少 BinaryLoader,但已实现。
列表中缺少 DDSLoader,但已实现。
FBXLoader 未选中但已实现。
列表中缺少 HDRCubeTextureLoader,但已实现。
MD2Loader 未选中但已实现。
NRRDLoader 未选中但已实现。
列表中缺少 PCDLLoader,但已实现。
列表中缺少 PlayCanvasLoader,但已实现。
列表中缺少 RGBLLoader,但已实现。
SVGLoader 未选中但已实现。
列表中缺少 TGALoader,但已实现。
列表中缺少 TTFLoader,但已实现。

下一个:

应该将 ASCLoader 添加到列表中,并且 PR 将在几天内发送。
应将 LASLoader 添加到列表中,PR 将在几天内发送。
XYZLoader 应该被添加到列表中,并且 PR 将在几天内发送。

最好的祝福,
特里斯坦

只是为了将此列表与 repo 中的文件加载器同步...

更新!

OpenCTM 可能是一个很好的补充,因为 Autodesk 正在将它用于他们的
云服务
https://en.m.wikipedia.org/wiki/OpenCTM

在 2016 年 11 月 13 日星期日上午 6:33,Mr.doob [email protected]写道:

只是为了将此列表与 repo 中的文件加载器同步...

更新!


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/mrdoob/three.js/issues/5524#issuecomment -260168120,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAkmxkkOn179ZJvqc8yScOoxnaDGzuH6ks5q9qE6gaJpZM4CzpFw
.

@dlabz我们确实有一个CTMLoader

我正在与 AR 领域的一些 iOS 开发人员合作,是否有 Apple 在 ARKit 中使用的二进制 SCN 文件的加载程序? 我正在努力使用 BinaryLoader,我们会看看我是否可以让它工作。

SCN格式是否有规范?

@mrdoob对不起,我来晚了。 NIfTI 是从 DICOM 传输的 NMR 数据格式。 我目前的解决方案是从中获取 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吗?

我重用了GLTFLoaderColladaLoader的模式。

我想看看 LWO 装载机。
文件规范在这里有很好的记录:http: //static.lightwave3d.com/sdk/2018/html/filefmts/lwo3.html

我经常看到 LWO 文件大小约为 OBJ 的 1/10,并且该格式可以包含变形数据和许多其他 OBJ 不允许的功能。 NASA 提供的许多模型也只有 LWO 格式https://nasa3d.arc.nasa.gov/search/lwo/model

如果我知道我在做什么,我会尝试让它滚动,但是写一个加载器超出了我以前做过的任何事情。

FWIW 这里有一个 LWO 解析器: https ://github.com/marcbizal/lwo-parser ...假设这对于加载器或转换器来说是一个好的开始,但不幸的是它似乎不支持特定版本NASA 使用的 LWO 格式。 它需要 LWOB(二进制?),但我尝试的 NASA 模型上的魔术版本字符串是 LWO2。 如果您确实找到了用 JS 以外的其他语言编写的有效解析器,那么编写一个转换为 three.js 支持的东西可能会更容易,而不是尝试用 JS 编写一个新的解析器。

嗨,我的日程安排发生了很大变化,所以没有时间为 three.js 处理 .ifc 加载程序。 获取这个人的联系方式可能会很棒: https ://github.com/mrdoob/three.js/issues/9764

对不起,我没有意识到

我正在制作“LWO 2”的装载机。 但是,我认为没有需求,我没有完成它。

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

我希望它会对某些事情有所帮助。

大家好,

我看到 M2 在列表中。

这对我来说很有趣,因为我想用 Three 实现一个角色、对象、NPC 和项目查看器。

与 M2 相关的是同义词 BLP2(暴雪图片文件),类似于使用的 DDS S3 纹理压缩。

到目前为止我发现:

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

.blp

我自己尝试添加它,但我对整个过程仍然有点缺乏经验:D

@adrs2002 LWOLoader会很棒! 你想用你拥有的东西做公关吗?

我自己尝试添加它,但我对整个过程仍然有点缺乏经验:D

慢慢来👌

LWOLoader 会很棒!

几个月前,我在 onthez.com 工作时编写了一个 LWO3 加载程序。
我们同意了一段时间的排他性,然后我们将在这里做出贡献。 希望在2月底左右的某个时候。

我认为@jds580s是来自 z 的 Justin,也许他可以更好地了解我们何时可以在此处添加它。

@mrdoob @looeee
如果 looeee 的LWO3 loader将提交,我认为LWO2 loader的提交是不必要的。
LWO3 格式是因为它包含了 LWO2 格式的所有成功。

LWOLoader 登陆了! 😁

16011

IFC 加载程序有任何更新吗? 对于建筑景观会很好!

我尝试了一个 IFCLoader 以及怎么说......这是不可能的! 能够正确解析 IFC 格式所需的整个代码大约是 650 个类文件。 (我知道是因为我做到了)。 加载器将比 Threejs 库大 5 倍。

关于规范,如果你想实现自己的: http ://standards.buildingsmart.org/IFC/RELEASE/IFC4_1/FINAL/HTML/

我可以发布我的代码,一些帮助会很酷。 但是不希望在不久之前在 ThreeJs 中看到这个加载器......

我可以发布我的代码,一些帮助会很酷。 但是不希望在不久之前在 ThreeJs 中看到这个加载器......

为什么不?

顺便说一句:我最近与一位同事交谈,他告诉我 IFC 是基于 CAD 社区众所周知的 STEP 格式。 一般来说,STEP 真的很难解析,你需要编写一个类似于VRMLLoader的自定义解析器。 但是,IFC 文件也可以用 XML 表示(它们具有.ifcxml扩展名)。 这样的文件会更容易处理(参见3MFLoaderColladaLoader ),因此加载器可以专注于实际的几何数据构建。 也许创建一个一开始只支持.ifcxml的加载器更容易?

@ mrdoob@Mugen87

为什么不?

因为

加载器将比 Threejs 库大 5 倍。

我使用具有最新 javascript 功能的Class

IFC 基于 CAD 社区众所周知的 STEP 格式。

是的,有一天我会告诉你我在用 Threejs 做什么;)

IFC 文件也可以用 XML 表示(它们具有 .ifcxml 扩展名)。
...
也许创建一个一开始只支持 .ifcxml 的加载器更容易?

解析显然不是什么大问题。 但是几何代是! 因为 ifc 格式不包含任何几何图形。 但是使用对象之间的插值/交互来确定最终的几何形状。

无论如何,如果你想要它,也许你应该在做出任何决定之前为此创建一个特定的分支。 只是为了看大事。

加载器将比 Threejs 库大 5 倍。

是的,如果加载器不像其他加载器那么紧凑,最好将代码放入单独的存储库中。

@Itee 有计划很快发布 IFCLOADER 吗?
有兴趣看看大事

不知道有人愿意贡献它并维护它......

我正在愉快地使用 IfcOpenShell 的 IFC 转换器,它可以制作漂亮的几何图形和材料,可以做 Collada DAE(我们用来导入 Unity),IIRC OBJ,现在也有 glTF

我正在愉快地使用 IfcOpenShell 的 IFC 转换器,它可以制作漂亮的几何图形和材料,可以做 Collada DAE(我们用来导入 Unity),IIRC OBJ,现在也有 glTF

但是您是否使用任何 IFC 数据,例如 Buildingstorey、Site 等?
毫无疑问,Web 最好能够解析 IFC,而不是每个人都在处理的这种糟糕的客户端-服务器。

我最近试了一下。 我设法生成了一些几何图形
image

但实际上应该是这样的:
image

出错的基本问题是这里的实际放置和旋转,而我的 3D 数学几乎不存在(我根本没有耐心)。

尽管 IFC 模式中有许多类。 最终的文件大小可以通过使用 Typescript 接口和使用函数来查找和应用文件中每个“STEP”的参数来减小。

底线,对于 IFC 装载机; 我不知道我们是否有一个 3D 数学天才,因为这将解决许多在构造几何时解析数学关系的问题。

但是您是否使用任何 IFC 数据,例如 Buildingstorey、Site 等?

是的,通过 Tridify 的转换服务,它也使用 IfcOpenShell(我也在本地使用它)作为 geom。 我认为这些元数据很容易解析。

几何生成确实不平凡。 如果您想在浏览器中执行此操作,也许您可​​以将 IfcOpenShell 编译为 WebAssembly 并将其用作 Javascript 中的库。 它是纯 C++,没有 GUI 或任何东西,只是一个单独有命令行界面的库,所以它也可能很容易为 web 构建。 解析 IFC 有点繁重,因此获得 WASM 性能和低内存占用可能会很好。 lib 在创建 geom 方面做得很好。

@MaartenBreeedveld我可以帮助数学,因为我毫无疑问的理论基础并且我对ifc有一些经验,实际上世界坐标可能需要几个系列转换。 对于three.js中的实现,也许可以对其进行优化。

但是您是否使用任何 IFC 数据,例如 Buildingstorey、Site 等?

是的,通过 Tridify 的转换服务,它也使用 IfcOpenShell(我也在本地使用它)作为 geom。 我认为这些元数据很容易解析。

几何生成确实不平凡。 如果您想在浏览器中执行此操作,也许您可​​以将 IfcOpenShell 编译为 WebAssembly 并将其用作 Javascript 中的库。 它是纯 C++,没有 GUI 或任何东西,只是一个单独有命令行界面的库,所以它也可能很容易为 web 构建。 解析 IFC 有点繁重,因此获得 WASM 性能和低内存占用可能会很好。 lib 在创建 geom 方面做得很好。

我们过去曾尝试过。 但是 WASM 编译的版本是 40MB 下载我猜这是由于 ifcConvert 中所有引用的库。

@Jesusbill ,太棒了! 目前,我没有时间从事这个项目。 但如果没事的话,我会回来找你的。

惊人的! 目前,我没有时间从事这个项目。 但如果没事的话,我会回来找你的。

听起来不错@MaartenBreeedveld

VDBLoader添加到列表中。 https://www.openvdb.org/

关于 IFCLOADER 的任何想法? @mrdoob

关于 3dm 加载器:由于 emscripten ( rhino3dm ),openNURBS 库已编译为 wasm,我已经开始着手这方面的工作。

我正在这里处理这个问题,并且已经启动和工作了网格、breps、挤压、点云、材料、图层和组支持。

image

相关文件:

我希望在某个时候_很快_提交一个支持更多对象类型的 PR。 我必须承认,我对 web worker 的经验很少,并且依赖于dracobasic loader 示例。 希望#18234 能稍微简化一下。

ps 我们已经在 rhino3dm.js 库中直接添加了 threejs 支持,就像这里这里一样。

编辑:更新指向 McNeel org fork 的链接。

我们可以检查一下这个;)
image

此页面是否有帮助?
0 / 5 - 0 等级