2015-05-17 14 views
1

Я экспериментировал с использованием инстанс геометрии в Maya, и я не понимая, узловые ассоциации, возникающие в результате создания простой сцены:Использование инстанс геометрии в 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

enter image description here

Не-инстанс версия выше

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

Это вид структуры я Мне бы хотелось посмотреть на сцену.

Поэтому у меня есть три вопроса:

  1. В случае инстанс сцены, то почему pCube0 'взял' копию pCube1 «s материала узла (mia_material_x_passes1)? (Являются ли эти материальные узлы mental ray каким-то образом подключены к совместно используемому родительскому/шаблону polyCube?)
  2. Что объясняет наличие повторения узла фигуры/сетки polyCubeTemplateShape?
  3. Как я могу правильно указать так, чтобы избежать такой структуры беспорядочных узлов?

ответ

1

Приведение в действие Maya осуществляется путем воспитания одного и того же узла формы до нескольких преобразований: вот почему вы видите копию. Назначение материала обрабатывается соединениями от .instObjectGroups по форме, которые указывают подмножества геометрии на различные узлы shadingEngine (узлы «SG» на вашем гиперграфе). Однако shadingEngine - это просто набор, который имеет специализированную коллекцию для шейдеров (шарики шейдера в пользовательском интерфейсе материалов или редактор атрибутов). Фактический «шейдер» имеет множество атрибутов, в зависимости от типа шейдера и его настроек. В вашем случае появляется два разных шейдера, по одному для каждого экземпляра, с разными цветами.

Похоже, что исходная сцена включала невидимую копию объекта в качестве шаблона, а затем имела два видимых экземпляра. Это не редкость, когда людям нужен удобный способ редактировать «магическую» копию геометрии, которая дублируется во многих разных местах разных размеров и ориентации. Редактирование фактической формы шаблона - захват и перемещение вершины, скажем - будет одновременно обновлять все копии.

Это все полностью ванильное майя. Это выглядит так, как возникает сценарий, когда вы просматриваете файл

+0

Итак, кажется, что при инстанцировании общий (родительский) узел формы подключается к каждому из узлов группы затенения объектов instant: (polyCubeTemplateShape-соединение с initialShadingGroup) polyCubeTemplateShape.instObjGroups [0] -> initialShadingGroup.dagSetMembers [0] (соединение polyCubeTemplateShape с SET0 затенением группы) polyCubeTemplateShape.instObjGroups [1] -> set0.dagSetMembers [0] (polyCubeTemplateShape подключение к SET1 затенением группы) polyCubeTemplateShape.instObjGroups [2] - > set1.dagSetMembers [1]. Моя проблема: время рендеринга намного больше для сцены с инстансом. – svenpables

+0

Значительно больше, чем нестроенный? – theodox

+0

Видимо. Я провела грубую проверку. Неинстансированные и инстантивные сцены содержат те же самые геометрические и затеняющие наборы (4613 поликубов, 4613 затененных наборов), за исключением того, что в сценарной сцене содержится 7 невидимых родителей поликуба. Ниже приведены результаты трех визуализаций (раз в секундах, нестатистические моменты, перечисленные вначале): 2K (24s, 54s); 2K + FG (38s, 68s); 2K + FG + Качество = 4 (88 с, 96 с). Я понял, что сцены, созданные в сценариях, обычно выполняются намного быстрее, чем неуправляемые. Я что-то упускаю? – svenpables

Смежные вопросы