シェーディング・ノード・プラグインによって、Maya のシェーディング・ノードを作成することができます。
以下のアトリビュート名は、シェーダ用に予約されているダイナミックアトリビュート(<レンダリングアトリビュート)の名前です。
これらの名前をアトリビュート名として使用すると、特別な意味になります。
blobbySurfaceFactor , displacement , easMask , farPointCamera , farPointObj , farPointWorld , filterSize , flippedNormal , illuminationIndex , infoBits , lightData , lightTable , matrixObjectToWorld , matrixWorldToObject , mediumRefractiveIndex , normalCamera , numShadingSamples , objectId , objectType , opticalDepth , outColor , outGlowColor , outMatteOpacity , outParticleEmission , outTransparency , particleAge , particleAttrArray , particleColor , particleEmission , particleEntryParam , particleExitParam , particleIncandescence , particleLifespan , particleOrder , particleTransparency , particleWeight , pixelCenter , pixelCoverage , pointCamera , pointObj , pointWorld , primitiveId , rayDepth , rayDirection , rayOrigin , receiveShadows , refPointCamera , refPointObj , refPointWorld , renderState , shadowAttenuation , tangentUCamera , tangentVCamera , translucenceDepth , triangleNormalCamera , uvCoord , uvFilterSize , vertexCameraOne , vertexCameraThree , vertexCameraTwo , vertexUvOne , vertexUvThree , vertexUvTwo 
オブジェクトのノーマルベクトルの X 成分が 0 のときに黒、0 以上のときは指定した色になるシェーダを作成してみましょう。
import sys
import maya.OpenMaya
import maya.OpenMayaMPx
kPluginNodeName = 'myShader1'
kPluginNodeId = maya.OpenMaya.MTypeId(0x87004)
class myShader1(maya.OpenMayaMPx.MPxNode):
    aInColor = maya.OpenMaya.MObject()
    aNormalCamera = maya.OpenMaya.MObject()
    aOutColor = maya.OpenMaya.MObject()
    def __init__(self):
        maya.OpenMayaMPx.MPxNode.__init__(self)
    def compute(self, plug, block):
        if plug == myShader1.aOutColor or plug.parent() == myShader1.aOutColor:
            resultColor = maya.OpenMaya.MFloatVector(0.0, 0.0, 0.0)
            
            inColor = block.inputValue(myShader1.aInColor).asFloatVector()
            normalCamera = block.inputValue(myShader1.aNormalCamera).asFloatVector()
            if normalCamera.x >= 0:
                resultColor.x = inColor.x
                resultColor.y = inColor.y
                resultColor.z = inColor.z
            outColorHandle = block.outputValue(myShader1.aOutColor)
            outColorHandle.setMFloatVector(resultColor)
            outColorHandle.setClean()
        else:
            return maya.OpenMaya.kUnknownParameter
def nodeCreator():
    return maya.OpenMayaMPx.asMPxPtr(myShader1())
def nodeInitializer():
    nAttr = maya.OpenMaya.MFnNumericAttribute()
    myShader1.aNormalCamera = nAttr.createPoint('normalCamera', 'n')
    nAttr.setKeyable(True) 
    nAttr.setStorable(True)
    nAttr.setReadable(True)
    nAttr.setWritable(True)
    nAttr.setDefault(1.0, 1.0, 1.0)
    myShader1.aInColor = nAttr.createColor('inColor', 'ic')
    nAttr.setStorable(True)
    nAttr.setReadable(True)
    nAttr.setWritable(True)
    nAttr.setDefault(1.0, 1.0, 1.0)
    myShader1.aOutColor = nAttr.createColor('outColor', 'oc')
    nAttr.setStorable(False)
    nAttr.setHidden(False)
    nAttr.setReadable(True)
    nAttr.setWritable(False)
    myShader1.addAttribute(myShader1.aInColor)
    myShader1.addAttribute(myShader1.aNormalCamera)
    myShader1.addAttribute(myShader1.aOutColor)
    myShader1.attributeAffects (myShader1.aInColor, myShader1.aOutColor)
    myShader1.attributeAffects (myShader1.aNormalCamera, myShader1.aOutColor)
