venerdì 31 ottobre 2014

Happy Halloween :)

acid rain fx is obtained using particles as input geometry into SOUP's attributeTransfer bounding object.

here are the connections for attributeTransfer chain:

. (pumpkin).worldMesh[0]-> attributeTransfer.inGeometry
. attributeTransfer.outWeightPP -> point.inWeightPP
. attributeTransfer.outGeometry -> point.inGeometry
. point.outWeightPP -> arrayMapper.vCoordPP
. arrayMapper.outValuePP  nComponents.glueStrengthPerVertex
. arrayMapper.outValuePP  nComponents.strengthPerVertex
. arrayMapper.outValuePP  nComponents.weightPerVertex

here are the connections for bounding object:

. particleShape.worldPosition -> boundingObjectShape.inParticlePositionPP

nodes set-up:

attributeTransfer - weight
point - weight
nComponents - strength, glue, weight -per vertex
bounding obj -  shape - input geometry
bounding obj - weight falloff - 1 (constant)
bounding obj - initialize point attribute radius - (the one you like)


martedì 28 ottobre 2014

dynamic skins in MAYA

dynamic skin in MAYA

SOUP dynamic skin destruction in MAYA from Federico Cascinelli on Vimeo.

Dynamic skins has been a personal challenge for a long time and this tutorial represent the final result of my studies based on both on Maya and Houdini experience.
I found a couple of different ways to simulate dynamic skins and what I present here is the one I think it's easier to apply in any circumstance.

The accidental meet with Peter Shipkov's SOUP plug-in for Maya (thanks to an ex-collegue Maurizio Giglioli) changed my way to approach Maya in general giving a more Houdini like workflow in a familiar environment, at least to me. The research did in Houdini also allowed me to have a different point of view of all the nodes connections.

Trying to cut as much as possible of what it should be a very long tutorial, if started from scratch, it came out as an advanced technical lecture so that you should already have a good knowledge of Maya, hypershde and/or node editor, connection editor and, of course, SOUP.

Here enclose at the bottom you find a Maya scene file with a very simple example so that you might be able to better understand the nodes connections. in any case feel free to contact me if something doesn't have sense or does not work.

used nodes:

. SOUP attributeTransfer
. SOUP point
. Maya arrayMapper
. Maya nComponents (look for it in the cloth network)

how I did it:

1. create a polygonal cylinder
2. make a copy and break it (both using Maya procedure SplitVertex or Soup's shatter or any other way you like)
3. make the broken cylinder a cloth object
4. constraint the original cylinder and the cloth one with nConstraint component to component.
5. skin the original cylinder.

in the hypershade or the node editor:

6. load the cloth network and add the extra nodes
7. set up the SOUP nodes to pass weights
8. attach a B&W 2d ramp to the arrayMapper
9. Connect the SOUP point passing the outWeightPP to vCoordPP of the arrayMapper
10. connect the arrayMapper to the nComponents (note that the nConstraint has created two nComponents... you have to use the cloth one) passing the outValuePP to nComponent glueStrengthPerVertex - weightPerVertex - strengthPerVertex (3 connections)
11. create a bounding object for the SOUP attributeTransfer node

in the attribute editor:

11. set up the nComponent node by setting the glue strength, weight and strength  to "per vertex"
12. set the bounding object weight value to constant 1
13. set the dynamicConstraint glue value less then one (0.99 would be fine)

all should be fine by now!

few notes… 
. be sure to set up all the nodes correctly!!!
. try to leave the glue value to 1… fun effect!!!
. combinations are almost infinite… try using more then one bounding object… or play with glue, force and strength values… have fun!!!
. connecting the dynamic skin chain to the cloth object after the nClothShape you will use the actual skin as object to apply the effect to… if you link the cloth before it you will use the original object as reference… this is a very important step to understand and linking one or the other is the same just depend on the kind of effect you want to achieve
. I'm working on an old mac air 11… so all the self collisions and other setting that require good memory are disabled 
. you can change the cloth geo by simply connecting the new geo to the cloth shape node and the attribute transfer node.

. not sure is a bug… but to me, every time I reopen the file I have to reset the bounding object weight!! You should do it also on the file attached.

that's all folks!!!

I hope this might be useful and understandable... feel free to contact me...


giovedì 16 ottobre 2014

MDA procedural modelling

Basic workflow with SOUP plug-in in Maya… Procedural Modelling

  1. create a polygonal cylinder and make it thin using the creation node 
Use the creation node and not the trans/rot/scale manipulator or remember in this case to connect the worldmesh instead of the outMesh later in the connection between nodes… outMesh consider the bounding box object coordinates.

2. create a cube and place the pivot at the bottom so to scale it only in the positive direction. model it in the shape of a column.
I moved the vertices up instead of moving the pivot otherwise the scaling would take place from the original pivot in the instances. Doing that you have to be careful of any other edit you'll do on the geo.

3. create an instancer node and place the column inside.

4. open the hypershade and place the nodes we will use in the correct order:
. the cylinder
. a soup group
. a Maya deleteComponent node 
. a soup point
. a soup arrayToDynamicArray
. the Maya instacer

5. make the connections:
. first pass geometry from the cylinder to group
. then pass geometry and components to the delete node
. pass geo and deleteComponents to point
. take the outPositionPP position of points and pass it to the array
. and last connect the outArray to inputPoints.

6. setup the nodes to make the connection work:
. first select the point node and be sure the "use components menu" is set to "input component list"
. then go to position and "enable" it
. into the dynamic array node type "position"

this will make the connections work properly… 

the problem now is that without anymore instructions an instance is placed on every point of the geometry... that's why we need the deleteComponent node.

7. to make it work:
. go to group into component type menu select edges
. the input components menu set to none
. scroll down and create a bounding object
. make it as a cube and size it to fit the cylinder
. place it so that it covers just the bottom f the cylinder.

8. scale the instance node a bit just to make it nicer with the columns inside the cylinder shape.

and here it is… it works

9. we have an expression that drives few channels:
. first the high of the column drives the pipe position y
. the segments of the cylinder drives segments of the pipe and the cone
. cylinder radius drives the cone and pipe radius
. at last a couple of lines to keep proportions of the pipes thickness and column thickness when change the radius.

10. create the asset:
. select the objects you want the channels to be published on the asset
. and press the asset create button in the hypershade
. in the channel box highlight the channels you like and go on edit publish to the asset.

for more infos about Soup plug-in,  Maya Digital Asset and ref materials:
SOuP is a plugin for Maya, originally developed by Peter Shipkov. 

Maya Asset