Go to: Synopsis. Return value. Related. Flags. Python examples.


air( [objects] , [attenuation=float], [directionX=float], [directionY=float], [directionZ=float], [enableSpread=boolean], [fanSetup=boolean], [inheritRotation=boolean], [inheritVelocity=float], [magnitude=float], [maxDistance=linear], [name=string], [perVertex=boolean], [position=[linear, linear, linear]], [speed=float], [spread=float], [velocityComponentOnly=boolean], [wakeSetup=boolean], [windSetup=boolean])

Note: Strings representing object names and arguments must be separated by commas. This is not depicted in the synopsis.

air is undoable, queryable, and editable.

The air field simulates the effects of moving air. The affected objects will be accelerated or decelerated so that their velocities match that of the air.

With the '-vco true' flag thrown, only accelerations are applied. By parenting an air field to a moving part of an object (ie. a foot of a character) and using '-i 1 -m 0 -s .5 -vco true' flags, one can simulate the movement of air around the foot as it moves, since the TOTAL velocity vector of the field would be only based on the movement of the foot. This can be done while the character walks through leaves or dust on the ground.

For each listed object, the command creates a new field. The transform is the associated dependency node. Use connectDynamic to cause the field to affect a dynamic object.

If fields are created, this command returns the field names. If a field was queried, the results of the query are returned. If a field was edited, the field name is returned.

If the -pos flag is specified, a field is created at the position specified. If not, if object names are provided or the active selection list is non-empty, the command creates a field for every object in the list and calls addDynamic to add it to the object; otherwise the command defaults to -pos 0 0 0.

Setting the -pos flag with objects named on the command line is an error.

Return value


In query mode, return type is based on queried flag.


addDynamic, connectDynamic, particle


attenuation, directionX, directionY, directionZ, enableSpread, fanSetup, inheritRotation, inheritVelocity, magnitude, maxDistance, name, perVertex, position, speed, spread, velocityComponentOnly, wakeSetup, windSetup
Long name (short name) Argument types Properties
position(pos) [linear, linear, linear] queryeditmultiuse
Position in space where you want to place a field. The field then emanates from this position in space rather than from an object. Note that you can both use -pos (creating a field at a position) and also provide object names.
magnitude(m) float queryedit
The speed along the direction vector that the air is moving. Use this in conjunction with the -dx -dy -dz flags.
attenuation(att) float queryedit
Attentuation rate of field The air field attenuates so as to taper the field's magnitude to zero when the maximum distance is reached. Thus, attenuation has no effect unless useMaxDistance is true and a positive maximum distance has been set.
maxDistance(mxd) linear queryedit
Maximum distance at which field is exerted. -1 indicates that the field has no maximum distance.
name(n) string queryedit
name of field
perVertex(pv) boolean queryedit
Per-vertex application. If this flag is set true, then each individual point (CV, particle, vertex,etc.) of the chosen object exerts an identical copy of the force field. If this flag is set to false, then the force is exerted only from the geometric center of the set of points.
directionX(dx) float queryedit
directionY(dy) float queryedit
directionZ(dz) float queryedit
Direction that the air will try to match the affected particles' velocity to. NOTE: This is not the velocity; this is only the direction. Use the -s flag to set the speed.
speed(s) float queryedit
How fast the affected objects' speed reaches the speed (based on the -mag, -dx, -dy, -dz flags) of the air field. This value gets clamped internally to be between 0.0 and 1.0. A value of 0.0 will make the air field have no effect. A value of 1.0 will try to match the air field's speed much quicker, but not necessarily immediately.
inheritVelocity(iv) float queryedit
Amount (from 0 to 1) of the field-owner's velocity added to the vector determined by the direction and speed flags. The combination of these two vectors makes up the TOTAL velocity vector for the air field. This allows the air to be determined directly by the motion of the owning object.
velocityComponentOnly(vco) boolean queryedit
If this is 'false', the air will accelerate or decelerate the affected objects so that their velocities will eventually match the TOTAL velocity vector of the air field. If this is 'true', only ACCELERTION is applied to the affected objects so that their velocity component along the TOTAL velocity vector matches or is greater in magnitude than the TOTAL velocity vector. This will not slow objects down to match velocities, only speed them up to match components. This is most useful when using the -iv flag with a value >0.
inheritRotation(iro) boolean queryedit
If this is set to 'true', then the direction vector described with -dx, -dy, and -dz will be considered local to the owning object. Therefore, if the owning object's transform undergoes any rotation (by itself or one of its parents), the direction vector of the air field will undergo that same rotation.
spread(sp) float queryedit
This represents the angle from the direction vector within which objects will be affected. The values are in the range of 0 to 1. A value of 0 will result in an effect only exactly in front of the air field along the direction vector. A value of 1 will result in any object in front of the owning object, 90 degrees in all direction from the direction vector.
enableSpread(es) boolean queryedit
This tells the system whether or not to use the spread angle given by '-sp'. If this is 'false' then all connected objectswithin the maximum distance will be affected. Also, if this is set to 'false', all affected objects are forced to match their velocities along the direction vector. If this is set to 'true' and spread is used, then the direction of the force is along the direction from the field to the object.
windSetup(wns) boolean edit
This will set some of the values above in a way that approximates the effects of a basic wind. This allows the user to then change certain values as he/she wishes on the same command line. First the preset values get set, and then any other flags that were passed get taken into account. These are the values that get set to approximate 'wind': inheritVelocity 0.0 inheritRotation true componentOnly false enableSpread false
fanSetup(fs) boolean edit
Similar to 'windSetup' except that the effects of a fan or a person blowing air are approximated. The user can pass the same flags on the command line to adjust them from the defaults. These are the values that get set to approximate a 'fan': inheritVelocity 1.0 inheritRotation true componentOnly false enableSpread true spread .5 (45 degrees from center )
wakeSetup(wks) boolean edit
Like the 'windSetup' and 'fanSetup', 'wakeSetup' sets certain values in the field to approximate the movement of air near a moving object, such as a character's foot or hand. The values that are set are: inheritVelocity 1.0 inheritRotation false componentOnly true enableSpread false speed 0.0

Flag can appear in Create mode of command Flag can appear in Edit mode of command
Flag can appear in Query mode of command Flag can have multiple arguments, passed either as a tuple or a list.

Python examples

import maya.cmds as cmds

cmds.air( name='particle1', m=5.0, mxd=2.0 )
# Creates an air field with magnitude 5.0 and maximum distance 2.0,
# and adds it to the list
# of fields particle1 owns.

cmds.air( wakeSetup=True )
# Creates an air field with no no velocity in and of itself (magnitude = 0).
# All of the air's
# velocity is derived from the motion of the objects that own the field.