如何减小3D .obj文件的大小

5

我正在使用Android OpenGLES2开发游戏。使用.obj文件绘制3D模型时,由于.obj文件的大小(即3MB),加载时间太长。请建议一种方法来最小化.obj文件的大小。


这听起来对于一个游戏模型来说是相当多的三角形,你能减少一些吗? - paddyg
3个回答

2
  • 第一种选择,通过减少形成对象的三角形数量来降低复杂度。
  • 第二种选择,尝试将OBJ文件作为一个整块读取,而不是逐行读取。这将有助于从设备读取的时间。
  • 第三种选择,尝试构建一个基本的OBJ到二进制格式的转换器。这听起来很傻,但它非常容易实现,因为当您将模型加载到内存中时,您已经执行了初始转换(文本到二进制)。此时,您只需要将二进制转储到文件中。从那里开始,您编写新的加载程序(在逻辑上与转储程序相同)。
  • 第四种选择。这非常不切实际,尝试使用自己的算法压缩磁盘上文件的内容。以压缩方式读取它。在内存中展开。这基本上就是apk文件中发生的情况。理论上,这需要大量的工作,最终可能会浪费时间并导致性能不佳。

很遗憾,这些是唯一可用的选项。


1

在移动设备上,应该使用预先准备好的二进制数据,而不是解析.OBJ文件 - 这样太慢了。


谢谢您的建议。请提供如何实现的建议。我在网上找不到任何帮助或示例。 - David

0

建议 #1

我知道这是一篇较旧的帖子,但如果有人需要的话...

使用AccuTrans 3D可以大幅减小OBJ文件的文件大小。 https://www.softpedia.com/get/Multimedia/Graphic/Graphic-Others/AccuTrans-3D.shtml

它可以将3D文件转换为许多不同的文件格式。如果您导出为OBJ并选择设置自己的选项,则可以减少顶点的小数位数,设置比例因子,并包括或排除诸如顶点法线、纹理UV和组名称之类的内容。根据您所需的详细程度、精度或平滑度,调整这些选项可以将某些文件大小减半。

只需小心并稍微尝试一下,直到您了解这些选项。消除顶点法线会删除对象平滑处理,这可能或可能不适用于您的应用程序。减少顶点坐标精度可能会根据您使用的设置创建一些像素化。

免责声明:我与AccuTrans或其所有者没有任何关联。这是我使用的在线3D打印服务之一推荐的。

建议 #2

在您的服务器上,如果您将OBJ文件作为文本/纯文本mime类型进行服务,那么您可以使用gzip压缩。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接