代码之家  ›  专栏  ›  技术社区  ›  Joh

统一组合大量网格

  •  0
  • Joh  · 技术社区  · 7 年前

    我将生成的MRT扫描3d模型导入Unity。不幸的是,该模型被导入到构成整个模型的许多切片中。 层次结构如下:

    enter image description here

    正如您所想象的,这需要大量资源,并且会减慢进一步的过程。所以我想组合子对象(default\u MeshPart0,default\u MeshPart1,…)将“默认”设置为一个网格。我发现了 Mesh Combine Wizard 这非常适用于只有少数子对象的对象,但不适用于作为子对象的大量网格。我尝试将一些子文件夹移动到另一个父文件夹中,然后将它们单独合并,以便稍后合并新的父文件夹,但这也不起作用,因为我得到了一个随机外观的网格。 你有没有办法解决这个问题,或者你建议我另一种方法?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Martin Gonzalez    7 年前

    也许你需要做一些 post-scan process

    尝试:

    • 在中打开扫描模型 3d software 如Maya、3D Max或Blender。
    • Attach Merge 所有部件一起。
    • 将其导出为 .fbx
    • 将其导入Unity。
    • 团结将是 single gameObject
        2
  •  1
  •   zambari    7 年前

    组合网格实际上非常简单(我会在一分钟内让您完成),但是有一个问题-虽然在运行时很容易做到,但我在尝试将生成的网格可靠地保存为硬盘文件资产到磁盘时遇到了一些问题。我最终还是到达了那里,但这比看起来要复杂得多。如果在Start()中可以保存资源,并且可以在编辑模式下进行,则无需保存资源,但生成的网格不会与场景一起自动保存,这只是需要记住的一点。

    返回几何体-几何体由三个阵列组成

    Vector3[] verts;
    Vector2[] uv; 
    int[] triangles; 
    

    唯一值得注意的是,如果有n个顶点,uv和vector3描述了第n个顶点(显然),三角形数组是3*n,包含引用顶点表的索引,它是按顺序排列的,因此如果要查找三角形k,请阅读

    x=triangles[k*3] 
    y=triangles[k*3+1] 
    z=triangles[k*3+2]
    

    然后你的三角形由三个向量定义,分别是顶点x,顶点y,顶点z。

    也有子网格,当网格包含多个材质时使用,但一旦了解了上述结构的布局,它就不再复杂了。

    共同创建一个新网格,首先获取组件子对象,然后获取所有网格的列表,计算顶点总数j。 创建一个新的网格对象,用表格verts=new int[j],tris=new int[j*3]初始化它,然后复制所有顶点数据。拥有网格后,使用网格过滤器和网格渲染器创建一个新对象,然后将其馈送到网格,就完成了。问题是,除非你保存资产,否则这将在播放模式状态下消失,但这是一个单独的问题

    如果有子图,则需要列出存在的所有材质,并按使用的材质对垂直面进行分组(子组=使用单个材质的grup),除了管理另一个列表之外,这并不难(如果忽略这一步,也不会发生什么可怕的事情,只会得到一个实体对象),这在大多数情况下对性能有好处,因为您的对象将是一个单独的drawcall,不依赖于动态批处理)

        3
  •  0
  •   Saad Anees    7 年前

    如果它是为Unity3D创建的,应该不会有问题。无论如何,如果您想要单个网格,您将需要一个3D建模工具来组合它,然后根据unity指南以FBX格式导出,如前所述 here . 我希望这对你有帮助。