Skip to content

Instantly share code, notes, and snippets.

@lapaev
Created January 9, 2016 22:01
Show Gist options
  • Select an option

  • Save lapaev/a95c1951683c48a978fe to your computer and use it in GitHub Desktop.

Select an option

Save lapaev/a95c1951683c48a978fe to your computer and use it in GitHub Desktop.
Scatter to Instanse usig soup
# ScatterToInstance_v1
# Select mesh, then scatter object
from pymel.core import *
import maya.cmds as cmds
import random as r
sl = selected()
scatterObjs = sl[:-1]
scatterBase = sl[-1]
print scatterObjs
select(cl=1)
# Scatter Node
scatCheck = ls(scatterBase+"_scatter")
if not scatCheck:
scat = soup().create('scatter')
rename(scat[0], scatterBase+"_scatter")
scat = ls(scatterBase+"_scatter")
scatterBase.getShape().worldMesh[0] >> scat[0].inGeometry
scatterBase.worldMatrix[0] >> scat[0].inWorldMatrix
setAttr(scat[0].scatterMode,1)
# Curve node thing
pointCloudToCurveThingCheck = ls(scatterBase+"_pointCloudToCurve")
if not pointCloudToCurveThingCheck:
pointCloudToCurveThing = createNode("pointCloudToCurve")
rename(pointCloudToCurveThing, scatterBase+"_pointCloudToCurve")
scat[0].outPositionPP >> pointCloudToCurveThing.inArray
# Point Node
pointNode = ls(scatterBase+"_pointNode")
if not pointNode:
pointNode = createNode("point")
rename(pointNode, scatterBase+"_pointNode")
pointNode = ls(scatterBase+"_pointNode")
pointCloudToCurveThing.outCurve >> pointNode[0].inGeometry
# DisplayComponent Node
displayNode = ls(scatterBase+"_displayComponents")
if not displayNode:
displayNode = createNode("displayComponents")
rename(displayNode, scatterBase+"_displayComponents")
displayNode = ls(scatterBase+"_displayComponents")
pointNode[0].outGeometry >> displayNode[0].inGeometry
pointNode[0].outRadiusPP >> displayNode[0].inDataPP
# pointsOnMeshInfo Node s
pointsOnMeshInfoNode1 = ls(scatterBase+"_pointsOnMeshInfo1")
if not pointsOnMeshInfoNode1:
#node 2
pointsOnMeshInfoNode1 = createNode("pointsOnMeshInfo")
rename(pointsOnMeshInfoNode1, scatterBase+"_rbg_pointsOnMeshInfo1")
pointsOnMeshInfoNode1 = ls(scatterBase+"_rbg_pointsOnMeshInfo1")
scatterBase.worldMesh[0] >> pointsOnMeshInfoNode1[0].inMesh
scat[0].outPositionPP >> pointsOnMeshInfoNode1[0].inPositionPP
pointsOnMeshInfoNode1[0].outRgbaPP >> pointNode[0].inRgbaPP
setAttr(pointsOnMeshInfoNode1[0].colors, 1)
# position_arrayToDynArrays Node
posArray = ls(scatterBase+"_position_arrayToDynArrays")
if not posArray:
posArray = createNode("arrayToDynArrays")
rename(posArray, scatterBase+"_position_arrayToDynArrays")
posArray = ls(scatterBase+"_position_arrayToDynArrays")
pointNode[0].outPositionPP >> posArray[0].inArray
setAttr(scatterBase+"_position_arrayToDynArrays"+".name","position",type="string")
setAttr(pointNode[0].enablePosition,1)
# Instancer Node
instancerNode = ls(scatterBase+"_instancerNode")
if not instancerNode:
instancerNode = createNode("instancer")
rename(instancerNode, scatterBase+"_instancerNode")
instancerNode = ls(scatterBase+"_instancerNode")
#cmds.instancer(instancerNode[0], e=1, a=1, obj = slList)
posArray[0].outDynamicArrays >> instancerNode[0].inputPoints
i = 0
for s in scatterObjs:
print s
s.matrix >> instancerNode[0].inputHierarchy[i]
i += 1
# Index_arrayToDynArrays Node
objIndexArray = ls(scatterBase+"_objIndex_arrayToDynArrays")
if not objIndexArray:
objIndexArray = createNode("arrayToDynArrays")
rename(objIndexArray, scatterBase+"_objIndex_arrayToDynArrays")
objIndexArray = ls(scatterBase+"_objIndex_arrayToDynArrays")
pointNode[0].outWeightPP >> objIndexArray[0].inArray
setAttr(scatterBase+"_objIndex_arrayToDynArrays"+".name","objectIndex",type="string")
setAttr(pointNode[0].enableWeight,1)
objIndexArray[0].outDynamicArrays >> posArray[0].inDynamicArrays
scaterLength = str(len(scatterObjs))
setAttr(pointNode[0]+".stringWeight","// POINT WEIGHT "+"\n"+"$x ="+ scaterLength +";" +"\n"+"$W=rand(0,$x);",type="string")
# rotate_arrayToDynArrays Node
rotateArray = ls(scatterBase+"_rotate_arrayToDynArrays")
if not rotateArray:
rotateArray = createNode("arrayToDynArrays")
rename(rotateArray, scatterBase+"_rotate_arrayToDynArrays")
rotateArray = ls(scatterBase+"_rotate_arrayToDynArrays")
pointNode[0].outNormalPP >> rotateArray[0].inArray
rotateArray[0].outDynamicArrays >> objIndexArray[0].inDynamicArrays
setAttr(scatterBase+"_rotate_arrayToDynArrays"+".name","rotation",type="string")
setAttr(pointNode[0].enableNormal,1)
setAttr(pointNode[0]+".stringNormal","// POINT NORMAL (PARTICLE VELOCITY)"+"\n"+"$X=$NX;"+"\n"+"$Y=$NY+rand(360);"+"\n"+"$Z=$NZ;",type="string")
# scale_arrayToDynArrays Node
scaleArray = ls(scatterBase+"_scale_arrayToDynArrays")
if not scaleArray:
scaleArray = createNode("arrayToDynArrays")
rename(scaleArray, scatterBase+"_scale_arrayToDynArrays")
scaleArray = ls(scatterBase+"_scale_arrayToDynArrays")
pointNode[0].outRadiusPP >> scaleArray[0].inArray
scaleArray[0].outDynamicArrays >> rotateArray[0].inDynamicArrays
setAttr(scatterBase+"_scale_arrayToDynArrays"+".name","scale",type="string")
setAttr(pointNode[0].enableRadius,1)
setAttr(pointNode[0]+".stringRadius","// POINT RADIUS "+"\n"+"$R= $CR;"+"\n"+"if ($CR <= .2)"+"\n"+"$R = 0;"+"\n"+"if ($CR >= 1)"+"\n"+"$R = rand(.2,1.2);",type="string")
select(scat)
polyColorPerVertex(scatterBase, r=1,g=1,b=1,a=1,cdo=1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment