美文网首页ios-SceneKit/ARKit/OpenGL/Unity3D
关于ARKit如何将3D模型转换为适配iOS的.dae格式

关于ARKit如何将3D模型转换为适配iOS的.dae格式

作者: 裂缝中的陽光 | 来源:发表于2017-09-25 22:09 被阅读1047次

    引言:

    前不久在学习ARKit的过程中到导入3D模型的时候遇到了一些贴图显示不全、坐标和大小设置不正确等问题,所以在下面做了一部分总结,也希望能帮助一些初学者遇到类似的问题的时候能少走一些弯路。: ]

    该选择哪种格式的3D模型呢?

    ARKit中的3D模型这里我们结合SceneKit框架来处理,所以3D模型文件支持的格式是SceneKit 的.scn文件,以及官方文档提及的COLLADA(COLLAborative Design Activity文件).dae还有Alembic的.abc文件。
        COLLADA(COLLAborative Design Activity文件).dae文件其实是遵循 collada标准 的XML文件,这个 collada标准 好像是Sony公司提出的,现在成了业界认同的一种标准。所以我们在使用3D模型的时候把它的格式转换为dae格式最为合适。
        当我们导入dae或者abc格式的文件进入Xcode的时候,Xcode会自动隐式地将文件转换为.scn文件之后,再进行使用,但是仍会保留.dae/.abc文件的原始后缀。

    有关于模型选择的小Tip:

    在选择模型的时候,我们还要考虑一些模型的复杂度。一般来说如果模型中的面的数量越多,模型就更精细,在载入模型的时候计算量相应的就越大。
        所以建议使用低多边形的模型(low poly models),当然我们也要考虑到设备之间的图形计算性能差异,这里建议大概就是10000个多边形以内的模型相对大多数设备而言比较合适。


    下面是正文

    这里我们举个例子,如何将.obj格式的文件转换成我们可以使用的.dae格式并导入我们的AR场景中。
        一般我们从网上下载的obj格式的3D素材解压后通常会附带一个.mtl(Material Library File)格式的ASCII编码文件,用于定义模型的材质和描述贴图纹理。贴图的格式有很多种,比如png,jpg,tga等等
        这里我看上了一个蝙蝠侠模型,

    屏幕快照 2017-09-25 下午4.11.36.png
    是不是狂甩酷炫吊炸天!
    下载下载!
    找到刚下载的zip文件、解压、找到.obj文件,打开! 屏幕快照 2017-09-25 下午4.39.11.png 黑人问号.jpg

    肿么肥似?!?!这是玉米片怪兽吧?(我摔~

    还记得前面提到的附带的.mtl文件吗,像这种仅仅是贴图文件丢失的情况,其实问题一般就在于.mtl的贴图文件名或者文件路径的读取错误。
        首先我们将模型的.obj和.mtl以及texture文件夹中的所有文件都添加到同一个文件夹中,这样便于我们处理贴图文件路径。
        再用文本编辑打开.mtl文件。

    屏幕快照 2017-09-25 下午9.38.19.png

    这里再科普一下(真啰嗦)
        .mtl中包含了一个或多个材质的定义,对于每个材质都有其颜色,纹理和反射贴图的描述,应用于物体的表面和顶点,材质定义的基本格式为:

    newmtl mymtl_X
       材质颜色光照定义
       纹理贴图定义
       反射贴图定义
    

    这里我们主要修改文件纹理映射的描述文本,也就是map开头部分的文本。(而map_及其后缀这里尚不多加解释。大家自行查阅:-D)
    接下来我们要做的就是:

    • 第一步:删除贴图文件路径(就是黄色打马部分)
    • 第二步:就是检查文件名。

    文件名之间不能出现空格,空格部分不需由下划线(_)代替。(本例子中没有该错误,下面举个错误栗子。)
    错误例子:
        map_Kd Hello World.jpg
    更正为:
        map_Kd Hello_World.jpg
    然后再次打开我们的obj文件。

    屏幕快照 2017-09-25 下午5.16.16.png

    现在就可以正确显示啦~

    • 第三部: 将我们正确显示的obj文件用软件转为dae格式。

    下面我将用开源3D建模软件Blender导入并且做些设置并且转为dae格式。
        打开Blender,我们可以看到一些预设内容

    屏幕快照 2017-09-25 下午5.40.34.png

    将场景中的一些无关内容删除,
    在右上角的视图栏中

    屏幕快照 2017-09-25 下午5.39.31.png
    然后在无关的内容部分鼠标右键选择删除 屏幕快照 2017-09-25 下午5.39.24.png
    删除干净之后就准备导入我们的模型啦。
        点击左上角的File - Import - Wavefont(.obj)文件,然后文件路径中找到我们刚才的保存的obj文件,导入。
    导入完后 屏幕快照 2017-09-25 下午5.43.04.png
    • 缩小操作

    我们的模型显得太过伟岸,让我们缩小一下。
        按一下快捷键s,就可以直接拖动设置模型的大小。

    • 设置局部坐标

    之后可以根据我们个需求来设置一个模型的局部坐标。局部坐标可以理解为就模型的父节点,该节点在哪,模型的位置就在哪。(就是上图蝙蝠侠脚下的那个坐标原点及其坐标系)
        首先先调出3D游标的位置属性,

    屏幕快照 2017-09-25 下午5.57.10.png

        之后选择3D游标属性框再根据我们的需求设置好游标的位置,

    屏幕快照 2017-09-25 下午8.41.42.png

    再选择左下角的物体 - 变换 - 原点->3D游标

    屏幕快照 2017-09-25 下午8.39.36.png

    之后就可以把局部坐标设置到我们想要的位置啦。

    屏幕快照 2017-09-25 下午8.42.47.png

        最后一步,要将我们设置好的模型导出为dae格式。
        点击左上角的Export - Collada(.default)(.dae),然后记得到处过程中在左下角的贴图选项选中这三项,这样才能将贴图一并导出。

    屏幕快照 2017-09-25 下午8.47.22.png

    然后,将我们的模型导出到一个新建文件夹中,打开文件夹,可以看到dae文件和贴图文件一并导出,

    屏幕快照 2017-09-25 下午8.50.24.png

    再打开dae文件看看

    屏幕快照 2017-09-25 下午8.51.16.png

        文件显示正常,接下啦我们就可以直接把整个文件夹导入到Xcode就可以愉快地加入场景使用啦。: ]


    参考文档:

    如果觉得该文章对你有帮助,麻烦点个赞!❤️
    如果发现有错误,请帮忙指出,谢谢!❤️

    相关文章

      网友评论

        本文标题:关于ARKit如何将3D模型转换为适配iOS的.dae格式

        本文链接:https://www.haomeiwen.com/subject/omadextx.html