I am delighted to post my new show reels for 2017.
Here is my Houdini and Maya FX reel, which shows many disciplines including Houdini crowds, Maya nCloth, nParticles, nHair, and fluids. Rendering is done either in Mental Ray or Arnold, and camera tracking is done with either 3DEqualizer or PFTrack.
.
Here is my Matchmoving reel, which shows some of the most difficult shots I have tackled. All work shown in these shots was done using PFTrack. I am also familiar with 3DEqualizer and Nuke's built in tracker.
Here I will present some useful tips for Crowd Artists and VFX artists who use particles in their work. It will be mostly Houdini but some Maya in the older posts. Please feel free to comment or correct as appropriate.
Thursday, 8 December 2016
Thursday, 8 September 2016
Align Particle Instances to a Camera
Here I will demonstrate a method of aligning a particle to face a location (eg a camera), which mimics the behaviour of particle sprites.
This is quite easy to do. First get the position of each particle, then get the position of the location you want the particles to point to. From this you can calculate the aim direction thus:
aimPP = targetPosition - position
To get this done in Maya, follow these steps:
1. On your particle object, create a new per-particle vector attributes, called aimPP.
2. Create an expression on the particle:
//
// CREATION EXPRESSION
//
float $targetX = targetLocation.translateX;
float $targetY = targetLocation.translateY;
float $targetZ = targetLocation.translateZ;
//
// RUNTIME BEFORE DYNAMICS EXPRESSION
//
float $targetX = targetLocation.translateX;
float $targetY = targetLocation.translateY;
float $targetZ = targetLocation.translateZ;
This is quite easy to do. First get the position of each particle, then get the position of the location you want the particles to point to. From this you can calculate the aim direction thus:
aimPP = targetPosition - position
To get this done in Maya, follow these steps:
1. On your particle object, create a new per-particle vector attributes, called aimPP.
2. Create an expression on the particle:
//
// CREATION EXPRESSION
//
float $targetX = targetLocation.translateX;
float $targetY = targetLocation.translateY;
float $targetZ = targetLocation.translateZ;
vector $targetPosition = <<$targetX, $targetY, $targetZ>>;
aimPP = $targetPosition - position;
spriteTwistPP = rand(-0.25, 0.25);
spriteTwistPP = rand(-0.25, 0.25);
// RUNTIME BEFORE DYNAMICS EXPRESSION
//
float $targetX = targetLocation.translateX;
float $targetY = targetLocation.translateY;
float $targetZ = targetLocation.translateZ;
vector $targetPosition = <<$targetX, $targetY, $targetZ>>;
aimPP = $targetPosition - position;
aimUpAxisPP = << 0, sin(frame*spriteTwistPP), cos(frame*spriteTwistPP) >>;
aimUpAxisPP = << 0, sin(frame*spriteTwistPP), cos(frame*spriteTwistPP) >>;
Now, I was expecting
vector $targetPosition = targetLocation.translate;
to work, but for some reason I cannot think of, it does not work, so I have taken each of the components and constructed the vector from those. Not very elegant but it does the job. If anyone knows why the vector cannot be assigned, please do let me know!
vector $targetPosition = targetLocation.translate;
to work, but for some reason I cannot think of, it does not work, so I have taken each of the components and constructed the vector from those. Not very elegant but it does the job. If anyone knows why the vector cannot be assigned, please do let me know!
3. On the particle shape, set the Aim Direction in the Instancer (Geometry Replacement) section to the aimPP attribute.
If you want the particle instances to rotate as well as face the camera, I am using the spriteTwistPP attribute and then create a new per particle vector attribute called aimUpAxisPP.
Create a random value for spriteTwistPP in the creation expression, then in the runtime before dynamics expression, add the line
aimUpAxisPP = << 0, sin(frame*spriteTwistPP), cos(frame*spriteTwistPP) >>;
Create a random value for spriteTwistPP in the creation expression, then in the runtime before dynamics expression, add the line
aimUpAxisPP = << 0, sin(frame*spriteTwistPP), cos(frame*spriteTwistPP) >>;
Now, for the Aim Up Axis in the Instancer options, choose aimUpAxisPP
Now you can instance any geometry to the particle object and the instances will behave like sprite particles. You can render them with Arnold, too!
Tuesday, 6 September 2016
Maya Sprites with Arnold
I am doing some testing of Maya Sprite rendered with Arnold.
Here is a test scene:
SpriteTest_v001
At the moment the setup is not working. I get the same sprite image (number 1) on all the sprites, and the sprites are all oriented the same. I think the problem is that the spriteTwistPP and spriteNumPP attributes are not being passed to the renderer.
After contacting Solid Angle support, it seems that this workflow is not currently supported, but their developers are 'looking at it', which probably means that they will fix it quite quickly.
I will update this post when I have more information.
Here is a test scene:
SpriteTest_v001
At the moment the setup is not working. I get the same sprite image (number 1) on all the sprites, and the sprites are all oriented the same. I think the problem is that the spriteTwistPP and spriteNumPP attributes are not being passed to the renderer.
After contacting Solid Angle support, it seems that this workflow is not currently supported, but their developers are 'looking at it', which probably means that they will fix it quite quickly.
I will update this post when I have more information.
Subscribe to:
Posts (Atom)