Graphics 我应该使用哪种三维模型格式?

Graphics 我应该使用哪种三维模型格式?,graphics,model,3d,collada,Graphics,Model,3d,Collada,我在写一个游戏引擎,我想知道我应该使用什么样的3D模型格式/加载/导出?Obj似乎通用且简单,但它似乎也不可靠,因为大多数模型都包含错误,而且它的存储量也不如其他格式 似乎有专门针对MD2/3/5等游戏的格式,但我不确定,如果我建模,我会使用wings3d,我不知道除了从格式Id中加载我需要的内容和支持之外,还有什么其他细节需要实现,比如我需要实现IK吗?我可以使用脚本化的每件动画而不是反向运动学和骨骼装配吗?我使用自己的二进制格式。我试图使用现有的格式,但总是遇到限制。有些人可以在附近工作,其

我在写一个游戏引擎,我想知道我应该使用什么样的3D模型格式/加载/导出?Obj似乎通用且简单,但它似乎也不可靠,因为大多数模型都包含错误,而且它的存储量也不如其他格式


似乎有专门针对MD2/3/5等游戏的格式,但我不确定,如果我建模,我会使用wings3d,我不知道除了从格式Id中加载我需要的内容和支持之外,还有什么其他细节需要实现,比如我需要实现IK吗?我可以使用脚本化的每件动画而不是反向运动学和骨骼装配吗?

我使用自己的二进制格式。我试图使用现有的格式,但总是遇到限制。有些人可以在附近工作,其他人则可以在停止表演的地方工作

科拉达也许值得一看。我不认为这是一个很好的格式来阅读的三维引擎。不过,作为一种通用的数据交换格式,它还不错


在担心您想要支持哪些3D格式之前,我认为您应该真正关注您计划在引擎中实现哪些功能。将这些作为需求写下来,并从列表中选择支持大多数功能的格式。。。因为您希望展示您的引擎(我假设您计划将您的引擎公开)。如果您的引擎有特定的功能(这对于游戏引擎来说总是一件好事),那么您甚至可能想要使用自己的格式

之后,支持尽可能多的流行格式(.X、.3DS、.OBJ、.B3D)。。。你的引擎越容易接近,就有越多的人想使用它

Collada是一种很好的通用格式,但正如Nils所提到的,它并不是最终部署的理想格式

是一种基于XML的开放格式,用于Khronos group(OpenGL标准机构)拥有的3d模型

从Collada.org常见问题解答:

COLLADA 1.4.x功能集包括:

  • 网格几何
  • 变换层次(旋转、平移、剪切、缩放、矩阵)
  • 影响
  • 着色器(Cg、GLSL、GLES)
  • 材料
  • 质地
  • 灯光
  • 摄像机
  • 剥皮
  • 动画
  • 物理(刚体、约束、碎布玩偶、碰撞、体积)
  • 实例化
  • 技巧
  • 多重表示
  • 资产
  • 用户数据

很好地支持Collada,然后为其他格式提供良好的转换器(这可能是困难的部分)。这将给你最大的灵活性。看看Collada吧,它很棒,但它更多地体现在3D应用程序方面。ie最好用于在应用程序之间传输3D数据,而不是从游戏引擎中加载3D数据。你调查过Lua吗?它被广泛应用于游戏中,因为它是一种脚本语言,速度快得离谱(非常适合游戏),而且非常灵活(可以用来表示引擎所需的任何数据)。

+1用于Collada。您可能还需要一种定制的本地二进制格式,以实现真正快速的加载(通常只是顶点/索引缓冲区数据的二进制转储,加上材质和骨架数据,以及碰撞数据(如果适用))


游戏行业的一个趋势是支持在开发人员构建的引擎中加载类似collada的格式,但也有一个导出优化版本以供发布的工具链。开发者版本可以动态更新网格,以便艺术家保存更改时,自动重新加载文件,允许他们(几乎)即时查看模型的WYSIWYG视图,但仍然提供完全优化的发布格式。

我不会将此格式用于实时图形。Collada旨在作为图形制作管道的中间格式。使用它转换为更紧凑的二进制格式,也就是说,所有的工具都支持整个CalaDa特征集。最后,我与ASSIMP库一起进行几何加载,这样任何人都可以使用他们喜欢的东西,只要它们支持必要的属性解析,Collada就和解析器工作一样好。不过我还是同意,它更像是一种管道格式,包含了太多的信息,而游戏引擎可能不需要这些信息。因为Collada是文本,所以它的压缩比非常高。另一件重要的事情是已经提到的事实,它是由Khronos开发和维护的。这导致了Collad文件和OpenGL之间真正平滑的转换,因为信息的存储方式(使用VBOs与交错数组相结合会大大提高性能)。顺便说一句,ASSIMP仅支持1.4,加载1.5会导致异常。collada对于实际应用程序来说通常过于通用的一个好例子是,例如Vulkan不支持四边形,但collada可以包含基于四边形的资产,而不会出现问题。因此,为了克服这个问题,您需要预见collada文档中可能包含的内容,然后将其转换为应用程序可以处理的格式。那可能要做很多工作。。。关于本机二进制格式,值得注意的是已经有了一种标准的二进制XML格式:@Hibou57,不是真的。当然,这些都不是行业标准:)但是Lua可以表示矩阵,所以构建3D模型格式/解析器是可以简化的事情——有些人对他们发现的任何问题都用“Lua”来回答。@BitTickler这在技术上没有错。您只需生成一个脚本,该脚本已包含跳过解析步骤所需的数据;与为资产生成C代码的想法相同。不确定这是否是个好主意,但也不是不可信的。