游戏的 3D 文件格式

Posted

技术标签:

【中文标题】游戏的 3D 文件格式【英文标题】:3D File Formats for Games 【发布时间】:2010-11-13 14:00:16 【问题描述】:

我刚开始使用 XNA 和 Blender,并试图找到有关游戏开发中使用的各种 3D 文件格式的高质量、最新信息。

显然,许多游戏都是使用多种自定义 3D 文件格式开发的,但我有兴趣选择使用更普遍支持的格式的良好解决方案。

最流行的格式是什么?它们的区别是什么?

注意理想情况下,它们应该支持动画,但我也对可能用于构建地图或静态对象的其他格式感兴趣。

【问题讨论】:

很棒的问题。非常有帮助。只是说...... :-) 【参考方案1】:

在 XNA 中,尝试自己做任何事情(特别是加载数据格式)的代价要比忍受那些现成支持的不完美要高得多,至少这是文档的样子,而我有人为支持他需要的东西(运行时几何生成)而竭尽全力支持内容管道,并且我相信他知道他在做什么。所以我猜 .X 和 .FBX 几乎就是这样。它们都支持骨骼动画,我认为也支持顶点变形。我不完全确定 Blender 能够将哪些功能导出到其中,但如果您愿意,我可以研究一下。

Blender 2.5 最终将获得良好的 Collada 支持(当前的版本没有骨架,并且有多种损坏方式),Autodesk 为 Collada FBX 转换提供了一个很好的工具。

如果您环顾爱好开发社区,您会发现 Id 软件数据格式非常流行。一方面是MD2和MD3顶点变形角色动画格式,MD5骨骼动画格式,上面的需求显然已经涵盖了,另一方面是描述游戏关卡的BSP文件格式。

BSP 的一个特点是有一个好的编辑器可用(GTKRadiant 和衍生产品)。这是一种可以剔除隐藏几何图形的有效格式。然而,在 XNA 中构建自定义几何图形的运行时间成本很高,并且由于这些格式的限制在整个游戏级别中 64k 顶点和 64k 多边形是相当适中的,这是你现在可以直接转储到显卡上的东西,没有性能下降会很明显。因此,您不会从直接支持它中获得任何好处。

我怀疑是否有任何强大的、现代的、可用的格式和工具用于剔除优化关卡设计,它们的性能优势会转化为 XNA。

如果您还没有,您可能想查看几个链接:

3D World Studio content pipeline

Quake port

所有未维护且已过时,不知道优化与否。

【讨论】:

【参考方案2】:

如果您使用 XNA,那么最好的选择可能是 FBX。我这么说的主要原因是它是内容创建管道中的单个、非 XNA 特定的 format supported natively by XNA。

【讨论】:

感谢您的建议,尽管我仍然对其他格式感兴趣,特别是如果其他人已经创建了开源导入器/处理器 @The Lame Duck:如果您可以使用 fbx 格式获得最佳结果,为什么还要其他东西?就像 Reed 提到的那样,XNA 会原生支持它,如果 Blender 确实导出到那种格式,那可能是你最好的选择。 @tomzx - 非常正确,fbx 可能是最好的选择。我仍然很好奇它与 .md3 或 .md5 甚至 COLLADA 相比如何。它是否支持相同的功能? FBX 几乎支持所有主要功能 - 它旨在处理与 collada 相同的所有功能集(以及导出到 collada),以及其他功能。见:usa.autodesk.com/adsk/servlet/… 谢谢@Reed Copsey。这是一个很好的链接,我会选择 FBX。【参考方案3】:

已经提到的 COLLADA 和 FBX 是唯一在游戏行业中获得重大采用的标准格式。不过,很少有游戏会直接加载它们 - 它们通常用作从 DCC 应用程序导出的中间格式,然后进一步处理成更优化的运行时格式,这些格式通常是自定义和引擎特定的。

爱好者开发者经常使用流行游戏的文件格式作为起点。 Quake 3 模型和地图格式在一段时间内非常流行。 Microsoft 的 .X 格式也很受业余爱好者项目的欢迎,因为 D3DX 框架中有许多导出器和加载支持。

【讨论】:

【参考方案4】:

您可能想看看 COLLADA,它是 3D 游戏开发中广泛使用的标准:

http://en.wikipedia.org/wiki/COLLADA

【讨论】:

COLLADA 对自己的解析是一团糟。如果您应该走这条路,请获取某种解析库。【参考方案5】:

我选择了 MS3D 格式,因为它的规范简单、有意义、有动画和绑定(关节),并且有文档记录。

另请参阅我之前的问题,与这个问题非常相似,以及我写给它的答案(奇怪的是,它似乎在页面底部):

[SOLVED] Recommended 3D model type for in-game character model, loaded manually?

【讨论】:

【参考方案6】:

可能值得给glTF 看看。

还有一个 glTF 2.0 版本正在开发中,它添加了基于物理的渲染支持。 Khronos 网站上的草稿。

Assimp 对它有“部分”支持。不知道缺少什么。

github 上还有一堆适用于不同语言(C++、WebGL/JS、Rust、Go)的加载器。

还有一个 COLLADA 到 gltf 的转换器。

它使用 JSON 文件作为一种清单,然后将数据加载到其他文件中,例如用于二进制的 .bin、各种图像和用于着色器的 glsl。不过有一个binary extension。

当然,因为它是新的(并且仍在开发中)支持不会那么好。上次我看 COLLADA 的时候也很受欢迎。

还有Declarative 3D。

见this paper that covers both。

这两种格式确实有点网络焦点,但对于游戏来说也应该没问题。

【讨论】:

【参考方案7】:

不是专家(远非专家,只是玩弄而已)。

我猜3d studio max 格式(.3ds)和renderman RIB 文件用的比较多。 我也喜欢AC3D 文件格式(它是纯文本)。

【讨论】:

【参考方案8】:

多年来,DirectX file format(.x 扩展名)非常流行,Blender 包含一个内置的导出器。

【讨论】:

这通常不被认为是一种好的格式,但对于学习 3D API 来说,它对于这项工作来说已经绰绰有余了。【参考方案9】:

PMD 文件。它们用于 MMD 动画等等! 只需在 Deviantart.com 上搜索“MMD 模型”之类的内容

PMD 和 PMX 和 OBJ

【讨论】:

以上是关于游戏的 3D 文件格式的主要内容,如果未能解决你的问题,请参考以下文章

游戏内图片-文件格式与纹理格式

实现在3D模型上加载2D图片,3D模型用obj+mtl格式的文件实现的

U3D音频系统

unity怎么打开模型文件

OBJ 文件不同的格式

OBJ(3D模型)文件格式