在maya中重新排序多边形面索引



我在Maya中遇到一个问题已经有一段时间了,无论是在这个网站上还是在这个网站下,我都找不到解决方案。我做了这个账户,这样我就可以直接向社区提出问题,并希望得到答案。

因此,问题在于:在建模过程中,人脸索引(例如obj.f[0])当然会变得混乱。我需要从用户指定的起点开始按顺序重新排序该人脸索引。这是为了将面放入选择列表中。(Maya将根据face_index编号放置列表,这不是我们想要的)为了澄清,人脸索引本身不需要更改。它只需要正确地进入一个列表。

到目前为止我做了什么:我能够编写一些代码来选择一条多边形。选定的面将转换为边列表,然后Maya搜索共享同一边的面,并按顺序将其附加到新列表中。这在条形图中很容易实现,因为相邻面只共享一条边。伪代码是:

select geo
select start face and make new_list
converts geo_sel into list
for geo_sel_face in geo_sel:
    convert to edge
    for new_list_face in new_list:
        convert to edge
        if edge in geo_sel_face in new_list_face:
            ordered_list.append(geo_sel_face)

类似的东西。当然,当处理像平面这样的完整曲面时,代码会完全中断,因为至少有两条边与其他面共享。

它的用途是:我写了一个脚本,基本上是在表面上种草(或任何其他类型的几何体)。原始脚本会查找面部中心,并在面部中心种植草或你的草。它还会将方向约束为法线。然而,索引是混乱的,做额外的工作,需要一个适当的索引变得不可能。如果列表是人可读的而不是机器可读的,这将对数据管理有很大帮助,这就是为什么我正在寻找这样做的方法。

最后:我试着寻找解决方案,但似乎找不到完整表面的解决方案。也许我需要从另一个角度来思考这一点,并非常感谢社区的任何帮助或启发。

感谢您抽出时间!

没有一种完全可靠的方法来满足你的要求,因为人脸没有可靠的独立身份,而且即使我们很清楚,也很难找到一个对计算机有意义的映射。

简单的做法是使用专用的UV贴图来包含您的订购信息。如果这涉及到人类的决策,你实际上可以要求艺术家制作一个名称UV贴图,并使用你脸的UV质心作为排序元素。这样的东西会给你一个UV人脸中心和人脸索引之间的映射:

def uv_centroids(mesh, map = 'map1'):
    results = dict()
    for f in range(cmds.polyEvaluate(mesh, f=True)):
        cmds.select("%s.f[%s]" % (mesh, f), r = True)
        uu, vv = cmds.polyEvaluate(  bc2=True, uvs=map)
        uu = sum(uu) / 2.0
        vv =sum(vv) / 2.0
        results[uu,vv] = f
    return results

由于人脸中心只是元组,对字典键使用sort()将首先按U排序,然后按V:排序

# example with a default plane
uv_dict  = uv_centroids('pPlane1')    
ordered = uv_dict.keys()
ordered.sort()
for k in ordered:
    print k, uv_dict[k]
# prints out the keys and faces ordered 0,10,20... 1, 11, 21.... etc

虽然紫外线和普通建模条件下的指数一样脆弱,但它们很容易重新创建,让艺术家可以对流量和顺序做出一些选择。您甚至可以使用TransferAttributes将旧贴图投影到新网格上。

相关内容

  • 没有找到相关文章

最新更新