0
我想通過它們的頂點以編程方式在maya項目中對類似對象(帶有變換的模型)進行分組,並想知道是否有可以計算的值來檢查相似的對象?我正在使用的模型是來自3D房屋的傢俱。我想將茶杯分組到單個組。他們的名字在層次結構中完全不同,所以我認爲通過某種幾何相似性將它們分組(創建字典)會有所幫助。有沒有一種方法可以以編程方式將幾何對象表示爲maya中的值?
我想通過它們的頂點以編程方式在maya項目中對類似對象(帶有變換的模型)進行分組,並想知道是否有可以計算的值來檢查相似的對象?我正在使用的模型是來自3D房屋的傢俱。我想將茶杯分組到單個組。他們的名字在層次結構中完全不同,所以我認爲通過某種幾何相似性將它們分組(創建字典)會有所幫助。有沒有一種方法可以以編程方式將幾何對象表示爲maya中的值?
比較兩個網格以檢測相似性是一個不平凡的問題,AFAIK Maya不提供此快捷方式。 此外,我第二個Prune在說,你清楚你的意思是「相似的對象」是非常重要的:根據你的目標相似程度,你可能需要實現相當複雜(和/或非常昂貴的)算法。
通過查看您鏈接的圖片,雖然在我看來,您只需檢測形狀節點的確切重複項,這通常更容易。 這裏是你如何做到這一點的例子:
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
類型的瑪雅節點)時,忽略轉換mesh_data
字典中。一個有趣的話題與這個主題(儘管很舊)的一些提示可以被讀取here。
歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [在主題](http://stackoverflow.com/help/on-topic)和[如何提問](http://stackoverflow.com/help/how-to-ask)適用於此處。 至少,我們需要您定義「類似的對象」,並舉例說明這個度量標準的工作原理。 – Prune