Mayaman > Mayaシェーダーを簡単に切り替える

「Mayaman/Mayaシェーダーを簡単に切り替える」の編集履歴(バックアップ)一覧に戻る

Mayaman/Mayaシェーダーを簡単に切り替える - (2008/05/13 (火) 15:38:42) のソース

MayaでOpenGLをテクスチャつきで表示しないとレイアウトしようがない、
でもレンダリングはRendermanShader使わないといけない。

そんな場合を想定してます。
これは一例ですが、shaderノードに"MM"と"MA"というカラーアトリビュートを作成し
そこにMayaとMayamanの.outColorを接続。必要に応じてこのどちらかを.surfaceShaderにつなげば良いと思います。
とりあえずマテリアル選択して、つながってるSGにMMというアトリビュートを作成し、.outColorをつなぐPythonスクリプト。
コピペで動くような代物ではないので、読んで各自改変してください。
#code(){{
import maya.cmds as cmds
for i in cmds.ls(sl=True):
	SG = cmds.listConnections( i + '.outColor', d=True, s=False )
	cmds.select( clear=True )
	cmds.select( SG[0], ne=True)
	cmds.addAttr( longName='MM', usedAsColor=True, attributeType='float3' )
	cmds.addAttr( longName='MMR', attributeType='float', parent='MM' )
	cmds.addAttr( longName='MMG', attributeType='float', parent='MM' )
	cmds.addAttr( longName='MMB', attributeType='float', parent='MM' )
	cmds.connectAttr( i+'.outColor', SG[0]+'.MM')
}}

MAアトリビュートもつくり、そこにMayaのシェーダをつないで置いてください。
僕は結構激しい状況なので規則正しいノード名をすべてに付けて
スクリプトで全部やっちゃいました。

次は切り替えスクリプト。マテリアルを選択して実行です。
#code(){{
import maya.cmds as cmds
switchTo = 'MA'
for i in cmds.ls(sl=True):
	SG = cmds.listConnections( i + '.outColor', d=True, s=False )
	cmds.select( clear=True )
	cmds.select( SG[0], ne=True)
	attrs = cmds.listAttr( st=['MM','MA'] )
	if len(attrs)==2:
		MA = cmds.listConnections( SG[0] + '.' + switchTo, d=False, s=True )
		cmds.disconnectAttr(i + '.outColor', SG[0]+'.surfaceShader')
		cmds.connectAttr( MA[0]+'.outColor', SG[0]+'.surfaceShader')
}}
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。