0

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

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

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')

如果有人可以帮助我,我将不胜感激。谢谢

4

1 回答 1

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。

无论如何,我希望我对你有所帮助!

于 2013-10-11T05:26:07.073 回答