lunedì 9 gennaio 2017

Unreal Engine 4.14 w.i.p. - flying vehicle

 "Flying Vehicle" is a personal project done in my spare time while studying game engines and VR.
All "BluePrints" are built from scratch without using presets for the sake of learning.



building blueprints

 Underneath the vehicle "static mesh" has been created four points, the "hovering points" that check for the distance of the vehicle from the ground.

 These points are built in a "scene components" blueprint and then added to the "pawn" blueprint.
The 4 images below are actually one single blueprint, the "scene components" one, and they represent the algorithm that checks for the ground distance/hit.
Two float variables are added: "trace length" and "anti-G" (pretty simple explanatory)
The IF condition (UE branch node) checks for the distance from the ground. If it's higher of the value set in the condition (in this case 46) means the "pawn" is flying and assign different physics behaviours. 


 In the "pawn" blueprint the "hovering points" are initialised as follow.


WASD/IJKL basic moments

 All movements are under the condition of the "antiG switch", only when is active player would able to move up and down as well as shifting left to right without turning. The switch is also used for landing and take off.




sabato 26 marzo 2016

technical director reel 2016

fedrico Cascinelli - TD reel 2016 from Federico Cascinelli on Vimeo.

Reel total time - 04:02

@ 00:05 Iron Man 2 - rigging & animation
@ 00:09 Iron Man 3 - animation, rigging & rotomation
@ 00:29 The Finest Hours - rigging, shaping and animating waves + crowd tool & ragdoll dev + mocap TD
@ 00:36 King Arthur - ice breaking animation & camera + crowd agents setup

nCloth skins RnD
@ 00:59 rbd skin destruction, peeling 
@ 01:36 touch & pinch 

Maya generalist TD 
@ 02:17 AI agent RnD
@ 02:38 Maya procedural modelling
@03:03 ice breaking MEL tool dev

My filmography also include (not in this reel):
The Great Wall - animator - ILM
The Lake - Maya, Houdini fx td - RISE FX
Pirates - previz artist (first act sequence) - Aardman
The Day the Earth Stood Still - previz artist (spaceship landing sequence + final sequence) - Image Engine

thanks for watching and please follow the links below for more works reel and personal infos:


sabato 25 luglio 2015

venerdì 26 giugno 2015

MEL scripting - array decreasing procedure with random selection

I'm sharing a small algorithm I developed for the last production I've been working on. I needed to randomly select characters in a scene and assign a value, but I wanted to avoid to occasionally select twice the same character.

This procedure randomly select an element in an array and delete it so that the array size decrease until all elements are gone and the array is empty.


proc randDecreasArray(){
    string $arr[] = {"a","b","c","d","e","f","g"};
    string $nwArr[] = $arr;

    int $sz = size($arr);
    int $rm = $sz;

    $prntArr = stringArrayToString($arr, ".");
    print ($prntArr + "\n");

    for ($i in $arr){

        int $rnd = rand(0, $rm);
        $nwArr = stringArrayRemove ({$nwArr[$rnd]},$nwArr);
        $rm --;
        $prnt = stringArrayToString($nwArr, ".");
        print ($prnt + "\n");






domenica 15 febbraio 2015

2014 film reel


Reel total time - 02:05

@ 00:05 Charlie and Chocolate Factory - keyframe animation
@ 00:14 Iron Man 2 - rigging & animation
@ 00:24 X Men iii - animation & rotomation
@ 00:50 King Arthur - ice breaking animation & camera + crowd agents setup
@ 01:15 10.000 BC - keyframe cycles animation & shot creation
@ 01:33 Iron Man 3 - animation, rigging & rotomation
@ 01:53 Harry Potter 4 - keyframe animation

My filmography also include (not in this reel):
Aardman's Pirates - previz artist (first act sequence)
The Day the Earth Stood Still - previz artist (spaceship landind sequence + final sequence)


lunedì 9 febbraio 2015

lunedì 8 dicembre 2014

Dynamics Agent Intelligence Crowd System

Dynamic Agent Intelligence Crowd System from Federico Cascinelli on Vimeo.


D.A.I.C.S. is a Maya custom tool I develop in the autumn 2014 using MEL scripting and Maya expressions.

In this first version agents are Maya RBD Objects based on the famous game "RISIKO" and they can interact with other agents via the line of fire and the pointer using particle collisions. 

The first collision checks if the tank detected is a friend or an enemy and based on the result they decide if to fire or not.

An expression control the direction and movements of each single agent; a second expression is created once the particles collide with the enemies and control that the bullet hits the tank. If the collision is true the tank is deleted and remain in the scene as an inactive RDB object, if the collision doesn't happen, once the particle dies, the "fire system" is reseted.


mercoledì 12 novembre 2014

Fox Sports

director: Max Rocchetti
vfx: EDI, Milano

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


sabato 2 novembre 2013

martedì 21 maggio 2013

giovedì 9 maggio 2013

martedì 7 maggio 2013

giovedì 2 maggio 2013