def initializePlugin(mobject):
    mplugin = maya.OpenMayaMPx.MFnPlugin(mobject)
    try:
        mplugin.registerNode( kPluginNodeName, kPluginNodeId, nodeCreator, 
                    nodeInitializer, maya.OpenMayaMPx.MPxNode.kDependNode, 'utility/color' )
    except:
        sys.stderr.write( 'Failed to register node: %s' % kPluginNodeName )
        raise
def uninitializePlugin(mobject):
    mplugin = maya.OpenMayaMPx.MFnPlugin(mobject)
    try:
        mplugin.deregisterNode( kPluginNodeId )
    except:
        sys.stderr.write( 'Failed to deregister node: %s' % kPluginNodeName )
        raise
 
 
import sys
	import maya.OpenMaya
	import maya.OpenMayaMPx
	kPluginNodeName = 'myShader1'
	kPluginNodeId = maya.OpenMaya.MTypeId(0x87004)
	class myShader1(maya.OpenMayaMPx.MPxNode):
	aInColor = maya.OpenMaya.MObject()
	aNormalCamera = maya.OpenMaya.MObject()
	aOutColor = maya.OpenMaya.MObject()
	def __init__(self):
	maya.OpenMayaMPx.MPxNode.__init__(self)
	def compute(self, plug, block):
	if plug == myShader1.aOutColor or plug.parent() == myShader1.aOutColor:
	resultColor = maya.OpenMaya.MFloatVector(0.0, 0.0, 0.0)
	inColor = block.inputValue(myShader1.aInColor).asFloatVector()
	normalCamera = block.inputValue(myShader1.aNormalCamera).asFloatVector()
	if normalCamera.x >= 0:
  resultColor.x = inColor.x
  resultColor.y = inColor.y
  resultColor.z = inColor.z
	outColorHandle = block.outputValue(myShader1.aOutColor)
	outColorHandle.setMFloatVector(resultColor)
	outColorHandle.setClean()
	else:
  return maya.OpenMaya.kUnknownParameter
	def nodeCreator():
	  return maya.OpenMayaMPx.asMPxPtr(myShader1())
	def nodeInitializer():
	nAttr = maya.OpenMaya.MFnNumericAttribute()
	myShader1.aNormalCamera = nAttr.createPoint('normalCamera', 'n')
	nAttr.setKeyable(True) 
	nAttr.setStorable(True)
	nAttr.setReadable(True)
	nAttr.setWritable(True)
	nAttr.setDefault(1.0, 1.0, 1.0)
	myShader1.aInColor = nAttr.createColor('inColor', 'ic')
	nAttr.setStorable(True)
	nAttr.setReadable(True)
	nAttr.setWritable(True)
	nAttr.setDefault(1.0, 1.0, 1.0)
	myShader1.aOutColor = nAttr.createColor('outColor', 'oc')
	nAttr.setStorable(False)
	nAttr.setHidden(False)
	nAttr.setReadable(True)
	nAttr.setWritable(False)
	myShader1.addAttribute(myShader1.aInColor)
	myShader1.addAttribute(myShader1.aNormalCamera)
	myShader1.addAttribute(myShader1.aOutColor)
	myShader1.attributeAffects (myShader1.aInColor, myShader1.aOutColor)
	myShader1.attributeAffects (myShader1.aNormalCamera, myShader1.aOutColor)
	def initializePlugin(mobject):
	mplugin = maya.OpenMayaMPx.MFnPlugin(mobject)
	try:
  mplugin.registerNode( kPluginNodeName, kPluginNodeId, nodeCreator, 
    nodeInitializer, maya.OpenMayaMPx.MPxNode.kDependNode, 'utility/color' )
except:
  sys.stderr.write( 'Failed to register node: %s' % kPluginNodeName )
  raise
	def uninitializePlugin(mobject):
	mplugin = maya.OpenMayaMPx.MFnPlugin(mobject),,
	try:
  mplugin.deregisterNode( kPluginNodeId )
except:
  sys.stderr.write( 'Failed to deregister node: %s' % kPluginNodeName )
  raise
	 
	