是否有一种方法可以将几何对象表示为Maya中的值



我试图通过编程方式将类似的对象(带有变换的模型(在玛雅项目中分组,并想知道我是否可以计算一个值来检查相似对象吗?我与之合作的型号是来自3D房屋的家具。示例家具

我想将茶杯分组为一个组。他们的名字在层次结构中完全不同,因此我认为通过某些几何相似性将它们分组(创建词典(会有所帮助。

比较两个网格以检测相似性是一个非平凡的问题,而afaik maya不为此提供快捷方式。另外,我第二次修剪说,对于您来说,要清楚您所说的"相似对象"非常重要:取决于您的相似程度,您可能需要实施非常复杂的(和/或非常昂贵的((算法。

通过查看您链接的图片,在我看来,您只需要检测到形状节点的精确重复,这通常更容易。这是您如何实现这一目标的一个示例:

from maya import cmds
def getGeoHash(mesh):
    mesh_data = cmds.polyEvaluate(mesh)
    # simple dictionary hashing, as suggested here:
    # https://stackoverflow.com/questions/5884066/hashing-a-dictionary
    return hash(frozenset(mesh_data.items()))
def groupSimilarMeshes():
    meshes = cmds.ls(typ='mesh', l=1)
    mesh_dict = {}
    for mesh in meshes:
        geo_hash = getGeoHash(mesh)
        if not geo_hash in mesh_dict:
            mesh_dict[geo_hash] = []
        # store the mesh transforms: there will be more than one
        # in case some meshes are instanced
        transforms = cmds.listRelatives(mesh, p=1)
        mesh_dict[geo_hash].extend(transforms)
    for key, duplicates in mesh_dict.iteritems():
        if len(duplicates) < 2:
            # non-duplicates are skipped
            continue
        cmds.group(duplicates, n='similar')
groupSimilarMeshes()

一些注释:

  • getGeoHash是哈希几何形状的函数;使用形状(mesh类型的Maya节点(,以忽略转换
  • polyEvaluate返回的基本数据用于哈希,以使事情保持简单和计算便宜
  • 在某个时候,您可能需要完善逻辑,因为在不同方案上使用脚本时出现了新的异常。为此,您可以在哈希(即3D和紫外线空间,质心坐标,非字母几何形状等(之前,在 mesh_data字典中添加更多数据。一个有趣的线程,其中有一些有关此主题的提示(尽管很旧(可以在这里阅读。

相关内容

  • 没有找到相关文章

最新更新