Maya Python scripting – Iterate through the timeline frames

Software:
Maya 2018

The following Python script iterates though Maya’s timeline frames, and for each frame creates a new cube, and aligns it’s position to the selected animated locator.

* There is probably a nicer way to set one object’s position according to anothers but haven’t found it yet (not finding enough examples of the cmds.xform command…) so sorry for that..

import maya.cmds as cmds

selection = cmds.ls(sl=1,sn=True)
for frame in range(1,80):
    cmds.currentTime(frame)
    newCube = cmds.ls (cmds.polyCube( sx=1, sy=1, sz=1), long=True)
    posX = cmds.getAttr(selection[0]+'.translateX')
    posY = cmds.getAttr(selection[0]+'.translateY')
    posZ = cmds.getAttr(selection[0]+'.translateZ')
    cmds.setAttr(newCube[0]+'.translateX',posX)
    cmds.setAttr(newCube[0]+'.translateY',posY)
    cmds.setAttr(newCube[0]+'.translateZ',posZ)

maya_python_frames

Maya Python scripting – Getting an object’s transform matrix relative to another object’s coordinates

Software:
Maya 2018

How to get an object transformation matrix relative to another object’s coordinates:
* The following script requires selecting 2 objects, the function will return the transform matrix of the first object relative to the transform matrix of the second.

from maya.api.OpenMaya import MVector, MMatrix, MPoint
import maya.cmds as cmds

def get_relative_transform (node,coordinate_space_node):
    node_matrix = MMatrix(cmds.xform(node, q=True, matrix=True, ws=True))
    parent_matrix = MMatrix(cmds.xform(coordinate_space_node, q=True, matrix=True, ws=True))
    return (node_matrix * parent_matrix.inverse())

node_a = (cmds.ls(sl=1,sn=True))[0]
node_b = (cmds.ls(sl=1,sn=True))[1]

print (get_relative_transform(node_a,node_b))

Untitled-1

V-Ray for Maya toon shading

Software:
Maya 2018 | V-Ray 3.6

Toon shading in V-Ray consists of two elements:

  1. A VRayToon node that creates a graphic contour effect on the rendered image.
  2. A flat shader that uses surface luminance data to define color areas.
    * A VRayLightMtl can be used for that.

Creating the VRayToon node:

  1. Click the Create V-Ray Toon button in the V-Ray toolbar to create a VRayToon node.
  2. In the VRayToon node attributes, set line thickness, color, and more graphic properties.
    * if you created a VRayToon node and it’s not selected RMB click the Create V-Ray Toon button in the V-Ray toolbar and choose Select VRayToon node.
    * To delete the VRayToon node, select it and press Delete.

Creating the toon shader:

  1. Create a VRayLightMTL node as the object’s surface shader.
  2. Create a Ramp texture node, connect it’s output color to the VRayLightMTL’s color input and delete it’s accompanying 2D placement node.
  3. Create a surfaceLuminance node and connect it’s output to the Ramp node’s V Coord input.
  4. Optional remapValue node between the surfaceLuminance node and the Ramp node to clamp the luminance values.
  5. Optional floatMath node to scale or manipulate the surfaceLuminance output value.

Untitled-1Untitled-2

Related:
Arnold for Maya Toon Shading

V-Ray for Maya with XGen

Software:
Maya 2018 | V-Ray 3.6

The technical steps needed to render XGen hair with V-Ray and a VRayHair3Mtl in Maya:

  1. in the Plugin Manager,
    Make sure the xgenvray.py plugin is loaded.
    * Needless to say vrayformaya.mll must be loaded too.
  2. Set a Project Folder and save the scene.
  3. In Render Settings, set the Renderer to V-Ray.
  4. Select an object or mesh elements and create an XGen Description.
    * This can be done by clicking the Create New Description button in the XGen tab or XGen Window.
  5. In the XGen Output Settings set the Operation to Render and the Renderer to V-Ray.
  6. Edit / Design / Groom your hair.
  7. In the XGen window, Choose File > Export Collections or Descriptions,
    And export the hair Collection and Description.
  8. in the XGen window, Choose File > Export Patches for Batch Render,
    To export the hair cache abc (alembic) file.
  9. In the Hypershade, create a VRayHair3Mtl shader.
  10. In the Outliner, select the XGen Description.
  11. In the Hypershade Browser window,
    RMB click the VRayHair3Mtl and choose Assign Material To Selection.
  12. Make sure there is a light source, and render the scene.

 

Related:
V-Ray for Maya and nHair

Untitled-1

Untitled-1.01

Untitled-1.1.1.jpg

Untitled-2

Untitled-3

Untitled-3.1.jpg

Untitled-4

Arnold for Maya refractive caustics

Software:
Maya 2018 | Arnold 5

An account of the drastic measures that need to be taken in order to ‘persuade’ Arnold for Maya to render refractive caustics.

  1. In the refractive object’s shape attributes,
    Under ‘Arnold’, ‘Opaque’ must remain checked.
    * This is unintuitive but when refractive caustics are calculated there is no need for transparent shadows. the caustics pattern is in fact the light refracting through the object.
  2. The refractive object’s aiStandardSurface shader must have it’s Transmission layer active.
    For a colored refractive object, Transmission Weight should be 1.0,
    A color should be selected, and the density of the color should be controlled with the Depth attribute (higher values make the color less dens).
    In the shader’s advance attributes, check ‘Caustics’.
    In the shader’s Specular layer, set the IOR to match your material.
    * The default of 1.52 is the IOR for glass, and water would be IOR 1.33 for example.
  3. For refractive caustics to be rendered, the light source must be an Arnold Mesh Light,
    And in its shape attributes, under Light Attributes ‘Light Visible’ must be checked.
  4. In many cases, in order for the caustics pattern’s intensity to be correct,
    The ‘Indirect Clamp Value’ must be raised in Render Settings > Arnold Renderer, under Clamping.
  5. In some cases the Transmission value under Ray Depth in Render Settings > Arnold Renderer must be increased for the caustics to render properly.
    * Light simulation must be able refract through all the relevant surfaces.
  6. To increase the caustics render quality, the number of Diffuse samples must be raised in Render Settings > Arnold Renderer.
    * This may be unintuitive, but the caustics pattern is actually part of the Diffuse rendering of the surface upon which the caustics are appearing.

That’s it!
Hope you find this useful 🙂

Arnold_Coustics_AArnold_Coustics_BArnold_Coustics_C

 

 

Maya Python scripting – Getting an Object’s world-space transform matrix

Software:
Maya 2018

How to get an object transformation matrix in world space coordinates:

from maya.api.OpenMaya import MVector, MMatrix, MPoint
import maya.cmds as cmds

def get_world_transform (obj):
 return MMatrix ( cmds.xform( obj, q=True, matrix=True, ws=True ) )

selected_object = (cmds.ls(sl=1,sn=True))[0]

print ( get_world_transform( selected_object ) )

Capture

Basic animation constraints in Maya

Software:
Maya 2018

To setup basic animation constraints in Maya:

  1. Select one or more target objects, and lastly the object to be constrained.
  2. In the Rigging Tab/Toolbar click the wanted constraint.
  3. Optional:
    In the channel box, highlight the constraint and set target objects weights.

Setting up a Point Constraint:

Maya_Point_Constraint

Setting up an Orientation Constraint:

Maya_Orientation_Constraint.gif

Setting up an Aim Constraint:

Maya_Aim_Constraint.gif