Python API 2.0 Reference
python/api2/py2DepthCheckerboardShader.py
1 from __future__ import division
2 #-
3 # ===========================================================================
4 # Copyright 2020 Autodesk, Inc. All rights reserved.
5 #
6 # Use of this software is subject to the terms of the Autodesk license
7 # agreement provided at the time of installation or download, or which
8 # otherwise accompanies this software in either electronic or hard copy form.
9 # ===========================================================================
10 #+
11 
12 import sys
13 import maya.api.OpenMaya as om
14 import maya.api.OpenMayaRender as omr
15 import textwrap
16 
17 # Produces dependency graph node depthCheckerboardShader
18 # This node is an example of a surface shader that colors objects based on the distance from the camera.
19 # This node will also show a checkerboard pattern when the viewport is in "textured" mode.
20 # The inputs for this node are can be found in the Maya UI on the Attribute Editor for the node.
21 # The output attribute of the node is called "outColor". It is a 3 float value that represents the resulting color produced by the node.
22 # To use this shader, create a depthCheckerboardShader with Shading Group or connect its output to a Shading Group's "SurfaceShader" attribute.
23 
24 
25 def maya_useNewAPI():
26  """
27  The presence of this function tells Maya that the plugin produces, and
28  expects to be passed, objects created using the Maya Python API 2.0.
29  """
30  pass
31 
32 ##################################################################
33 ## Plugin Depth Checkerboard Shader Class Declaration
34 ##################################################################
35 class depthCheckerboardShader(om.MPxNode):
36  # Id tag for use with binary file format
37  id = om.MTypeId( 0x81167 )
38 
39  # Input attributes
40  aColorNear = None
41  aColorFar = None
42  aNear = None
43  aFar = None
44  aScale = None
45  aUVCoord = None
46  aPointCamera = None
47 
48  # Output attributes
49  aOutColor = None
50 
51  @staticmethod
52  def creator():
53  return depthCheckerboardShader()
54 
55  @staticmethod
56  def initialize():
57  nAttr = om.MFnNumericAttribute()
58 
59  # Create input attributes
60 
61  depthCheckerboardShader.aColorNear = nAttr.createColor("color", "c")
62  nAttr.keyable = True
63  nAttr.storable = True
64  nAttr.readable = True
65  nAttr.writable = True
66  nAttr.default = (0.0, 1.0, 0.0) # Green
67 
68 
69  depthCheckerboardShader.aColorFar = nAttr.createColor("colorFar", "cf")
70  nAttr.keyable = True
71  nAttr.storable = True
72  nAttr.readable = True
73  nAttr.writable = True
74  nAttr.default = (0.0, 0.0, 1.0) # Blue
75 
76  depthCheckerboardShader.aNear = nAttr.create("near", "n", om.MFnNumericData.kFloat)
77  nAttr.keyable = True
78  nAttr.storable = True
79  nAttr.readable = True
80  nAttr.writable = True
81  nAttr.setMin(0.0)
82  nAttr.setSoftMax(1000.0)
83 
84  depthCheckerboardShader.aFar = nAttr.create("far", "f", om.MFnNumericData.kFloat)
85  nAttr.keyable = True
86  nAttr.storable = True
87  nAttr.readable = True
88  nAttr.writable = True
89  nAttr.setMin(0.0)
90  nAttr.setSoftMax(1000.0)
91  nAttr.default = 2.0
92 
93  depthCheckerboardShader.aScale = nAttr.create("scale", "sc", om.MFnNumericData.kFloat)
94  nAttr.keyable = True
95  nAttr.storable = True
96  nAttr.readable = True
97  nAttr.writable = True
98  nAttr.setMin(0.0)
99  nAttr.setSoftMax(1000.0)
100  nAttr.default = 2.0
101 
102  child1 = nAttr.create( "uCoord", "u", om.MFnNumericData.kFloat)
103  child2 = nAttr.create( "vCoord", "v", om.MFnNumericData.kFloat)
104  depthCheckerboardShader.aUVCoord = nAttr.create( "uvCoord", "uv", child1, child2)
105  nAttr.keyable = True
106  nAttr.storable = True
107  nAttr.readable = True
108  nAttr.writable = True
109  nAttr.hidden = True
110 
111  depthCheckerboardShader.aPointCamera = nAttr.createPoint("pointCamera", "p")
112  nAttr.keyable = True
113  nAttr.storable = True
114  nAttr.readable = True
115  nAttr.writable = True
116  nAttr.hidden = True
117 
118  # Create output attributes
119  depthCheckerboardShader.aOutColor = nAttr.createColor("outColor", "oc")
120  nAttr.keyable = False
121  nAttr.storable = False
122  nAttr.readable = True
123  nAttr.writable = False
124 
125  om.MPxNode.addAttribute(depthCheckerboardShader.aColorNear)
126  om.MPxNode.addAttribute(depthCheckerboardShader.aColorFar)
127  om.MPxNode.addAttribute(depthCheckerboardShader.aNear)
128  om.MPxNode.addAttribute(depthCheckerboardShader.aFar)
129  om.MPxNode.addAttribute(depthCheckerboardShader.aScale)
130  om.MPxNode.addAttribute(depthCheckerboardShader.aUVCoord)
131  om.MPxNode.addAttribute(depthCheckerboardShader.aPointCamera)
132  om.MPxNode.addAttribute(depthCheckerboardShader.aOutColor)
133 
134  om.MPxNode.attributeAffects(depthCheckerboardShader.aColorNear, depthCheckerboardShader.aOutColor)
135  om.MPxNode.attributeAffects(depthCheckerboardShader.aColorFar, depthCheckerboardShader.aOutColor)
136  om.MPxNode.attributeAffects(depthCheckerboardShader.aNear, depthCheckerboardShader.aOutColor)
137  om.MPxNode.attributeAffects(depthCheckerboardShader.aFar, depthCheckerboardShader.aOutColor)
138  om.MPxNode.attributeAffects(depthCheckerboardShader.aScale, depthCheckerboardShader.aOutColor)
139  om.MPxNode.attributeAffects(depthCheckerboardShader.aUVCoord, depthCheckerboardShader.aOutColor)
140  om.MPxNode.attributeAffects(depthCheckerboardShader.aPointCamera, depthCheckerboardShader.aOutColor)
141 
142  def __init__(self):
143  om.MPxNode.__init__(self)
144 
145  def compute(self, plug, block):
146  # outColor or individial R, G, B channel
147  if (plug != depthCheckerboardShader.aOutColor) and (plug.parent() != depthCheckerboardShader.aOutColor):
148  return None # Let the Maya parent class compute the plug
149 
150  # get sample surface shading parameters
151  pCamera = block.inputValue(depthCheckerboardShader.aPointCamera).asFloatVector()
152  cNear = block.inputValue(depthCheckerboardShader.aColorNear).asFloatVector()
153  cFar = block.inputValue(depthCheckerboardShader.aColorFar).asFloatVector()
154  nearClip = block.inputValue(depthCheckerboardShader.aNear).asFloat()
155  farClip = block.inputValue(depthCheckerboardShader.aFar).asFloat()
156  scale = block.inputValue(depthCheckerboardShader.aScale).asFloat()
157  uv = block.inputValue(depthCheckerboardShader.aUVCoord).asFloat2()
158 
159  # pCamera.z is negative
160  ratio = 1.0
161  dist = farClip - nearClip
162  if dist != 0:
163  ratio = (farClip + pCamera.z) / dist
164  resultColor = cNear * ratio + cFar*(1.0 - ratio)
165 
166  # checkerboard effect:
167  fractUVx = (uv[0] * scale) % 1
168  fractUVy = (uv[1] * scale) % 1
169  if (fractUVx > 0.5) == (fractUVy > 0.5):
170  resultColor = om.MFloatVector(0.0,0.0,0.0)
171 
172  # set ouput color attribute
173  outColorHandle = block.outputValue( depthCheckerboardShader.aOutColor )
174  outColorHandle.setMFloatVector( resultColor )
175  outColorHandle.setClean()
176 
177  # The plug has been computed successfully
178  return self
179 
180  def postConstructor(self):
181  pass
182 
183 ##################################################################
184 ## Plugin Depth Checkerboard Shader Override Class Declaration
185 ##################################################################
186 class depthCheckerboardShaderOverride(omr.MPxSurfaceShadingNodeOverride):
187  @staticmethod
188  def creator(obj):
189  return depthCheckerboardShaderOverride(obj)
190 
191  def __init__(self, obj):
192  omr.MPxSurfaceShadingNodeOverride.__init__(self, obj)
193 
194  # Register fragments with the manager if needed
195  fragmentMgr = omr.MRenderer.getFragmentManager()
196  if fragmentMgr != None:
197  if not fragmentMgr.hasFragment("depthCheckerboardShaderPluginFragmentTextured"):
198  fragmentBody = textwrap.dedent("""
199  <fragment uiName=\"depthCheckerboardShaderPluginFragmentTextured\" name=\"depthCheckerboardShaderPluginFragmentTextured\" type=\"plumbing\" class=\"ShadeFragment\" version=\"1.0\">
200  <description><![CDATA[Depth shader fragment]]></description>
201  <properties>
202  <float name=\"depthValue\" />
203  <float3 name=\"color\" />
204  <float3 name=\"colorFar\" />
205  <float name=\"near\" />
206  <float name=\"far\" />
207  <float name=\"scale\" />
208  <float2 name=\"uvCoord\" semantic=\"mayaUvCoordSemantic\" flags=\"varyingInputParam\" />
209  </properties>
210  <values>
211  <float name=\"depthValue\" value=\"0.0\" />
212  <float3 name=\"color\" value=\"0.0,1.0,0.0\" />
213  <float3 name=\"colorFar\" value=\"0.0,0.0,1.0\" />
214  <float name=\"near\" value=\"0.0\" />
215  <float name=\"far\" value=\"2.0\" />
216  <float name=\"scale\" value=\"2.0\" />
217  </values>
218  <outputs>
219  <float3 name=\"outColor\" />
220  </outputs>
221  <implementation>
222  <implementation render=\"OGSRenderer\" language=\"Cg\" lang_version=\"2.1\">
223  <function_name val=\"depthCheckerboardShaderPluginFragmentTextured\" />
224  <source><![CDATA[
225  float3 depthCheckerboardShaderPluginFragmentTextured(float depthValue, float3 cNear, float3 cFar, float nearClip, float farClip, float scale, float2 uvCoord) \n
226  { \n
227  float ratio = (farClip + depthValue)/(farClip - nearClip); \n
228  float2 scaledUV = uvCoord * scale; \n
229  float3 outColor = cNear*ratio + cFar*(1.0f - ratio); \n
230  if ((frac(scaledUV.x) > 0.5) == (frac(scaledUV.y) > 0.5)) { \n
231  outColor = float3(1.0, 0.0, 0.0); \n
232  } \n
233  return outColor; \n
234  } \n]]>
235  </source>
236  </implementation>
237  <implementation render=\"OGSRenderer\" language=\"HLSL\" lang_version=\"11.0\">
238  <function_name val=\"depthCheckerboardShaderPluginFragmentTextured\" />
239  <source><![CDATA[
240  float3 depthCheckerboardShaderPluginFragmentTextured(float depthValue, float3 cNear, float3 cFar, float nearClip, float farClip, float scale, float2 uvCoord) \n
241  { \n
242  float ratio = (farClip + depthValue)/(farClip - nearClip); \n
243  float2 scaledUV = uvCoord * scale; \n
244  float3 outColor = cNear*ratio + cFar*(1.0f - ratio); \n
245  if ((frac(scaledUV.x) > 0.5) == (frac(scaledUV.y) > 0.5)) { \n
246  outColor = float3(1.0, 0.0, 0.0); \n
247  } \n
248  return outColor; \n
249  } \n]]>
250  </source>
251  </implementation>
252  <implementation render=\"OGSRenderer\" language=\"GLSL\" lang_version=\"3.0\">
253  <function_name val=\"depthCheckerboardShaderPluginFragmentTextured\" />
254  <source><![CDATA[
255  vec3 depthCheckerboardShaderPluginFragmentTextured(float depthValue, vec3 cNear, vec3 cFar, float nearClip, float farClip, float scale, vec2 uvCoord) \n
256  { \n
257  float ratio = (farClip + depthValue)/(farClip - nearClip); \n
258  vec2 scaledUV = uvCoord * scale; \n
259  vec3 outColor = cNear*ratio + cFar*(1.0f - ratio); \n
260  if ((fract(scaledUV.x) > 0.5) == (fract(scaledUV.y) > 0.5)) { \n
261  outColor = vec3(1.0, 0.0, 0.0); \n
262  } \n
263  return outColor; \n
264  } \n]]>
265  </source>
266  </implementation>
267  </implementation>
268  </fragment>""")
269 
270  fragmentMgr.addShadeFragmentFromBuffer(fragmentBody.encode('utf-8'), False)
271 
272  if not fragmentMgr.hasFragment("depthCheckerboardShaderPluginFragmentUntextured"):
273  fragmentBody = textwrap.dedent("""
274  <fragment uiName=\"depthCheckerboardShaderPluginFragmentUntextured\" name=\"depthCheckerboardShaderPluginFragmentUntextured\" type=\"plumbing\" class=\"ShadeFragment\" version=\"1.0\">
275  <description><![CDATA[Depth shader fragment]]></description>
276  <properties>
277  <float name=\"depthValue\" />
278  <float3 name=\"color\" />
279  <float3 name=\"colorFar\" />
280  <float name=\"near\" />
281  <float name=\"far\" />
282  </properties>
283  <values>
284  <float name=\"depthValue\" value=\"0.0\" />
285  <float3 name=\"color\" value=\"0.0,1.0,0.0\" />
286  <float3 name=\"colorFar\" value=\"0.0,0.0,1.0\" />
287  <float name=\"near\" value=\"0.0\" />
288  <float name=\"far\" value=\"2.0\" />
289  </values>
290  <outputs>
291  <float3 name=\"outColor\" />
292  </outputs>
293  <implementation>
294  <implementation render=\"OGSRenderer\" language=\"Cg\" lang_version=\"2.1\">
295  <function_name val=\"depthCheckerboardShaderPluginFragmentUntextured\" />
296  <source><![CDATA[
297  float3 depthCheckerboardShaderPluginFragmentUntextured(float depthValue, float3 cNear, float3 cFar, float nearClip, float farClip) \n
298  { \n
299  float ratio = (farClip + depthValue)/(farClip - nearClip); \n
300  return cNear*ratio + cFar*(1.0f - ratio); \n
301  } \n]]>
302  </source>
303  </implementation>
304  <implementation render=\"OGSRenderer\" language=\"HLSL\" lang_version=\"11.0\">
305  <function_name val=\"depthCheckerboardShaderPluginFragmentUntextured\" />
306  <source><![CDATA[
307  float3 depthCheckerboardShaderPluginFragmentUntextured(float depthValue, float3 cNear, float3 cFar, float nearClip, float farClip) \n
308  { \n
309  float ratio = (farClip + depthValue)/(farClip - nearClip); \n
310  return cNear*ratio + cFar*(1.0f - ratio); \n
311  } \n]]>
312  </source>
313  </implementation>
314  <implementation render=\"OGSRenderer\" language=\"GLSL\" lang_version=\"3.0\">
315  <function_name val=\"depthCheckerboardShaderPluginFragmentUntextured\" />
316  <source><![CDATA[
317  vec3 depthCheckerboardShaderPluginFragmentUntextured(float depthValue, vec3 cNear, vec3 cFar, float nearClip, float farClip) \n
318  { \n
319  float ratio = (farClip + depthValue)/(farClip - nearClip); \n
320  return cNear*ratio + cFar*(1.0f - ratio); \n
321  } \n]]>
322  </source>
323  </implementation>
324  </implementation>
325  </fragment>""")
326 
327  fragmentMgr.addShadeFragmentFromBuffer(fragmentBody.encode('utf-8'), False)
328 
329  if not fragmentMgr.hasFragment("depthCheckerboardShaderPluginInterpolantFragment"):
330  vertexFragmentBody = textwrap.dedent("""
331  <fragment uiName=\"depthCheckerboardShaderPluginInterpolantFragment\" name=\"depthCheckerboardShaderPluginInterpolantFragment\" type=\"interpolant\" class=\"ShadeFragment\" version=\"1.0\">
332  <description><![CDATA[Depth shader vertex fragment]]></description>
333  <properties>
334  <float3 name=\"Pm\" semantic=\"Pm\" flags=\"varyingInputParam\" />
335  <float4x4 name=\"worldViewProj\" semantic=\"worldviewprojection\" />
336  </properties>
337  <values>
338  </values>
339  <outputs>
340  <float name=\"outDepthValue\" ^1s/>
341  </outputs>
342  <implementation>
343  <implementation render=\"OGSRenderer\" language=\"Cg\" lang_version=\"2.1\">
344  <function_name val=\"depthCheckerboardShaderPluginInterpolantFragment\" />
345  <source><![CDATA[
346  float depthCheckerboardShaderPluginInterpolantFragment(float depthValue) \n
347  { \n
348  return depthValue; \n
349  } \n]]>
350  </source>
351  <vertex_source><![CDATA[
352  float idepthCheckerboardShaderPluginInterpolantFragment(float3 Pm, float4x4 worldViewProj) \n
353  { \n
354  float4 pCamera = mul(worldViewProj, float4(Pm, 1.0f)); \n
355  return (pCamera.z - pCamera.w*2.0f); \n
356  } \n]]>
357  </vertex_source>
358  </implementation>
359  <implementation render=\"OGSRenderer\" language=\"HLSL\" lang_version=\"11.0\">
360  <function_name val=\"depthCheckerboardShaderPluginInterpolantFragment\" />
361  <source><![CDATA[
362  float depthCheckerboardShaderPluginInterpolantFragment(float depthValue) \n
363  { \n
364  return depthValue; \n
365  } \n]]>
366  </source>
367  <vertex_source><![CDATA[
368  float idepthCheckerboardShaderPluginInterpolantFragment(float3 Pm, float4x4 worldViewProj) \n
369  { \n
370  float4 pCamera = mul(float4(Pm, 1.0f), worldViewProj); \n
371  return (pCamera.z - pCamera.w*2.0f); \n
372  } \n]]>
373  </vertex_source>
374  </implementation>
375  <implementation render=\"OGSRenderer\" language=\"GLSL\" lang_version=\"3.0\">
376  <function_name val=\"depthCheckerboardShaderPluginInterpolantFragment\" />
377  <source><![CDATA[
378  float depthCheckerboardShaderPluginInterpolantFragment(float depthValue) \n
379  { \n
380  return depthValue; \n
381  } \n]]>
382  </source>
383  <vertex_source><![CDATA[
384  float idepthCheckerboardShaderPluginInterpolantFragment(vec3 Pm, mat4 worldViewProj) \n
385  { \n
386  vec4 pCamera = worldViewProj * vec4(Pm, 1.0f); \n
387  return (pCamera.z - pCamera.w*2.0f); \n
388  } \n]]>
389  </vertex_source>
390  </implementation>
391  </implementation>
392  </fragment>""")
393 
394  # In DirectX, need to specify a semantic for the output of the vertex shader
395  if omr.MRenderer.drawAPI() == omr.MRenderer.kDirectX11:
396  vertexFragmentBody = vertexFragmentBody.replace("^1s", "semantic=\"extraDepth\" ")
397  else:
398  vertexFragmentBody = vertexFragmentBody.replace("^1s", " ")
399 
400  fragmentMgr.addShadeFragmentFromBuffer(vertexFragmentBody.encode('utf-8'), False)
401 
402  if not fragmentMgr.hasFragment("depthCheckerboardShaderPluginGraphTextured"):
403  fragmentGraphBody = textwrap.dedent("""
404  <fragment_graph name=\"depthCheckerboardShaderPluginGraphTextured\" ref=\"depthCheckerboardShaderPluginGraphTextured\" class=\"FragmentGraph\" version=\"1.0\">
405  <fragments>
406  <fragment_ref name=\"depthCheckerboardShaderPluginFragmentTextured\" ref=\"depthCheckerboardShaderPluginFragmentTextured\" />
407  <fragment_ref name=\"depthCheckerboardShaderPluginInterpolantFragment\" ref=\"depthCheckerboardShaderPluginInterpolantFragment\" />
408  </fragments>
409  <connections>
410  <connect from=\"depthCheckerboardShaderPluginInterpolantFragment.outDepthValue\" to=\"depthCheckerboardShaderPluginFragmentTextured.depthValue\" />
411  </connections>
412  <properties>
413  <float3 name=\"Pm\" ref=\"depthCheckerboardShaderPluginInterpolantFragment.Pm\" semantic=\"Pm\" flags=\"varyingInputParam\" />
414  <float4x4 name=\"worldViewProj\" ref=\"depthCheckerboardShaderPluginInterpolantFragment.worldViewProj\" semantic=\"worldviewprojection\" />
415  <float3 name=\"color\" ref=\"depthCheckerboardShaderPluginFragmentTextured.color\" />
416  <float3 name=\"colorFar\" ref=\"depthCheckerboardShaderPluginFragmentTextured.colorFar\" />
417  <float name=\"near\" ref=\"depthCheckerboardShaderPluginFragmentTextured.near\" />
418  <float name=\"far\" ref=\"depthCheckerboardShaderPluginFragmentTextured.far\" />
419  <float name=\"scale\" ref=\"depthCheckerboardShaderPluginFragmentTextured.scale\" />
420  <float2 name=\"uvCoord\" ref=\"depthCheckerboardShaderPluginFragmentTextured.uvCoord\" semantic=\"mayaUvCoordSemantic\" flags=\"varyingInputParam\" />
421  </properties>
422  <values>
423  <float3 name=\"color\" value=\"0.0,1.0,0.0\" />
424  <float3 name=\"colorFar\" value=\"0.0,0.0,1.0\" />
425  <float name=\"near\" value=\"0.0\" />
426  <float name=\"far\" value=\"2.0\" />
427  <float name=\"scale\" value=\"2.0\" />
428  </values>
429  <outputs>
430  <float3 name=\"outColor\" ref=\"depthCheckerboardShaderPluginFragmentTextured.outColor\" />
431  </outputs>
432  </fragment_graph>""")
433 
434  fragmentMgr.addFragmentGraphFromBuffer(fragmentGraphBody.encode('utf-8'))
435 
436  if not fragmentMgr.hasFragment("depthCheckerboardShaderPluginGraphUntextured"):
437  fragmentGraphBody = textwrap.dedent("""
438  <fragment_graph name=\"depthCheckerboardShaderPluginGraphUntextured\" ref=\"depthCheckerboardShaderPluginGraphUntextured\" class=\"FragmentGraph\" version=\"1.0\">
439  <fragments>
440  <fragment_ref name=\"depthCheckerboardShaderPluginFragmentUntextured\" ref=\"depthCheckerboardShaderPluginFragmentUntextured\" />
441  <fragment_ref name=\"depthCheckerboardShaderPluginInterpolantFragment\" ref=\"depthCheckerboardShaderPluginInterpolantFragment\" />
442  </fragments>
443  <connections>
444  <connect from=\"depthCheckerboardShaderPluginInterpolantFragment.outDepthValue\" to=\"depthCheckerboardShaderPluginFragmentUntextured.depthValue\" />
445  </connections>
446  <properties>
447  <float3 name=\"Pm\" ref=\"depthCheckerboardShaderPluginInterpolantFragment.Pm\" semantic=\"Pm\" flags=\"varyingInputParam\" />
448  <float4x4 name=\"worldViewProj\" ref=\"depthCheckerboardShaderPluginInterpolantFragment.worldViewProj\" semantic=\"worldviewprojection\" />
449  <float3 name=\"color\" ref=\"depthCheckerboardShaderPluginFragmentUntextured.color\" />
450  <float3 name=\"colorFar\" ref=\"depthCheckerboardShaderPluginFragmentUntextured.colorFar\" />
451  <float name=\"near\" ref=\"depthCheckerboardShaderPluginFragmentUntextured.near\" />
452  <float name=\"far\" ref=\"depthCheckerboardShaderPluginFragmentUntextured.far\" />
453  </properties>
454  <values>
455  <float3 name=\"color\" value=\"0.0,1.0,0.0\" />
456  <float3 name=\"colorFar\" value=\"0.0,0.0,1.0\" />
457  <float name=\"near\" value=\"0.0\" />
458  <float name=\"far\" value=\"2.0\" />
459  </values>
460  <outputs>
461  <float3 name=\"outColor\" ref=\"depthCheckerboardShaderPluginFragmentUntextured.outColor\" />
462  </outputs>
463  </fragment_graph>""")
464 
465  fragmentMgr.addFragmentGraphFromBuffer(fragmentGraphBody.encode('utf-8'))
466 
467  @staticmethod
468  def supportedDrawAPIs():
469  return omr.MRenderer.kOpenGL | omr.MRenderer.kOpenGLCoreProfile | omr.MRenderer.kDirectX11
470 
471  @staticmethod
472  def fragmentName(isTexturedShading):
473  if isTexturedShading:
474  return "depthCheckerboardShaderPluginGraphTextured"
475  return "depthCheckerboardShaderPluginGraphUntextured"
476 
477 ##
478 ## Plugin setup
479 #######################################################
480 sRegistrantId = "depthCheckerboardShaderPlugin_py"
481 
482 def initializePlugin(obj):
483  plugin = om.MFnPlugin(obj, "Autodesk", "4.5", "Any")
484  try:
485  userClassify = "shader/surface:drawdb/shader/surface/depthCheckerboardShader_py"
486  plugin.registerNode("depthCheckerboardShader_py", depthCheckerboardShader.id, depthCheckerboardShader.creator, depthCheckerboardShader.initialize, om.MPxNode.kDependNode, userClassify)
487  except:
488  sys.stderr.write("Failed to register node\n")
489  raise
490 
491  try:
492  global sRegistrantId
493  omr.MDrawRegistry.registerSurfaceShadingNodeOverrideCreator("drawdb/shader/surface/depthCheckerboardShader_py", sRegistrantId, depthCheckerboardShaderOverride.creator)
494  except:
495  sys.stderr.write("Failed to register override\n")
496  raise
497 
498 def uninitializePlugin(obj):
499  plugin = om.MFnPlugin(obj)
500  try:
501  plugin.deregisterNode(depthCheckerboardShader.id)
502  except:
503  sys.stderr.write("Failed to deregister node\n")
504  raise
505 
506  try:
507  global sRegistrantId
508  omr.MDrawRegistry.deregisterSurfaceShadingNodeOverrideCreator("drawdb/shader/surface/depthCheckerboardShader_py", sRegistrantId)
509  except:
510  sys.stderr.write("Failed to deregister override\n")
511  raise
512