0

Maya を使用してプロシージャルな作業を行っています。Maya にロードする必要がある多くのテクスチャがあり、それらにはすべて透明度 (アルファ チャンネル) があります。このプロセスを自動化できるようになりたいです。PyMEL を使用すると、テクスチャを作成してシェーダーに接続できますが、既定ではアルファが適切に設定されません。psdFileTex ノードには「使用するアルファ」と呼ばれる属性があり、アルファ チャネルを機能させるには「透明度」に設定する必要があります。私の質問はこれです - PyMEL スクリプトを使用して「使用するアルファ」属性を適切に設定するにはどうすればよいですか?

テクスチャを設定するために使用しているコードは次のとおりです。

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()して、使用可能な編集可能な属性を取得できます。Run listAttr('myShaderPSD')、その出力に注意してください。「alpha」と「alphaList」と呼ばれる2つの属性があります。アルファは、現在選択されているアルファ チャンネルを返します。AlphaList は、psd に含まれるアルファ チャネルの数に関係なく返されます。

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

1 つのアルファまたは最初のアルファ チャネルのみを使用することがわかっている場合は、単純にこれを行うことができます。

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

リストは 0 から反復を開始するので、最初のアルファ チャンネルは位置 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 に答える