我一直在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)
这样的事情。当然,在处理像平面这样的完整曲面时,代码会完全断开,因为至少有两条边与其他面共享。
这用于: 我写了一个脚本,基本上在一个表面上种草(或任何其他类型的几何)。原始的脚本寻找面部中心,并在脸部中心种植草或者你有什么。它还会限制法线的方向。但是,索引是混乱的,并且进行需要适当索引的额外工作变得不可能。如果列表是人类可读的而不是机器可读的,那么它将对数据管理有很大的帮助,这就是为什么我正在寻找一种方法来实现这一点。
最后: 我试图寻找一个解决方案,但似乎没有找到任何完整的表面。也许我需要从另一个角度思考这个问题,并且非常感谢社区的任何帮助或启发。
感谢您的时间!
答案 0 :(得分:0)
没有一种完全可靠的方法来做你所要求的,因为面孔没有可靠的独立身份 - 而且因为提出一个实际上对计算机有意义的映射可能非常棘手虽然这对我们来说很明显。
最简单的方法是使用专用的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
虽然UV在普通建模条件下与指数一样脆弱,但它们很容易重新创建,并允许艺术家对流量和顺序做出一些选择。您甚至可以使用TransferAttributes将旧映射投影到新网格上。