I want control my smoke fluid with a field, I have linked it up in the relationships editor and I am able to get a gravity field to push a fluid in a direction. Over time the fields effect seem to weaken. Are there any ways of getting the fields to have more effect over the fluid,
for example conserve on a particle
The simulation of the fluid can flow back against forces applied( unlike particles ). First off it is generally better to use forces that are local in scope( with bounds ). Also you may wish to turn off boundaries on the fluid container to avoid backflow from affecting the velocity.
The flow within the fluid is like water, in that it is incompressible. As a result you cannot have velocities that concentrically move away from or towards a point (like they do with a point field ). To some extent you can get around this restriction by making the velocity a static grid rather than a dynamic grid, although the velocity will not evolve over time if you do this.
Duncan
I have had a a go at making the velocity a static grid, but that seems to stop the field having any effect at all, my density = Dynamic grid, Temperature = zero and Fuel = zero. So I set my velocity to static grid and then painted the velocity which turns the velocity to Dynamic grid. If you have any ideas I would be really gratefull
I have had a quick go a getting the fluid to collide with a moving object and there seems to be a few problem with that not colliding precisely, do you foresee me having some problems with rotoing a character that will push the fluid around
What I am trying to achieve is a comedy fight dust effect sort of a ball of dust, every now and then you will see a arm and puff of dust/ cloud will follow it. I really want to light the dust so this is why I am trying to use fluids mixed with particles.
Painting velocity should not set the velocity grid to dynamic. You do need a dynamic density grid, but static velocities should work OK. Forces do not evaluate for a static velocity grid, but what you can do is run the simulation one frame, then switch the velocity from dynamic to static and cache the initial conditions. (this paints forces into the grid in a fixed fashion ). Another option you might find useful is to use your fluid shader as a particle shader. This essentially translates the fluid to each particle location and renders it inside a spherical shell.
Here is an explanation I sent out to another question on getting objects to push fluids:
A workaround to make fluids push is to create a fluid pusher field. Assign a "uniform" field to the fluid and make its volume shape a sphere or cylinder. Group this with your characters leg and make it somewhat wider than the leg.
Then create an expression that looks at the velocity of the force and uses this to set the fields direction and magnitude.
The following expression tracks the motion of the object nurbsSphere1 and uses that to push the fluid. MotionField1 is assumed to be parented to the nurbsSphere1:
float $x = nurbsSphere1.translateX;
float $y = nurbsSphere1.translateY;
float $z = nurbsSphere1.translateZ;
float $to[3] = getAttr -time (frame - 1.5) nurbsSphere1.translate;
$x -= $to[0];
$y -= $to[1];
$z -= $to[2];
float $len = sqrt( $x*$x + $y*$y + $z*$z );
if( $len > 0.00001 ){
$x /= $len;
$y /= $len;
$z /= $len;
}
motionField1.directionX = $x;
motionField1.directionY = $y;
motionField1.directionZ = $z;
motionField1.magnitude = motionField1.pushIntensity * $len*20;
In this example the attribute pushIntensity was first added to the field. This allows one to control how strong the force is, because the magnitude is set and thus locked. In your case you could use two fields, one for each leg.
Duncan