我正在使用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')
如果有人可以帮助我,我会非常感激。 感谢
答案 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。
无论如何,我希望我能帮到你!