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