I found it was useful to analyse how skinClusters (skin deformation) and blendShapes (morphed geometries) affected on the result surface. I made a short video to demonstrate this.
To utilize the tensionMap node easily I wrote a simple python script. We have to select the deformed mesh first and the original mesh after. It might be tricky to find those nodes in the node graph as you see below.
So here is the script:
def AddTensionMaterial(Selection):
"""
== DESCRIPTION ==
It creates a lambert material diffuse color input from the vertex color map.
The color map is from SOuP tensionMap with applies an RGB color code to represent tension on the surface of the geometry.
Basic color code:
Green - relaxed
Blue - stretch
Red - compression
There is no error handling currently. SOuP plugin has to be loaded.
=== Limitations ===
It considers only the current modifiers.
=== Side Effects ===
Assign verex color set
== INPUT ARGUMENTS ==
+ List - Selection - Mesh nodes has to be selected in order -> select the deformed mesh first and the original one after
+
== RETURN ==
None
== TOOLTIP ==
Select the stretched or compressed shape node and the original (non-stretched or compressed)
shape then run the code like this:
AddTensionMaterial(cmds.ls(sl = 1))
"""
shapeResult = Selection[0]
shapeOriginal = Selection[1]
tensMap = cmds.shadingNode("tensionMap", asUtility = 1, n = "tensionColorMap")
lastDefomerOutput = cmds.listConnections(shapeResult + ".inMesh", source = 1, destination = 0, plugs = 1 )[0]
cmds.polyColorPerVertex(shapeResult, relative = 1, r = 0.5, g = 0.5, b = 0.5, a = 1, colorDisplayOption = 1)
cmds.connectAttr(lastDefomerOutput , tensMap + ".inGeometry")
cmds.connectAttr(shapeOriginal + ".worldMesh[0]", tensMap + ".restGeometry")
cmds.connectAttr(tensMap + ".outGeometry", shapeResult + ".inMesh", f = 1)
mrVertC = cmds.shadingNode("mentalrayVertexColors", asTexture = 1, n = "mrVertCol")
cmds.connectAttr(shapeResult + ".colorSet[0].colorName", mrVertC + ".cpvSets[0]", force = 1)
tensionShader = cmds.shadingNode("lambert", asShader = 1, n = "tensionMat")
cmds.connectAttr(mrVertC + ".outColor", tensionShader + ".color")
I hope it works fine for you.
Hello. I have been trying to run the script, but with no result. Nothing happens. My soup is working correctly.
ReplyDeleteThanks for your time.
It works fine for me. I extended the code with the TOOLTIP part. It was not clear enoght I admit. So after the proper selection you can run the code like this:
ReplyDeleteAddTensionMaterial(cmds.ls(sl = 1))
Thanks man. Now is working.
Delete