使用PyMEL在类psdFileTex的对象中设置“Alpha to Use”属性

时间:2013-09-29 21:04:22

标签: maya pymel

我正在使用Maya做一些程序性的工作,我需要加载到Maya中的很多纹理,并且它们都有透明度(alpha通道)。我非常希望能够自动化这个过程。使用PyMEL,我可以创建我的纹理并将它们连接到着色器,但默认情况下alpha没有正确设置。 psdFileTex节点中有一个名为“Alpha to Use”的属性,必须将其设置为“Transparency”才能使我的Alpha通道工作。我的问题是 - 如何使用PyMEL脚本来正确设置“Alpha to Use”属性?

以下是我用来设置纹理的代码:

import pymel.core as pm

pm.shadingNode('lambert', asShader=True, name='myShader1')
pm.sets(renderable=True, noSurfaceShader=True, empty=True, name='myShader1SG')
pm.connectAttr('myShader1.outColor', 'myShader1SG.surfaceShader', f=True)
pm.shadingNode('psdFileTex', asTexture=True, name='myShader1PSD')
pm.connectAttr('myShader1PSD.outColor', 'myShader1.color')
pm.connectAttr('myShader1PSD.outTransparency', 'myShader1.transparency')
pm.setAttr('myShader1ColorPSD.fileTextureName', '<pathway>/myShader1_texture.psd', type='string')

如果有人可以帮助我,我会非常感激。 感谢

1 个答案:

答案 0 :(得分:0)

对于任何节点,您都可以使用listAttr()来获取可用的可编辑属性。运行listAttr('myShaderPSD'),注意它的输出,将有两个名为'alpha'和'alphaList'的属性。 Alpha,将返回当前选定的Alpha通道。 AlphaList会返回你在psd中的许多alpha通道。

示例

pm.PyNode('myShader1PSD').alphaList.get()
# Result: [u'Alpha 1', u'Alpha 2'] # 

如果你知道你只会使用一个alpha或第一个alpha通道,那么你就可以做到这一点。

psdShader = pm.PyNode('myShader1PSD')
alphaList = psdShader.alphaList.get()
if (len(alphaList) > 0):
    psdShader.alpha.set(alphaList[0])
else:
    // No alpha channel
    pass

请记住,列表从0开始迭代,因此我们的第一个alpha通道将位于位置0。

此外且无关,虽然您仍在使用为Pymel转换的maya.core的衍生命令,但仍然可以使用一些命令来帮助您的代码更好地阅读。

pm.setAttr('myShader1ColorPSD.fileTextureName', '<pathway>/myShader1_texture.psd', type='string')

我们可以将其转换为pymel,如下所示:

pm.PyNode('myShader1ColorPSD').fileTextureName.set('<pathway>/myShader1_texture.psd')

pm.connectAttr('myShader1PSD.outColor', 'myShader1.color')

可以转换为:

pm.connect('myShader1PSD.outColor', 'myShader1.color')

虽然它们可能只是很小的变化,但它只是稍微好一些,而且它是原生的PyMel。

无论如何,我希望我能帮到你!