目前我使用ObjectLoader将我的所有模型加载到场景中。我还使用Three.js编辑器来应用我的纹理。我目前的方式是从3Ds Max导出OBJ文件并将其导入Three.js在线编辑器,然后我在其中添加纹理。
OBJ文件大约是30mb,但导出的JSON文件几乎是100mb。怎么会有这么大的差异?纹理尺寸非常低,所以这不是原因。有没有人对此有任何见解或有更好的方法来做到这一点?
答案 0 :(得分:4)
您的原始obj文件可能不包含法线和UV列表。当你添加纹理时,仅此事实就可以轻松地将文件推送到300%。
OBJ是一种传统的逐行格式。 JSON是一个多维对象,所有这些都需要。 JSON中的数组和对象具有重要的足迹,例如逗号,引号,括号和未考虑的重要换行符,以及重复令牌的可能性。这三个.js开发人员在3d json格式中非常聪明,不重复元信息。
相比之下,OBJ格式在每一行只使用简单的一个和两个字母指示符,每行都有空格分隔值。
例如:
f v1 v2 v3
虽然简化,但这使得OBJ文件更难以使用,并且在加载json文件时不存在的三个.js中存在ObjLoader和ObjLoader2的加载限制。
您选择的文件类型取决于您。 Threejs拥有各种格式的装载机和出口商,如STL和Collada,并包括obj导出。
在使用json或obj的任何一种情况下,在向浏览器提供3d模型时,使用JIT GZIP正确设置服务器至关重要。请参阅我刚刚通过谷歌找到的this decent article。这将简化3d数据的提供。
在网络上或游戏中减少3D模型尺寸的正确方法是use mesh decimation plugins。
并不重要,但我更喜欢在整个数据流中使用OBJ以符合各种3D工具集,因为它得到了广泛的支持。
答案 1 :(得分:1)
您可以通过将数字舍入到1或2位小数来减少(很多)obj文件大小 guruware OBJexporter可以自动为您执行此操作。只需在Precision输入中输入1或2即可。