Maya でインスタンス化されたジオメトリの使用を実験してきましたが、単純なシーンの作成から生じるノードの関連付けを理解していません。
import maya.cmds as cmds
polyCubeTemplate = cmds.polyCube(n="polyCubeTemplate", w=0.1, h=0.4, d=0.4)
cmds.setAttr("polyCubeTemplate.visibility", 0)
cube = cmds.instance(polyCubeTemplate[0], n="pCube0")
cmds.move(-0.75, -1.5, 7.0, "pCube0")
cmds.setAttr("pCube0.visibility", 1)
cubeSG = cmds.sets(n="set0", renderable=True, noSurfaceShader=True, empty=True)
cubeShader = cmds.shadingNode("mia_material_x_passes", asShader=True, n="mia_material_x_passes0")
cmds.setAttr(cubeShader+".diffuse",0.003921569,0.003921569,0.0, type="double3")
cmds.connectAttr(cubeShader+".message",cubeSG+".miPhotonShader")
cmds.connectAttr(cubeShader+".message",cubeSG+".miShadowShader")
cmds.connectAttr(cubeShader+".message",cubeSG+".miMaterialShader")
cmds.sets(cube[0], edit=True, forceElement=cubeSG)
cube = cmds.instance(polyCubeTemplate[0], n="pCube1")
cmds.move(-0.75, -1.0, 7.0, "pCube1")
cmds.setAttr("pCube1.visibility", 1)
cubeSG = cmds.sets(n="set1", renderable=True, noSurfaceShader=True, empty=True)
cubeShader = cmds.shadingNode("mia_material_x_passes", asShader=True, n="mia_material_x_passes1")
cmds.setAttr(cubeShader+".diffuse",0.011764706,0.011764706,0.0, type="double3")
cmds.connectAttr(cubeShader+".message",cubeSG+".miPhotonShader")
cmds.connectAttr(cubeShader+".message",cubeSG+".miShadowShader")
cmds.connectAttr(cubeShader+".message",cubeSG+".miMaterialShader")
cmds.sets(cube[0], edit=True, forceElement=cubeSG)
シーンでpCube0を選択すると、アトリビュート エディタに次のノード リストが表示されます。
- トランスフォーム ノードpCube0
- シェイプ/メッシュ ノードpolyCubeTemplateShape
- オブジェクト ノードpolyCube1
- デフォルト シェーディング グループ ノードinitialShadingGroup
- デフォルトのマテリアル ノードlambert1
- mental ray マテリアル ノードmia_material_x_passes0
- mental ray マテリアル ノードmia_material_x_passes1
- シェイプ/メッシュ ノードpolyCubeTemplateShapeの繰り返し (?)
上記のインスタンス化されていないバージョンは
import maya.cmds as cmds
cube = cmds.polyCube(n="pCube0", w=0.1, h=0.4, d=0.4)
cmds.setAttr(cube[0]+".translateX",-0.75)
cmds.setAttr(cube[0]+".translateY",-1.5)
cmds.setAttr(cube[0]+".translateZ",7.0)
cubeSG = cmds.sets(n="set0", renderable=True, noSurfaceShader=True, empty=True)
cubeShader = cmds.shadingNode("mia_material_x_passes", asShader=True, n="mia_material_x_passes0")
cmds.setAttr(cubeShader+".diffuse",0.003921569,0.003921569,0.0, type="double3")
cmds.connectAttr(cubeShader+".message",cubeSG+".miPhotonShader")
cmds.connectAttr(cubeShader+".message",cubeSG+".miShadowShader")
cmds.connectAttr(cubeShader+".message",cubeSG+".miMaterialShader")
cmds.sets(cube[0], edit=True, forceElement=cubeSG)
cube = cmds.polyCube(n="pCube1", w=0.1, h=0.4, d=0.4)
cmds.setAttr(cube[0]+".translateX",-0.75)
cmds.setAttr(cube[0]+".translateY",-1.0)
cmds.setAttr(cube[0]+".translateZ",7.0)
cubeSG = cmds.sets(n="set1", renderable=True, noSurfaceShader=True, empty=True)
cubeShader = cmds.shadingNode("mia_material_x_passes", asShader=True, n="mia_material_x_passes1")
cmds.setAttr(cubeShader+".diffuse",0.011764706,0.011764706,0.0, type="double3")
cmds.connectAttr(cubeShader+".message",cubeSG+".miPhotonShader")
cmds.connectAttr(cubeShader+".message",cubeSG+".miShadowShader")
cmds.connectAttr(cubeShader+".message",cubeSG+".miMaterialShader")
cmds.sets(cube[0], edit=True, forceElement=cubeSG)
このシーンでpCube0を選択すると、ノード リストが表示されます
- トランスフォーム ノードpCube0
- シェイプ / メッシュ ノードpolyCube0Shape
- オブジェクト ノードpolyCube1
- mental ray マテリアル ノードmia_material_x_passes0
これは、インスタンス化されたシーンで見たいと思っている構造です。
だから私は3つの質問があります:
- インスタンス化されたシーンの場合、pCube0がpCube1のマテリアル ノード( mia_material_x_passes1 )のコピーを「取得」したのはなぜですか? (これらの mental ray マテリアル ノードは、共有の親/テンプレート polyCube にプラグインされていますか?)
- シェイプ/メッシュ ノードpolyCubeTemplateShapeの繰り返しが存在する理由は何ですか?
- この種の乱雑なノード構造を回避するために、適切にインスタンス化するにはどうすればよいですか?