下载glb、gltf、fbx、obj,blend格式素材官网——glbxz.com
问题是:我的MTL贴图无法加载......
我的MLT贴图加载不了。我会研究已知的OBJ和MTL贴图问题。我遇到了glTF文件格式。我做了很多研究,因为我不想更改文件格式。我选择更改文件格式。我写下我的发现,想帮你避免潜在的麻烦。
学习新技术始于文档和一些猜测
我最近开始探索three.js,我找到的一些最早的YouTube教程和博客文章,提到了OBJ和MTL文件格式用于导入3D模型。这些资源虽然不算不准确,但后来发现已经过时且代码已经过时。许多新学习资源鼓励读者使用glTF文件格式,但几乎没有解释原因。作为我的第一个完整three.js项目,我选择使用OBJ文件,主要是因为文件扩展名对我来说更合理(OBJ= 对象,合理。glTF......不太确定那是什么?)。在我的项目过程中,我在纹理文件和加载速度上一直遇到困难。这时我开始研究glTF文件格式。下面我将讨论OBJ和glTF文件格式之间的一些区别,以及何时使用它们。
什么是OBJ文件?
Wavefront 3D 对象文件(OBJ)由 Wavefront Technologies 开发,是一种标准的 3D 图像格式,可以导出和打开。该文件包含坐标、纹理、面及其他创建三维物体所需的相关信息。OBJ文件支持多边形对象,这些对象使用点、线和面来定义模型,同时也支持自由形态几何体,即使用曲线和曲面。OBJ 文件通常与一个或多个 MLT 文件配对。
关于MTL伴随档案的补充说明
材料模板库文件格式(MTL)是OBJ文件的配套文件格式。它们用于描述表面着色材料和属性(即三维模型表面的外观——颜色、图案等)。正如一个OBJ文件可以引用多个MTL文件,单个MTL文件也可以引用多个纹理。这允许对单个物体应用多种纹理。MTL文件以纯文本格式保存,便于编辑。
为什么我想用OBJ
OBJ是一种广泛支持的3D模型格式,广泛使用,可以被视为一种通用模型格式。它受欢迎的一个原因是它很简单。该文件为文本,因此对人类可读且易于理解。OBJ 文件格式的其他优点包括:
- 支持存储具有不同拓扑结构的位置、UV和数据,有助于创建高质量模型
- 拥有庞大的用户基础和支持系统。文档为王,支持无价。
- 它是开源的,是当你无法直接在文件转换时,将文件转换成其他格式的可靠桥接格式
但OBJ也有问题
简单的文件结构可能导致文件体积较大。3D模型越复杂,文件大小越大,速度效率下降和加载时间越长。OBJ文件还会导出整个场景到一个网格里,这让修改元素或动画变得困难。OBJ 文件格式设计于1980年代,自1990年代中期以来,维护或更新的版本很少。这是个巨大的问题,展望未来。Threekit.com 是一家面向商业的3D和增强现实业务,甚至表示OBJ文件可被视为“无望的技术,未来无显著前景”。 与OBJ格式类似,MTL文件格式仍被广泛使用,但已被认为过时,不再完全支持视差和镜面映射等新技术。那么如果OBJ文件不再是理想的格式,新的3D文件会是什么?嗯,根据许多程序员和设计师的说法,它是Khronos的glTF。
推进glTF

在试图排查MLT材料问题时,我自然去找three.js索取了他们的文档。他们建议使用glTF格式,但也提到其他流行的格式,包括OBJ格式,也存在并定期维护。 嗯......读到这里时,我心想,太好了!那OBJ就没问题了,我只需要解决这个bug。现在重读时,我意识到他们强调“尽可能使用glTF文件”。因为我花了很长时间才让他们的信息真正融入心中,我会在这里附上他们的话——以防我的话还不够有说服力,
“在可能的情况下,我们建议使用glTF(GL传输格式)。两者皆是。GLB 和 。GLTF版本的格式得到了良好支持。由于 glTF 专注于运行时资产交付,传输紧凑且加载快速。功能包括网格、材质、贴图、皮肤、骨骼、形态目标、动画、光源和摄像机...... -three.js
那么,什么是glTF文件?
图形语言传输表(glTF)是一种用于三维模型和场景的标准文件格式。它支持3D几何体、外观、场景图层级和动画。它旨在简化格式,用于展示3D资源,同时保持文件大小和运行时处理量较小。glTF格式非常适合增强现实和虚拟现实,因为它支持运动和动画。glTF文件可以支持逼真的场景,用于视频游戏、网页应用以及制作CGI视频。他们能应付很多东西。
在你的邮箱里收到菲娅·萨顿的故事
免费加入Medium,获取作者的最新动态。
记得我,快速登录
Khronos 集团,glTF 文件格式的开发者和维护者,将他们的格式称为“3D 的 JPEG”。 该格式最初由COLLASA工作组于2012年创建。2012年,Khronos 展示了 glTF 的演示,当时称为 WebGT Transmissions Format。2015年,glTF 1.0发布。第二个版本,glTF 2.0,于2017年发布,较第一版进行了大量修改。因此,在寻找关于glTF文件格式的信息时,务必选择较新发表的文章。我学到了这个教训!
OBJ文件格式的改进

与 OBJ 文件格式相比,glTF 格式提供了更多功能。除了 OBJ 文件格式支持的顶点、法线、基本材质和纹理坐标外,glTF 还支持:
- 三维场景结构中的分层对象
- 场景信息,包括光源、摄像机以及实例功能
- 骨骼(关节)结构与变形动画
- 材质和着色器的多样性和可靠性更高
- 物理基础渲染(PBR)作为该格式的标准(默认支持金属-粗糙度材质模型,而通过扩展支持镜面-光泽材质模型)
glTF格式的设计初衷是能够以最小的麻烦方式下载和显示图形。虽然OBJ格式易于阅读,因此易于编辑,但glTF格式则非常适合渲染。这意味着多余的数据会被删减,以换取更小的文件和更快的加载速度。最终文件的大部分数据以二进制存储,因此可以零处理地上传到GPU(图形处理单元)。这也使得人类无法阅读,因此无法编辑。OBJ 文件格式将顶点存储为文本,处理前必须进行解析。编辑更简单,加载慢。选择glTF格式而非OBJ的最后一个优点是它得到了良好支持、文档丰富,并且具有进一步开发和维护的可扩展性。
结语
OBJ 文件格式在历史和当前使用中都有其地位。它可能是更简单的3D模型或无动画模型的合适选择。我可能还会用它,但不会用来做动画,也可能不会在未来的three.js项目中用。根据我上面的研究和想法,可以肯定地说我打算在3D模型中依赖glTF文件格式。但我从这次经历中学到的最重要的,是花时间去思考我在代码中做出的所有小选择,因为它们可能产生深远的影响。
资源:
《网络上3D文件格式性能比较研究》——这篇论文特别说明,内容非常详尽!作为学术论文,我觉得当时不适合包含他们的一些表格,但这是一篇比较glTF与其他格式(包括OBJ)的论文。如果你想更深入地了解文件格式和结构,我建议先访问这个网站。