一直都覺得maya要在不同scene轉換skin很麻煩,內建的功能基本上就是陀屎,要安裝外掛又很麻煩,還要一個一個驗證好不好用,直到最近發現ngSkin tool其實早就已經把這個功能打包好了,順帶一提Maya 2026會直接內建ngSkin tool(沒錯,autodesk已經把他們買下來了)。
而且官網還提供API命令可以直接寫成工具,超好用。
首先先介紹手動操作,基本上就是安裝好之後,選到model然後initialize skinning layers。
然後輸出成json檔。
接著就可以準備import,這邊要注意的就是要確定model已經有bind到joints上了,否則會出現錯誤!
匯入選項我會選By VertexID,目前看起來是最準確的方式!
前面說過官網有提供api可以自己訂製功能,所以寫了個小工具可以批次輸出skin,這樣就不用一個一個選很費力。
總之就是指定要輸出的model,可以用cmds.ls(sl=True)也可以自己直接指定物件。
只要輸出的json檔案名稱跟匯入的model對得起來就可以了!
import os
import ngSkinTools2.api
from ngSkinTools2 import api as ngst_api
from ngSkinTools2.api import init_layers
from ngSkinTools2.api import InfluenceMappingConfig, VertexTransferMode
import maya.cmds as cmds
for i in["eyeshell_lod0_mesh","eyeEdge_lod0_mesh","head_lod0_mesh"]:
#check if mesh has ngSkin node
try:
data_node = ngSkinTools2.api.target_info.get_related_data_node(i)
except Exception as e: #if not create NgSkin node
skin_clusters = cmds.ls(cmds.listHistory(i), type='skinCluster')
layers = init_layers(skin_clusters[0])
layer_base = layers.add("Base_weights")
output_file_name = os.path.join("XXX/XXXX/XX", i+'_Skin.json')
ngst_api.export_json(i, file=output_file_name)
print(f"⚠️ {i} has no ngSkin data node,because:{e}")
else: #if true export skin weight data
output_file_name = os.path.join("XXXXXX", i+'_Skin.json')
ngst_api.export_json(i, file=output_file_name)
print(f"✅ {i} 's ngSkin data node: {data_node}")
#import skin weight
config = InfluenceMappingConfig()
config.use_distance_matching = True
config.use_name_matching = True
for i in["eyeshell_lod0_mesh","eyeEdge_lod0_mesh","head_lod0_mesh"]:
#check if mesh has skin cluster
skin_clusters = cmds.ls(cmds.listHistory(i), type='skinCluster')
if skin_clusters:
#run the import
ngst_api.import_json(i,file=os.path.join("XXXXXX", i+'_Skin.json'),vertex_transfer_mode=VertexTransferMode.vertexId,influences_mapping_config=config)
else:
print(f"❌ {i} has no skin cluster, please assign it first!")
0 留言