1

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つの質問があります:

  1. インスタンス化されたシーンの場合、pCube0がpCube1のマテリアル ノード( mia_material_x_passes1 )のコピーを「取得」したのはなぜですか? (これらの mental ray マテリアル ノードは、共有の親/テンプレート polyCube にプラグインされていますか?)
  2. シェイプ/メッシュ ノードpolyCubeTemplateShapeの繰り返しが存在する理由は何ですか?
  3. この種の乱雑なノード構造を回避するために、適切にインスタンス化するにはどうすればよいですか?
4

1 に答える 1

1

Maya でのインスタンス化は、同じシェイプ ノードを複数のトランスフォームにペアレント化することによって実装されます。そのため、コピーが表示されます。マテリアルの割り当ては、ジオメトリのサブセットをさまざまなノード (ハイパーグラフの「SG」ノード).instObjectGroupsにポイントするシェイプ上の接続によって処理されます。shadingEngineただし、shadingEngine は、シェーダーに特化したコレクション (マテリアル UI または属性エディターのシェーダー ボール) を持つ単なるセットです。実際の「シェーダー」には、シェーダーの種類とその設定に応じて、多くの属性があります。あなたの場合、インスタンスごとに 1 つずつ、異なる色の 2 つの異なるシェーダーがあるようです。

元のシーンには、オブジェクトの非表示のコピーがテンプレートとして含まれていて、2 つのインスタンスが表示されていたようです。さまざまな場所にさまざまなサイズと向きで複製されたジオメトリの「マスター」コピーを編集する便利な方法が必要な場合、これは珍しいことではありません。実際のテンプレート シェイプを編集すると (頂点をつかんで移動するなど)、すべてのコピーが同時に更新されます。

これはすべて完全にバニラ Maya です。ファイルをトロールすると、インスタンス化されたシーンがどのように見えるか

于 2015-05-18T02:46:08.177 に答える