Answers:
在谈论文件格式时,我们谈论的是持久化一些与3D模型/几何相关的数据。对于持久性3D几何图形,文件格式没有通用标准。只有少数几种格式比其他格式更具优势。
就像图像文件格式一样,PNG和JPEG是当今最常见的格式,但是应用程序之间在使用一种或另一种方面没有达成共识。每个应用程序都将最适合其用途。
存储3D数据的文件格式也会发生同样的情况。每个3D建模软件通常将具有一个或一组首选格式。实际上,大多数定义自定义格式仅适用于该工具的特定版本。发生这种情况的原因有很多,从简化应用程序的内部工作或加快文件加载到故意将用户绑定到给定的工具。
.dat
您描述的这种格式是本书作者创建的一种自定义格式,在设计时可能会考虑到简单性。它似乎是一个类似于Wavefront OBJ格式的文本文件,该格式反过来又是一种非常流行的用于存储静态几何图形的格式,尽管现在已经有些过时了。可以说.OBJ
格式是.BMP
3D模型格式的格式。
其他流行的3D模型格式包括:
还有许多其他。这里有更一般的解释。
还要注意,我在开始时就说过,这些是用于在离线存储中存储/保留3D模型或几何图形的格式。这并不意味着(通常不是这种情况)使用它们的应用程序将使用与文件相同的布局将数据内部存储在内存中。通常,从文件加载此类数据后,直到将其显示在屏幕上之前,此类数据都会经过大量处理。
3D模型没有标准格式。glampert的答案中列出了一些常见的答案,该SE答案中还有更多常见的答案。
如果您是出于自己的目的设计自己的格式(实际上是一件很平常的事情),那么这是查看如何使用模型数据的良好第一步。例如,如果您专注于渲染,则可以使用图形库期望的格式。如果您想尽可能减少软件的加载时间,那么减少您必须执行的解析和处理量会有所帮助。一个简单的实用程序可以按照引擎期望的格式输出文件,这意味着您可以简单地将文件映射到内存中,然后将指针传递到图形库中。
另一方面,如果渲染不是您的主要考虑因素,而编辑对您来说更重要,那么您可能会考虑更适合编辑的格式,例如winged edge。在项目开始时使用通用模型格式可能适合您的目的,但最终3D模型可以做很多事情,每种格式都有其优点和缺点,因此您可以选择最适合自己的格式。
没有定义3D模型存储的单一标准。图形API仅关心三角形,三角形由顶点和指示哪些顶点构成三角形的索引定义。
许多公司创建了具有不同功能和目标的自己的模型格式。最简单的一种就是.obj(Wavefront Object)格式。其中包含顶点位置,法线和纹理坐标的列表以及组成三角形的索引的列表。它还包含具有一些基本属性的材料,例如纹理,漫反射和镜面反射颜色。
更高级的模型格式,例如Autodesk使用的.fbx(FilmBox),包含建模软件所需的其他信息。这些可能包括骨骼,层次结构以及甚至更多的用于蒙皮的顶点属性。因此存在“标准”,但是它们并不是真正统一的,因为每个程序可能需要不同的信息。但是wavefront是一个很好的选择,因为许多建模应用程序都可以将其导出,并且很容易为其编写(查找)导入程序。
正如其他答案所提到的,存在多种竞争格式用于存储3D数据。
但是,自从提出此问题以来,出现了一种特定的格式,它具有您期望从“标准”中获得的许多特征:glTF格式。
glTF是Khronos Group(OpenGL和Vulkan背后的组织)发布的3D标准,旨在弥补Collada中的缺陷。
它的主要优点是:
它基于JSON,因此非常易于解析,序列化,读取和通过网络发送。
标准中几乎没有歧义或冗余(尽管有一些*)。单位,惯性,纹理坐标标志等均已标准化;一切总是基于索引的,这意味着没有数据冗余。这使得编写导入程序非常容易。
该文档非常干净且详尽。
数据的布局基于OpenGL / WebGL工作流,这意味着导入的模型可以用作引擎内数据,而无需过多检查。
该标准是开源的,该规范托管在Github上。这意味着该标准将始终可用,免费使用,并且开发过程对所有人可见。反对者认为,封闭源代码标准的未来是由私人利益决定的,这是固有的危险。
glTF由Khronos(Adobe,Google,Microsoft,Mozilla,Unity)提供了许多行业巨头的支持;它可以由Blender导出(从官方上不支持从Maya导出),也可以由Unreal,Unity和Godot导入。
也可以看看:
*我很确定可变手性切线是没有意义的。