Я пишу инструмент, который поможет мне создавать пользовательские uvSets для модели, которые будут связаны с пандусами (без интерполяции), которые будут отправлены в элементы рендеринга vray_extraTex. они станут матами и будут использоваться так же, как мультиматы vRay. однако я не могу связать рампу, которая является моей текстурой для vray_extraTex, с пользовательским uvSet, используя pymel.
Я могу сделать все это вручную в Maya, но по какой-то причине мне не хватает чего-то, чтобы pymel мог связать UV с рампой. Я тестирую сцену Maya с pSphere, у которой есть два набора uvSet, и второй набор активен. Этот код был немного урезан:
def main():
inclusiveSet = None
renderElements =[]
ramps = []
newChannels = ['TestA','TestB','TestC','TestD']
for i, channel in enumerate(newChannels):
modIndex = i % 3 # 0:Red, 1:Green, 2:Blue
shapeNode=pm.PyNode('pSphereShape1')
transformNode=shapeNode.getTransform()
if modIndex == 0: # the first channel in the new Render Element
# make an etex render element
eTexElement = pm.PyNode(pm.mel.eval('vrayAddRenderElement("ExtraTexElement")'))
eTexElement.vray_name_extratex.set('')
eTexElement.vray_explicit_name_extratex.set('empty_empty_empy')
renderElements.append(eTexElement)
# make a ramp
ramp = pm.shadingNode('ramp', asTexture=True, name='eTex_{}_ramp'.format(transformNode.name()))
ramps.append(ramp)
ramp.outColor.connect(eTexElement.vray_texture_extratex)
# make a place2dtexture
place2d = pm.shadingNode('place2dTexture', asUtility=True)
place2d.outUV.connect(ramp.uv)
place2d.translateFrameU.set(len(renderElements) - 1)
# link UVs to ramp
# NOT WORKING
indices = pm.polyUVSet(shapeNode.name(), query=True, allUVSetsIndices=True)
currentUVSet = pm.polyUVSet(shapeNode, query=True, currentUVSet=True )
for i in indices:
if currentUVSet == pm.getAttr("{}.uvSet[{}].uvSetName".format(shapeNode.name(), i)):
pm.uvLink(uvSet='{}.uvSet[{}].uvSetName'.format(shapeNode.name(), i) , texture=ramp)
explicit_name = eTexElement.vray_explicit_name_extratex.get()
nameTokens = explicit_name.split('_')
nameTokens[modIndex] = channel
explicit_name = '_'.join(nameTokens)
eTexElement.vray_explicit_name_extratex.set(explicit_name)
main()
Я не получаю ошибок, но когда я проверяю UV Linking, рампы по-прежнему устанавливаются на map1 uvSet, а не на второй активный набор.
Я ожидал увидеть рампы, подключенные к узлу uvChooser и связанные со вторым uvSet.
Во время написания этого поста я понял, что, возможно, мне нужно прикрепить рампы к шейдеру, назначенному для гео, прежде чем я смогу связать их с python. Я попробую проверить это дальше