Я экспериментировал с использованием инстанс геометрии в 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
Не-инстанс версия выше
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
Это вид структуры я Мне бы хотелось посмотреть на сцену.
Поэтому у меня есть три вопроса:
- В случае инстанс сцены, то почему pCube0 'взял' копию pCube1 «s материала узла (mia_material_x_passes1)? (Являются ли эти материальные узлы mental ray каким-то образом подключены к совместно используемому родительскому/шаблону polyCube?)
- Что объясняет наличие повторения узла фигуры/сетки polyCubeTemplateShape?
- Как я могу правильно указать так, чтобы избежать такой структуры беспорядочных узлов?
Итак, кажется, что при инстанцировании общий (родительский) узел формы подключается к каждому из узлов группы затенения объектов 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
Значительно больше, чем нестроенный? – theodox
Видимо. Я провела грубую проверку. Неинстансированные и инстантивные сцены содержат те же самые геометрические и затеняющие наборы (4613 поликубов, 4613 затененных наборов), за исключением того, что в сценарной сцене содержится 7 невидимых родителей поликуба. Ниже приведены результаты трех визуализаций (раз в секундах, нестатистические моменты, перечисленные вначале): 2K (24s, 54s); 2K + FG (38s, 68s); 2K + FG + Качество = 4 (88 с, 96 с). Я понял, что сцены, созданные в сценариях, обычно выполняются намного быстрее, чем неуправляемые. Я что-то упускаю? – svenpables