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

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

そんな場合を想定してます。
これは一例ですが、shaderノードに"MM"と"MA"というカラーアトリビュートを作成し
そこにMayaとMayamanの.outColorを接続。必要に応じてこのどちらかを.surfaceShaderにつなげば良いと思います。
とりあえずマテリアル選択して、つながってるSGにMMというアトリビュートを作成し、.outColorをつなぐPythonスクリプト。
コピペで動くような代物ではないので、読んで各自改変してください。
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のシェーダをつないで置いてください。
僕は結構激しい状況なので規則正しいノード名をすべてに付けて
スクリプトで全部やっちゃいました。

次は切り替えスクリプト。マテリアルを選択して実行です。
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')
最終更新:2008年05月13日 15:38
ツールボックス

下から選んでください:

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