Maya Script Python レイヤードテクスチャの入れ替え

import maya.cmds as cmds

def texchenge():
	result = "{0:=^100}\n".format("RESULT")
	result += "\n"+"\n"
	for x in cmds.ls( mat=1):
		if x not in ["lambert1","particleCloud1","shaderGlow1"] :
			result += "{0:-<50}{1:->50}\n".format(x,"Material")
			result += "\n"
			oCon = cmds.listConnections( x, connections=1, source=1, destination=0 )
#			for c in oCon :
#				result += "{0:-<50}{1:->50}\n".format(c,"Connections")
#			result += "\n"
			oCoc = [x for x in oCon if x.find(".color") != -1]
			oCoc = cmds.listConnections( oCoc, connections=1, source=1, destination=0 )
			oCol = cmds.ls( oCoc,type="layeredTexture" )
			if oCol != [] :
				oCol = cmds.listConnections( oCol, connections=1, source=1, destination=0, plugs=True)
				oColc = [x for x in oCol if x.find(".color") != -1 or x.find("outColor") != -1]
				oCola = [x for x in oCol if x.find(".alpha") != -1 or x.find("outAlpha") != -1]
#				for c in oColc :
#					result += "{0:-<50}{1:->50}\n".format(c,"LayerdTextureColor")
#				result += "\n"
				oNod,oImg = oColc[0::2],oColc[1::2]
				for o1,o2 in zip(oNod,oImg) :
					cmds.disconnectAttr(o2,o1)
					result += "{0:-<40}{1:-<40}{2:->20}\n".format(o1,o2,"OriginalConnection")
				result += "\n"
				oShif = oImg[1:]
				oShif.append(oImg[0])
				for nod,img in zip(oNod,oShif) :
					cmds.connectAttr(img,nod,f=1)
					result += "{0:-<40}{1:-<40}{2:->20}\n".format(nod,img,"ChangeConnection")
				if oCola != [] :
					result += "\n"
					for na,ia in zip(oCola[0::2],oCola[1::2]) :
						oNum = int(na.split("[")[1].split("]")[0])
						if oNum > 0 :
							oNum -= 1
						else :
							oNum = len(oNod)-1
						result += "{0:-<40}{1:-<40}{2:->20}\n".format(na,ia,"AlphaConnection")
						cmds.disconnectAttr(ia,na)
						na = na.split("[")[0]+"["+str(oNum)+"]"+na.split("[")[1].split("]")[1]
						cmds.connectAttr(ia,na,f=1)
						result += "{0:-<40}{1:-<40}{2:->20}\n".format(na,ia,"ChangeAlConnection")
				result += "\n"+"\n"
		result += "{0:=^100}\n".format("")
		print result
texchenge()

カラーノードに刺さったレイヤードテクスチャの順番を切り替えるスクリプトです。
実行するごとに順番が1つずつ変わります。1番が0番になる。という具合です。
そのレイヤードテクスチャにアルファがあれば、それも1つずつずれるようにしました。無意味に長くなった一つの原因です。
そして、もうひとつの原因はリザルトが出力されるようになっています。スクリプトエディタにプリントされます。
コメントアウト部分「#」だけを消すとリザルトが増えます。好きなように改造してください。

 

そのリザルトで使いましたが、文字列フォーマットの仕様がPython3.0で変更されるそうで、一応それに合わせて書いて見ました。

 

使い方は、コードをスクリプトエディタにコピペして実行すれば使えます。その際はスクリプトエディタのタブを「Python」にしてください。
全文選択して中ボタンでドラッグすればシェルフに登録することができます。
あれ、これってレイヤードテクスチャが無かった時の処理がない、、
ある程度色々な状況を想定したつもりでしたが、一番肝心なところを忘れておりました、、

2012/1/30追記
修正版を上げました。
レイヤードテクスチャが使用されていないマテリアルが存在する場合、そのマテリアルは何もしないようにしました。
あと、アルファが刺さっているところの処理を修正しました。
因みに番号を順番に変えてゆくだけなので、刺さっているテクスチャの数が違うとずれます。その場合はあくまでも確認用として使ってください。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です