You are on page 1of 197

Massive

INTRODUCTION TO MASSIVE

Massive is a program for the creation of behavioural simulation. A Massive scene consist of one or more autonomous
agents which can react to each other and their environment. Agents consist of a body and a brain. Their environment
consists of the other agents and an optional terrain model. The body is a hierarchy of connected segments, each
represented by a solid geometric primitive. The brain is a fuzzy logic network which can sample information from the
body and activate various parameters in the body.
Massive runs cdl files and mas files. Cdl stands for creature description language. A cdl file contains a complete
description of the body and brain of one agent. A mas file is a Massive setup file. It typically contains global settings
and placement data.
There are three ways to create motion in massive:

direct control of joint angles and translations from the brain


control of the triggering and blending of actions from the brain.
rigid body dynamics

These three approaches can be combined. So a rigid body dynamic (RBD) simulation could be attached to an agent
which is controlled by actions, and forces could be applied from output nodes in the brain. Also the brain can be used
to modify actions to enable behaviour such as terrain adaptation and parametric variation of motion.
The brain page of the icons window can be used to create and modify the brains and observe their operation as a
directed graph of icons. The main menu is also in the icons window.
The view window displays a perspective image of the simulation. The camera position and orientation can be
controlled interactively, the camera can be constrained to the agents in various ways, and cameras can be read from
and written to files.
The physical aspects of an agent are edited in the body page of the icons window. This includes the dynamics
properties, cloth, geometry, shaders etc.
To run massive enter massive at the command line, or massive and the name of a cdl file or a mas file. For example:
massive CDL/boxy.cdl
massive MAS/boxes.mas
Running massive with -h will invoke command line help.
To run a simulation select Run -> Go from the menu or hit the spacebar. If the simulation runs slowly, it is possible to
view it in real time by recording images to disk. See Sim Dialog for details.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/massive.html (1 of 2) [13/05/2007 01:37:06]

Massive

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/massive.html (2 of 2) [13/05/2007 01:37:06]

Introduction to Fuzzy Logic

INTRODUCTION TO FUZZY LOGIC

The general idea of fuzzy logic is to represent continuously valued inputs such as temperature as fuzzy values such
as cold, warm and hot, and then combine them in rules to control outputs. The possible output values are also
represented with fuzzy values, such as stop, slow and fast. A rule in a fuzzy logic air cooling system might then be "if
hot then fast".
Here's a more complete description of a fuzzy logic air cooling system:
Inputs: temperature
Outputs: fan speed
Fuzzy input values representing temperature: cold, warm, hot
Fuzzy output values for fan speed: stop, slow, fast
Rules:
If hot then fast
If warm then slow
If cold then stop
Of course the behaviour of such as system could easily be modeled with a simple expression, but as the required
behaviour becomes more detailed and subtle then the advantages of fuzzy logic become apparent.
Now for a more relevant example. This is a fuzzy logic system for controling the lean of an agent due to turning:
Inputs: speed, turning
Outputs: lean
Fuzzy input values based on speed: fast, slow
Fuzzy input values based on turning: left, straight, right
Fuzzy output values for lean: lean left, upright, lean right
Rules:
If fast and left then lean left
If fast and right then lean right
If slow or straight then upright
The interesting thing about this system is that the degree to which any of the three rules is true affects the degree to
which the fuzzy output values are asserted. This provides nice smooth control over the range of possible lean angles.
It also allows for interactive editing of the definitions of the fuzzy values. The resultant behaviour can be further fine
tuned by adjusting the weights of the rules.
Fuzzy values are defined by a membership function which is basically a simple curve. By applying the membership
function to the input values, a degree of truth between 0 and 1 is generated. Fuzzy values usually correspond to a
linguistic symbol such as hot or cold and sometimes they just represent a fuzzy version of a real number such as 0 or
8.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/fuzzy_logic.html (1 of 3) [13/05/2007 01:37:08]

Introduction to Fuzzy Logic

The membership function is often a triangular or bell shaped curve. For example a fuzzy zero might be .3 true if the
input value is -.07, which is close to `crisp' zero.

There are four standard membership function types:

Here are some membership functions to fuzzify distance:

Rules combine fuzzy values together to assert a fuzzy output value.


There are several types of rules; AND, OR, NAND and NOR.
AND rules are true in as much as all of the inputs are true.
OR rules are true in as much as any one of the inputs is true.
NAND is an inverted AND. It's true in as much as all of the inputs are not true.
NOR is an inverted OR. It's true in as much as any of the inputs are not true.
Most of the time AND is all that's required. OR is handy when any one of several factors can influence an output.
NAND is useful for when something needs to have more effect when it's not true.
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/fuzzy_logic.html (2 of 3) [13/05/2007 01:37:08]

Introduction to Fuzzy Logic

Defuzzification is the process of turning fuzzy output values into 'crisp' output values. In most cases this means
combining several fuzzy output values (such as zero slow medium fast) to determine an output value (eg: speed in
meters per second). The actual output value is dependent on the strengths of the rules which are activating the fuzzy
output values.
There are different methods of defuzzification. Some methods use an averaging function to produce a compromise
value as the output whereas others make a clear decision between the fuzzy values. For example an averaging
function might be good for determining foot placement to maintain balance but it could lead to problems if applied to
turning left or right at a T intersection.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/fuzzy_logic.html (3 of 3) [13/05/2007 01:37:08]

Fuzzy Logic In Massive

FUZZY LOGIC IN MASSIVE

The fuzzy logic nodes in Massive represent a fuzzy logic network, which comprises an agent's brain. For an
introduction to fuzzy logic see An Introduction To Fuzzy Logic or read a good book on the subject*.
To create a fuzzy logic network the user edits a connected graph of icons which represent various nodes in the
network (see Node Window).
Input data is accessed via input nodes.
Fuzzy input values are defined in fuzz nodes.
Rules are represented by the connections made with AND nodes and OR nodes.
Fuzzy output values are set in defuzz nodes.
Outputs are resolved and assigned in output nodes.
The timer node and noise node are really special purpose input nodes.
Every icon has an activity bar which indicates the output value for the node. Positive values are displayed in red and
negative values in blue.
Below is a simple fuzzy network for controlling leaning into turns for an agent.

On the left are the input nodes which sample information from the agent's senses and internal states. These are
connected to the fuzz nodes where the fuzzy speed values fast and slow and fuzzy turn values left, straight and
right are defined. These are then combined in rules which infer the following:
if fast and left then lean left
if slow or straight then upright
if right and fast then lean right
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/massive_fuzzy.html (1 of 2) [13/05/2007 01:37:09]

Fuzzy Logic In Massive

The fuzzy output values are defined in the three defuzz nodes on the right (lean left, upright, lean right) and they are
defuzzified and applied to the agent in the output node named rz.
A good way of building fuzzy logic is to make rules that represent sensible statements in English such as the ones
above. Then it's easy to follow what a brain is doing and it also makes it easier to spot mistakes.
It is not necessary to connect the icons in the order above. AND nodes can be connected to other AND nodes.
Almost any order of connection can be made, but loops are not recommended. For instance an input node can be
connected directly to an AND, and a fuzz node can be connected to an output. Also output nodes can be used as
input nodes to fuzz nodes, thus allowing layers of fuzzy logic to be represented in the directed graph.
___________
* Fuzzy Logic & NeuroFuzzy Applications Explained ISBN 0-13-368465-2.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/massive_fuzzy.html (2 of 2) [13/05/2007 01:37:09]

Installing Massive

INSTALLING MASSIVE

About the Massive License


Massive is sold as a floating license. Massive can be run on any machine in your network, but the number of licenses
you own is the maximum number of machines that can be running Massive at once. The number of processors
running on that machine do not affect the count.
The procedural primitive plugins (Massive.so and run_program.exe) do not require a license to run.

Installation
NOTE: Massive is only tested and supported on Redhat versions 7.3 and 9.
Make a directory called /usr/local/massive.
Download the three archive files from the download page into /usr/local/massive: http://www.massivesoftware.com/
distrib/download.html
Cd into /usr/local/massive and extract the files:
tar -xvzf v1.2.3.tgz (or the name of the version you have downloaded)
tar -xvzf manual.tgz
tar -xvzf demo.tgz
Please note that once you choose the machine that will serve the license, you will not be able to serve the license
from another machine until the term of the key is up. If you think you might need to change license server machines,
feel free to designate a shorter term for the key and we can then re-up it later for the new machine.
On the host to be the license server, cd into the bin directory and run this command:
./mhost -id
Then email the line that appears in the console to key@massivesoftware.com .
Note to our customer's systems engineers:
Please use key@massivesoftware.com to submit any systems related support requests. Put these lines in the file .
cshrc in your home directory if using a csh or tcsh shell:
setenv MSERVER servername
setenv MASSIVE_HOME /usr/local/massive
setenv RMAN_SHADER_PATH shaderpath
set path = ($path /usr/local/massive/bin)
or these lines if using a bash shell:
export MSERVER=servername
export RMAN_SHADER_PATH=shaderpath
export MASSIVE_HOME=/usr/local/massive
PATH=$PATH:/usr/local/massive/bin
where servername is the name of the machine that mhost is running on and shaderpath is a path in which to find .sl

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/install.html (1 of 2) [13/05/2007 01:37:11]

Installing Massive

files for RenderMan shaders. RMAN_SHADER_PATH is optional.


Once the file mlicense has been received from support the license server can be run by root:
./mhost mlicense
It's best to run it in its own shell. If mlicense is not in the same directory as mhost then the full path for mlicense must
be given.
Then Massive can be run:
massive /usr/local/massive/Demo/Agents/Man/CDL/man.cdl
Hopefully a full screen window and the view window will appear with an agent visible in the view window. Hit the space
bar to run the agent and then alt-f to get the camera to follow.
See /usr/local/massive/Demo/HTML/index.html for information about the demo files.
To stop mhost it's best to run this command in another window:
mhost -stop
Make sure that MSERVER is set before running this command.
To check the status of the license server run this command:
mtell

Troubleshooting
Mouse clicks have no effect.
If mouse events seem to have no effect in Massive it's likely to be due to a Sawfish shortcut. The default window
manager settings for Gnome remap mouse clicks so it may be necessary to edit the shortcuts in the Sawfish window
manager. Remove any shortcuts in Global and Window that have "Left" "Middle" or "Right" as the Key.
Font not found
Some installations of X contain different fonts. Sometimes this will cause Massive to be unable to find a font. The .
Xdefaults file in the user's home directory can be used to specify the fonts that Massive will load. These lines in ~/.
Xdefaults will specify the default fonts:
Massive*menu.font:
Massive*font:
Massive*smallFont:
Massive*fixedFont:
Massive*textportFont:

-adobe-helvetica-bold-o-normal-*-14-*-*-*-*-*-iso8859-*
-adobe-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-*
-adobe-helvetica-medium-r-normal-*-8-*-*-*-*-*-iso8859-*
-*-fixed-bold-r-normal-*-18-*-*-*-*-*-iso8859-*
-*-clean-bold-r-normal-*-16-*-*-*-*-*-*-*

Can't connect to license server


First check that the environment variable MSERVER is set to the name of the machine that is running mhost. Next
check that mhost is actually running.
Use mtell to find out the current status of the license server. Make sure that MSERVER is set and just run mtell on the
command line. It should give a report of licenses in use and current connections to mhost.

CONFIDENTIAL AND PROPRIETARY


copyright Massive Limited 2005 MASSIVE is a trademark of Massive Limited

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/install.html (2 of 2) [13/05/2007 01:37:11]

view window

VIEW WINDOW

The view window displays the segments and geometry of


the objects, and the terrain. The view menu controls many of
the view window options. These options include display of
object names, segment names, shadows, ground plane,
shaded/wireframe. If the camera does not have a camera
file loaded it can be controlled with the mouse buttons:
left mouse

orbit

middle mouse

scroll

right mouse

dolly in/out

shift right mouse

zoom

alt left mouse

select orbit centre

ctrl middle mouse

extreme scroll

ctrl right mouse

extreme dolly in/out

The current functions of the mouse buttons due to shift, ctrl


and alt modifiers are shown as a message in the lower left
corner of the icon window.

Alt key shortcuts for view options:


a segment axes
A agent axes
b blocky mode
B segment bounds
f

camera follow

F camera follow filter


i

ik end effectors

sticks mode

m agent polygonal geometry


n segment names
N object names
p

agent p.o.v. display (only available if agent is using


vision)

s shaded
S shadows
V view all

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/view_window.html (1 of 2) [13/05/2007 01:37:13]

view window

@ sound emission

The simulation time is displayed in the lower right corner. If the simulation is running in real time (default 24 fps) then
the time will be displayed in white, otherwise it is displayed in red.

Picking
The current agent and segment can be selected by shift-left-clicking in the view window. Picking is context sensitive
so for instance when the place tool is active generators become the selectable items instead of agents and segments.
Lassoo selections are made by shift-left-dragging to draw a lassoo selection area. Lassoo drawing happpens when
the drag starts away from any selectable item. Lassoo selection currently only works for agents, locators and springs.
Dragging selectable items is acheived with a shift-left-drag when the mouse is over an item. Dragging works for flow
fields, generators, locators and springs.
To add to a selection use shift-middle-click or shift-middle-drag.
To subtract from a selection use alt-shift-middle-click or alt-shift-middle-drag.
As with camera controls, the current functions of the mouse buttons are shown as a message in the lower left corner
of the icon window.

Pose Mode
Pose Mode can be used to create specific poses by moving selected segments in the View Window. This is
especially useful for editing an agent's bind pose. See Segment - Pose
1. press Tab to switch View Window to Pose Mode
2. select a segment
3. alt-drag to rotate selected segment
ctrl-drag to translate selected segment

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/view_window.html (2 of 2) [13/05/2007 01:37:13]

Node Window

NODE WINDOW

The node window contains the pulldown menu, the node


work area, the node edit area, and the new node bar.
Text fields support cutting and pasting (Alt C, Alt V) and XPaste (middle mouse click).
The home key sets the cursor at the start of the string, the
end key sets it to the end.
Text selections can be made by dragging the mouse or by
holding the shift key and hitting the left or right arrows.
Numeric fields work like text fields with the added feature
of a virtual slider which is operated with a right drag. The
magnitude of the change is proportional to the digit from
which the drag is started.
Some menu selections bring up dialog boxes. A dialog
box can be exited with the Esc key.
There are four pages in the node window: scene, brain, body and motion. The page up and page down keys can be
used to cycle through the pages.
The brain page is the default.
The body page is for editing the skeleton, geometry, shading, cloth, dynamics and other physical aspects of an agent.
The scene page is for editing lights and cameras.
The motion page is for designing motion trees.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/node_window.html (1 of 2) [13/05/2007 01:37:15]

Node Window

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/node_window.html (2 of 2) [13/05/2007 01:37:15]

Massive Main Menu

MASSIVE MAIN MENU

The main menu is at the top of the icons window. Most of the dialog boxes are called from this menu. The sub menus
are:
File | Edit | Run | View | Camera | Fuzzy | Terrain | Options

FILE MENU
Save setup

Invokes a dialog box for saving the current setup. The setup includes display options,
sequencer lists, groups, placement and any other data that is not saved in CDL files.

Save agent

Invokes a dialog box for saving a CDL of the current agent. Note that if the current
agent is an instanced agent then the original agent from which the current agent was
instanced is saved. Any changes made to an instanced agent's body are not saved.

Save ASF

Invokes a dialog box for saving an acclaim format skeleton file. Dummy bones are
added where required.

Load setup

Invokes a dialog box for loading an agent. There are three ways the setup can be
loaded:
replace current setup - deletes the existing setup and load the new one.
merge with current setup - combines the existing setup with the new one.
child of current setup - loads the new setup as a child of the current setup. The new
setup is then available in the place tool so that multiple instances of the setup can be
created.

Load agent

Invokes a dialog box for loading an agent. A new placement group is created for the
resultant agent.

New agent

Creates a new agent with a single tube segment and no brain.

Import Maya ascii

Invokes a dialog box for loading a Maya ascii light, camera, skeleton, or motion. (See
Maya integration.)

Export Maya ascii

Exports skeleton of currently selected agent in Maya ascii format.

Save bones file

Saves an ascii file that contains the skinning data for all of the segments of the current
agent.

Save selected bones

Saves an ascii file that contains the skinning data for the selected segments of the
current agent.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/main_menu.html (1 of 7) [13/05/2007 01:37:18]

Massive Main Menu

Load actions

Loads an action file (.amc, .act or .actb) and adds it to the list of actions for the current
object. Multiple files can be selected with shift-drag or shift-click.

Save selected action

Invokes a dialog box for saving the currently selected action.

Save actions

Invokes a dialog box for saving all actions for the current object.

load tree

Loads a motion tree which is then editable in the motion page of the icon window.

save tree

Saves the motion tree that is in the motion page.

Load terrain

Invokes a dialog box for loading a polygonal terrain model.

load terrain map

Invokes a dialog box for loading a Tiff or an SGI rgb image as a terrain map. SGI
format is not currently supported under Linux.

save terrain map

Invokes a dialog box for saving the terrain map as a Tiff or an SGI rgb image. SGI
format is not currently supported under Linux.

load callsheet

Invokes a dialog box for loading a callsheet. This will result in the creation of locators
for each entry of the callsheet.

save callsheet

Invokes a dialog box for saving the locators as a callsheet.

Exit

EDIT MENU
Action

Invokes the Action Editor.

Dynamics

Invokes the dynamics options dialog.

Flow field

Invokes the flow field editor.

Locator

Invokes the locator editor.

Paint

Invokes the paint tool.

Place

Invokes the place tool.

Symetric

Toggles symetric editing of segments.

Vision

Invokes the vision dialog.

delete instances

Removes all instanced agents from the scene and makes the template
agents visible again. ctrl-d has the same effect.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/main_menu.html (2 of 7) [13/05/2007 01:37:18]

Massive Main Menu

RUN MENU
Go

Toggle simulation running/stopped

record action

Records the current agent's motion as a new action in the


agent's action list.

Reset

Resets all objects to rest positions and all timers to zero [alt-r]

Sequencer

Invokes the action sequencer

Sim

Invokes the Sim dialog

VIEW MENU
agent axes

Toggle display of axes for agent's local space

agent names

Toggle display of agent names

all

View all objects in the scene

axes

Toggle display of segment axes. [alt-a]

backfaces

Toggle backfacing agent geometry display

blocky

Toggle blocky tube/sphere display

cameras

Toggle camera display

clipping

Toggle ground plane clipping of segments and geometry

dynamics

Toggle dynamics iterations display. This can severely slow


down the simulation.

flow field

Toggle display of flow field when flow field editor is off

grid

Toggle grid display

lights

Toggle display of lights

locators

Toggle locators display

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/main_menu.html (3 of 7) [13/05/2007 01:37:18]

Massive Main Menu

motion blur

Toggle motion blur. Samples can be set at the command line,


default is 8. Shutter default is 0.5 which is equivalent to 180
degrees

playbacks

Toggle playbacks display. Displays the active action playbacks


for the current object in the view window

RBD axes

Toggle Rigid Body Dynamic axes. These can be different from


segment axes due to GlowWorm joint represenatation

segment names

Toggle display of segment names. [alt-n]

shaded

Toggle shaded drawing

smooth

Toggle smooth shading for agent geometry

sound emission

Toggle display of sound emission frequency and amplitude (as


colour and radius)

sound reception

Toggle display of loudest received sounds (as a list of relevant


data over agents emitting those sounds)

sprites

Toggle display of sprites for objects and locators

sticks

Toggle display of skeletons as lines

standins

Toggle display of agents as standins

time

Toggle display of simulation time

vision

Toggle display of agent vision in view window

wind

Toggle display of wind indicators

CAMERA MENU
Crop filmback

Toggles clipping of filmback against the view window. Default is for filmback to be
entirely visible within view window

display filmback

Toggles display of filmback edge as a red outlin

display masks

Toggles display of 235 and 177 masks as shaded areas

heads up

Toggles the heads up camera controls in the view window

Resolution

Invokes a dialog to set the pixel resolution of the view window

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/main_menu.html (4 of 7) [13/05/2007 01:37:18]

Massive Main Menu

Save

Invokes a dialog to save the current camera as a single frame camera file. Autodetects plod and Weta (.wcam) camera formats

Shadows

Invokes the shadows dialog

render

Executes a RenderMan render of the current scene as displayed in the framebuffer

FUZZY MENU
Find

Invokes a dialog for finding strings in nodes.

Add comment

Upon the next mouse click a new comment node will be made.

Auto name nodes

Toggles automatic naming of input and output nodes based on


source and channel strings.

Connected

Toggles hilighting of nodes connected to selected nodes.

Edit selected

Invokes a dialog containing sliders for all selected nodes.

fuzz background

Toggles display of vision and sound input data behind fuzz


node graphs.

Graph selected

Toggles display of all selected fuzz node graphs when editing a


fuzz node.

Links

Toggles display of links between nodes.

Swap and/or

Changes selected and nodes to or nodes and or nodes to and


nodes.

Transform

Invokes a dialog for scaling and offseting fuzz node


membership functions.

Macro column layout

Toggles on column layout for macros. Otherwise macro layout


style will be an edge layout.

TERRAIN MENU
alpha channel

Toggles display of alpha channel (in red) instead of rgb


channels.

display

Toggles display of terrain.

flip normals

Toggles normal flipping for terrain. This affects collision


detection as well as display.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/main_menu.html (5 of 7) [13/05/2007 01:37:18]

Massive Main Menu

lines

Toggles display of terrain polygon outlines.

normals

Toggles display of terrain polygon normals.

shade

Toggles lighting of terrain.

texture map

Toggles display of terrain map.

texture move

Toggles coloured vertex terrain map display when moving the


camera interactively.

visible to agents

Toggles visibility of terrain in all agent's vision.

RenderMan shader

Invokes a dialog for editing the terrain surface shader call.

RenderMan
displacement

Invokes a dialog for editing the terrain displacement shader call.

OPTIONS MENU
Bones window

Toggles display of the Bones skinning window

View port

Toggles display of the View window

UV window

Toggles display of the UV window. This window displays the UV space geometry over
the texture map for the selected geometry node

Grid size

Invokes a dialog for setting the XZ grid resolution and size

Handle size

Invokes a dialog for scaling the display of IK handles

Light size

Invokes a dialog for scaling the display of lights

List playbacks

Invokes a dialog that displays all active action playbacks for the current agent.

List variables

Toggles printing of all variables for the current agent to stdout. Primarily useful for
debugging a brain but could be used to pipe output from a brain to another program.

Material links

Toggles display of links in body page of icon window between material nodes and
geometry nodes.

Render

Invokes a dialog for editing global renderer settings

Time Warp

Invokes a dialog to slow down or speed up time

Units

Invokes a dialog to set the scene units

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/main_menu.html (6 of 7) [13/05/2007 01:37:18]

Massive Main Menu

Wind display scale

Invokes a dialog to scale the display of wind indicators

Image compression

Invokes a dialog to set compression level of JPEG files output through the Sim dialog.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/main_menu.html (7 of 7) [13/05/2007 01:37:18]

Scene Page

SCENE PAGE

The scene page is used to edit the lights, cameras, and groups in the scene.
Agents can also be edited by selecting their node in the scene page or by clicking on empty space in the body page
while the agent is selected.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/scene_page.html (1 of 2) [13/05/2007 01:37:21]

Scene Page

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/scene_page.html (2 of 2) [13/05/2007 01:37:21]

Light Node

LIGHT NODE

A Massive scene has 4 lights by default, a key light, a sky light, a bounce light, and an ambient light, each represented
with a light node. Lights can be added, selected, deleted, and modified in the scene page.
To see the lights in the scene, select View->Lights from the Main Menu.
Lights can be imported from Maya as .ma files (see Maya Integration for details).

LIGHT ATTRIBUTES

name text field

specifies the name of the light

r/g/b

specifies the colour of the light in rgb values

"look thru" button

display view window from perspective of selected light

intensity

the light's intensity

Light Transform Tab

x, y, and z rotation

specifies rotation of light in world space

x, y, and z translation

specifies translation of light in world space

Light Shadow Warp Tab

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/light_node.html (1 of 3) [13/05/2007 01:37:24]

Light Node

Shadow warp is not yet fully implemented.

Light Constrain Tab

constraint types
off

light has no constraints

look at

light does not translate but rotates in place to keep target agent in center of view

agent

light is constrained to agent axis of selected agent

segment

light is constrained to selected segment

pov

light is constrained to agent's vision-enabled segment if agent vision is on

follow XZ

light follows agent in the XZ plane

follow 3D

light follows agent in X, Y, and Z

other attributes
agent

name of agent targeted by light

Light GL Tab

light types
ambient

an ambient light source

directional

a standard directional light (parallel rays)

point

a standard point light (light emanating from a point source)

spot

a standard spot light (a cone emanating from one source)

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/light_node.html (2 of 3) [13/05/2007 01:37:24]

Light Node

general light options


falloff

toggles on/off falloff over distance (falloff is exponential)

shadows

turns on/off shadows in OpenGL view. Only one light can be the shadow-casting light
in the OpenGL view. If no lights have "shadow" toggled on, and View->shadows is on,
Massive will generate default shadows in a direction of (1,-1,1).

znear

Near shadow map bound.

zfar

Far shadow map bound.

directional light options


shadow width

width of shadow map in world space

shadow height

height of shadow map in world space

spotlight options
spot angle

cone angle of spot light

spot exponent

dropoff from center to edge of spotlight

Light Renderman Tab

shader

when off, light is assigned a default shader by Massive. When on, a custom shader
can be assigned to the light through a shader dialog box or by manually typing the
shader information into the text box.

appears if "shader" button is toggled on - clicking this button opens a shader dialog
box containing shaders and parameters

- | shadow map |
raytraced

shadow type, either - (none), shadow map, or raytraced. Text field contains name of
shadow map file to create. Extension will automatically be changed when writing ribs
to be suitable for the specific renderer.

resolution

resolution of shadow map in pixels

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/light_node.html (3 of 3) [13/05/2007 01:37:24]

Camera Node

CAMERA NODE

A Massive scene has 4 cameras by default, each represented with a camera node. Cameras can be selected and
modified in the scene page.
The View window will show the view from the currently selected camera. To make the cameras themselves visible,
select View->Cameras from the Main Menu.
Cameras can be imported from Maya as .ma files (see Maya Integration for details), either animated or nonanimated. Massive saves animated camera data as a .cam file.

CAMERA ATTRIBUTES

name text field

specifies the name of the camera

Camera Transform Tab

x, y, and z rotation

specifies rotation of camera in world space

x, y, and z translation

specifies translation of camera in world space

Camera Constrain Tab


These are toggled on when an agent is selected and alt-f is typed.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/camera_node.html (1 of 3) [13/05/2007 01:37:27]

Camera Node

constraint types
off

camera has no constraints

look at

camera does not translate but rotates in place to keep target agent in center of view

agent

camera is constrained to agent axis of selected agent

segment

camera is constrained to selected segment

pov

camera is constrained to the agent's vision-enabled segment, if vision is on

follow XZ

camera follows agent in the XZ plane

follow 3D

camera follows agent in X, Y, and Z

other attributes
agent

name of agent targeted by camera

smooth

delay on camera following, for smoother movement. can be toggled on/off, and amount
of smoothness can be adjusted.

Camera Projection Tab

fov

x and y dimensions of camera's field of view

pixel aspect ratio

specifies pixel aspect ratio seen in View window and used for rendering

filmback

x and y dimensions of filmback

35 mm

sets filmback to 35 mm full gate settings

zmin

minimum viewable distance (near clipping plane)

zmax

maximum viewable distance (far clipping plane)

Camera Animation Tab

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/camera_node.html (2 of 3) [13/05/2007 01:37:27]

Camera Node

file

.cam file containing data for this camera

offset

number of frames to offset camera animation

Camera Background Tab

file

image file to use as background image


A series of tif or jpg files can be loaded for use as an animated background as well.
The following conventions are used for frame numbering:
@ = writes with no padding in filename
# (* the no. of digits) = padding to match the no. of digits specified
# (* 1, single hash) = four digit padding
Example:
bgfile.#.tif (refers to a tif sequence bgfile.0001.tif, bgfile.0002.tif, etc.)

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/camera_node.html (3 of 3) [13/05/2007 01:37:27]

agent node

AGENT EDIT AREA

Agents can be selected for editing while in the body page by clicking on empty space in the node window, or by
selecting the agent node in the scene page. Agents can be deleted from a scene by selecting their node in the scene
page and deleting it.

AGENT

name text field

specifies name of Agent

process: brain

toggles processing of agent's brain

process: replay

replays motion data recorded in previous simulation

process: remote

not yet enabled

colour

Specifies colour of agents skeleton. Colours are able to be seen (become input data) using
agent vision. In Massive colours are assigned a value between 0 & 1

view geometry

Toggles on geometry visibility for the agent.

AGENT TABS
The following tabs are available when an agent is selected:

rest
bind
dynamics
standin
vision
vary
variables
DSO
ODE

Agent Rest Tab


Specifies the initial transformation of the Agent relevant to World Space.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/agent_node.html (1 of 5) [13/05/2007 01:37:32]

agent node

x y z rotation

specify the rotations of the entire agent with respect to World Space

x y z translation

specify the translations of the entire agent with respect to World Space

Agent Bind Tab


Bind is the pose used to bind the geometry to the agents skeleton.
The bind pose can be referenced from a saved .amc file or set from a pose within massive. If no bind pose is specified
the rest pose is the bind pose.

bind pose

filename specifying a .amc file to reference as the bind pose

set bind pose

sets the current pose as bind pose

save bind pose

saves the bind pose. This does not save the current pose

goto bind pose

takes the agent to the bind pose

Agent Dynamics Tab


Specifies the dynamics properties of an agent which are used when dynamics is active.
Global dynamics, accessed under dynamics in the edit menu, enable or disable various dynamics options at a global
level thereby overriding dynamics at an Agent or Segment level.

drag

specifies the amount of force exerted on the agent as they move through the atmosphere.
This depends on the size, shape and motion of the segments and on the movement of the
wind

gravity

specifies the acceleration used to compute gravity.


Gravity is set per Agent not per segment.
Different Agents in the same scene can have different gravity.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/agent_node.html (2 of 5) [13/05/2007 01:37:32]

agent node

steps

specifies the no. of iterations of dynamics calculations per second

Collision
Whenever a collision is detected between a segment and something else forces are applied to prevent
interpenetration of the colliding objects. see collisions
force

specifies a constant used to determine how much force to apply perpendicular to the collision
surface to prevent interpenetratrion

damper

damper reduces the relative velocity of the colliding objects effectively making the collisions
less bouncy

friction

specifies the amount of force applied parallel to the collision surface opposing the relative
velocity of the colliding objects

Rotation Limits
Rotations can be constrained to stay within the segment rotation limits. Constraint forces are applied to each
rotational degree of freedom for any segments that have a non-zero rotation spring constant.
force

specifies the amount of force applied to constrain objects moving beyond particular rotational
limits

friction

specifies a force opposing rotation of the segments effectively making joints stiffer

Agent Vision Tab


Agent vision controls affect the quality of the image rendered for the agents point of view. see Vision
Field of view & resolution are interdependent. Changing one causes the others to be updated automatically.
x resolution is always calculated automatically and cannot be changed manually.

field of view

specifies the field of view in x & y

resolution

specifies the resolution in x & y

render slices

specifies the number of separately rendered subimages to reduce the wide angle distortion of
the image

z factor

determines how the infinite set of z values (distance from agent in z) are mapped into the
fuzzy values between 0 & 1 according to an exponential function of the variable z factor as
follows:
z = exp(-z factor*distance)
This maps distant pixels to 0 and close pixels to 1 as if distance was related to intensity of a
depth image

Agent Vary Tab


http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/agent_node.html (3 of 5) [13/05/2007 01:37:32]

agent node

Assigns agent variables to scale, thickness and translation parameters of the agent.

scale

specifies a variable to affect the overall scale of the agent

thick

specifies a variable to affect the thickness of the segments of the agent

translate

specifies a variable to affect x y or z translations of the agents rest pose

Agent Variables Tab


Defines Variables that can be used to vary parameters across the instanced agents in a scene.

add button

creates a new agent variable

delete button

removes the selected agent variable

variables list

list of agent variables with its default value

variable specifics
name text field

specifies name of the variable

default

specifies default value of the variable

range

specifies the minimum & maximum values of the variable

expr

specifies an expression to calculate the value of the variable

For instanced agents:

name text field

specifies name of the variable

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/agent_node.html (4 of 5) [13/05/2007 01:37:32]

agent node

value

specifies the variables value

Agent DSO Tab


The DSO tab is for loading Dynamically Shared Objects as plugins. DSO's can be written in C/C++. See DSO for
details.

file name

filename specifying a .so file to use as a plug-in to massive

add

adds a new plug-in

delete

removes the selected plug-in

plug-in list

lists plugins

Agent ODE Tab

These parameters apply when ODE is selected as the dynamics solver for the scene.
cfm

Constraint force mixing. "Softens" constraints set by erp setting. A cfm of 0 indicates a hard
constraint while increasing positive values indicate softer constraints. Suggested values are
small positive values in the order of 0.0001. Use this in conjunction with erp parameter to
adjust for stability.

ODE ff

Adjusting this value can help decrease joint popping by scaling down the force used to move
joints away from a stop. Recommended values are between 0 and 1, but any positive value is
possible as well.

erp

Error reduction parameter. Specifies what proportion of a joint constraint violation ODE will
attempt to fix in the next step. Ranges from 0 to 1. Values too large result in instability while
values too small result in joints drifting apart. Recommended range is 0.1 to 0.8.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/agent_node.html (5 of 5) [13/05/2007 01:37:32]

Group Node

GROUP NODE

Every time an agent is loaded into the scene, a group is created for it. This is depicted in the scene page by an agent
node and group node with one connection between them. If the same agent file (.cdl) is loaded into the scene multiple
times, each time a new agent node will be created and assigned to a new group.
Groups come into effect during placement of agents. See the Placement page for more details.

GROUP ATTRIBUTES

name text field

specifies the name of the group

colour buttons

colour of the locators that represent this group

file

agent (CDL) file referenced by the group

Group Locators Tab

locator scale

scales display size of locators

select locators

selects all locators for this group

Group Variables Tab


Group variables can be used to override the agent variables. In this way the same original agent can be used with
different variables in different places in the scene.
Like agent variables, group variables should not contain spaces in their name.
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/group_node.html (1 of 2) [13/05/2007 01:37:34]

Group Node

add

creates a new group variable

delete

removes the selected group variable

variables list

list of group variables, each with its default value

variable specifics
name text field

specifies name of variable

default

specifies default value of the variable

range

specifies the minimum and maximum values of the variable

expr

specifies an expression to calculate the value of the variable

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/group_node.html (2 of 2) [13/05/2007 01:37:34]

body page

BODY PAGE

The body page is used to edit the physical characteristics of an agent such as its segments, springs, geometry,
cloth, materials, options and variation.
The layout is similar to the brain page with the central node work area, the new node bar at the left, and the node
edit area at the bottom of the window.

NODE WORK AREA


This is where the agent body nodes are displayed.

WORKING WITH BODY NODES


Note: A Massive skeleton must be one connected hierarchy.
New nodes

are made by dragging one of the icons in the icon box onto the work area. If a node is already
selected then the new node will be attached to the selected node where appropriate.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/body_page.html (1 of 3) [13/05/2007 01:37:37]

body page

Select nodes

by left clicking on them or box select with the left mouse. To unselect all nodes click on the
work area background. This makes agent parameters appear in the editor area.

Add to a selection

by selecting with the shift key held down.

Lock a selection

by clicking on the grey rectangle to the right of an icon in the icon box. This locks the current
selection for the particular type of node. This is useful when selecting various segments for
Bones skinning editing whilst maintaining the geometry selection.

Move

nodes by left dragging them.

Delete

selected nodes with the delete key.

Connect

nodes by holding down the ctrl key while selecting first the from node then the to node. For
hierarchies of segments the to node is the parent. Reparenting a connected segment keeps
the segment in the same world space location. To prevent this from happening disconnect the
segment from it's parent first.

Disconnect

nodes by holding down ctrl alt while clicking the nodes to disconnect. Segments cannot be
disconnected. Segments can be deleted or reconnected to a new parent.

Frame all nodes

Use ctrl-a to view and center all existing nodes

Frame selected nodes Use ctrl-s to view and center selected nodes

NEW NODE BAR


The new node bar on the left of the window is used for dragging new nodes onto the icon work area and for switching
selection on and off for the various types of nodes.

BODY NODES
Sphere

Tube

Disc

Box

Spheres, tubes, discs, and boxes are all types of segments which form the agent's skeleton.
Spring
Springs connect between segments. They affect an agent's rigid body dynamics.
Cloth
Cloth is a dynamic primitive for fast cloth simulation.
Geometry
Geometry is read from files and can be attached to segments either rigidly or with Bones skinning.
Option
Option nodes switch or between attached geometry or cloth nodes.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/body_page.html (2 of 3) [13/05/2007 01:37:37]

body page

Material
Materials can be attached to geometry. They are used to control how the geometry will look in both hardware and
software renders.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/body_page.html (3 of 3) [13/05/2007 01:37:37]

segment node

SEGMENTS

Segments are similar to bones or links in other animation systems except that they are solid primitives and they do not
need to be connected end to end.
Skeletons can be created in Massive or imported from Maya as a Maya ascii file. Skeletons imported from Maya do
not contain any 3D shape information, so Massive fills in the information with a best guess estimate. Segments usually
need some adjustment after initial import from Maya.
Not all combinations of segment-to-segment collisions are currently supported. Also, boxes will collide with the ground
plane but not with a terrain model.

SEGMENT ATTRIBUTES

name text field

specifies the name of the segment

segment icon

represents segment primitive type which can be sphere, tube, disc or box
Clicking on this icon cycles through the primitive types

colour

segments can be assigned their own colour if the inherit button is off.
Otherwise they inherit the colour of the agent. See colour.

Segment Shape Tab


Describes the dimensions and placement of the individual segments in segment space (ie local to the segments
origin).

Sphere

radius

specifies the radius of a sphere primitive

translation in x y z

specifies the sphere primitive translation

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/segment_node.html (1 of 6) [13/05/2007 01:37:42]

segment node

Tube & Disc

length

specifies the length of a tube or disc primitive

radius

specifies the radius of a tube or disc primitive

axis

specifies the major axis for a tube primitive

rotation in x y z

specifies the tube or disc primitive rotation

translation in x y z

specifies the tube or disc primitive rotation

Box

x y z dimensions

specifies the box primitive x y & z lengths

translation in x y z

specifies the box primitive translations

Segment Rest Tab


Specifies the initial transformation of the segment in relation to its parent relevant. This is used to determine the rest
pose of the agent, i.e. the pose of the agent when it's degrees of freedom are all set to zero.

x y z rotations

specify the rotations of the segment with respect to it's parent in the rest pose

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/segment_node.html (2 of 6) [13/05/2007 01:37:42]

segment node

x y z translations

specify the translations of the segment with respect to it's parent in the rest pose

Segment DOF Tab


Used to specify the degrees of freedom, i.e. rotations and translations, that exist for the segment and the order in
which they are applied.
The limits only affect dynamics. They have no effect on actions or direct control from the brain.

enable

Toggles on/off which transformations exist for the segment

order

Specifies the order in which transformations are applied (read from left to right)
the arrows are used to swap dof's with their neighbours

limits

Selects the degree of freedom for which to set limits


inf and -inf are valid limits

min

Specifies the minimum value for the degree of freedom

max

Specifies the maximum value for the degree of freedom

i.k.

Specifies the type of I.K. applied to the segment see Inverse Kinematics

normal

Selects the I.K. solver that rotates 2 segments to move the goal segment towards the goal location.
This is useful for limb I.K.

single

Selects the I.K. solver that rotates one segment to move the goal segment towards the goal location.
This is similar to a lookat constraint.

skip

When set, the solver skips this segment and uses the next segment up the hierarchy in determining
the segments for which to solve. For example, if r_toes is used as the I.K. end effector then r_foot
should have skip on set so that the solver applies rotations to r_low_leg and r_up_leg.

Segment Pose Tab


Displays the current values for the degrees of freedom of the segment.
Pose can be used to create specific poses by manually entering values in the parameters or moving segments in the
View Window Pose Mode. This can be useful for testing the effect of poses not covered in a mocap cycle.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/segment_node.html (3 of 6) [13/05/2007 01:37:42]

segment node

x y z rotations

specify the rotations of the segment with respect to segment space.

x y z translations

specify the translations of the segment with respect to segment space.

set bind pose

specifies the current pose as the bind pose

Segment Dynamics Tab


By default, segments inherit the agents dynamics values. Dynamics parameters can be set for individual segments
by switching off the inherit button next to the parameter.
Switching on dynamics for a segment makes the segment and all of it's decendents in the hierarchy dynamic. This
effectively detaches the sub-hierarchy at the segment from it's parent. See dynamics for more details.

drag

specifies the amount of force exerted on the segment as it moves through the atmosphere. This
depends on the size shape and motion of the segment and on the movement of the wind.

density

specifies the density of the segment. Changing the density causes changes in mass

mass

specifies the mass of the segment. Changing the mass causes changes in density

Collisions
Whenever a collision is detected between the segment and something else forces are applied to prevent
interpenetration of the colliding objects. See collisions.
These can be inherited from the agent (toggle inherit on) or set for individual segments.
force

specifies a constant used to determine how much force to apply perpendicular to the collision
surface to prevent interpenetration of the segment

damper

damper reduces the relative velocity of the colliding objects effectively making the collisions involving
the segment less bouncy

friction

specifies the amount of force applied parallel to the collision surface opposing the relative velocity of
the colliding objects

Rotation Limits
Rotations can be constrained to stay within the segment rotation limits. Constraint forces are applied to each

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/segment_node.html (4 of 6) [13/05/2007 01:37:42]

segment node

rotational degree of freedom if the segment has a non-zero rotation spring constant.
force

specifies the amount of force applied to constrain objects moving beyond particular rotational limits

friction

specifies a force opposing rotation of the segments effectively making joints stiffer

lock

stops the sgment from rotating relative to its parent

Segment Bones Tab


Skinning in massive is done using an algorithm called bones. Bones uses ellipsoids to specify the influence that the
segments have on the geometry.

Volume of Influence
Each segment has an inner and an outer ellipsoid representing the segments influence on the geometry.
Adjustments to the ellipsoids can be made by dragging the ellipsoids in the Bones Window or adjusting the
parameters in the Bones Tab for the segment.

scale bar

scales the size of the outer limit of the bones volume of influence in x y & z simultaneously

x y z scale

scales the inner limit of the bones area of influence individually in x y & z

x y z rotations

specify the rotations of the ellipsoids in x y & z

x y z translations

specify the translations of the ellipsoids in x y & z

delete

removes the ellipsoids for the segment

initialize

adds new ellipsoids for the segment


there is currently a maximum of one set per segment
clicking on this button when the ellipsoids exist will initialize the values

Segment Vary Tab


Assigns agent variables to scale and thickness parameters of the segment.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/segment_node.html (5 of 6) [13/05/2007 01:37:42]

segment node

scale

specifies a variable to affect the overall scale of the agent

thick

specifies a variable to affect the thickness of the segment

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/segment_node.html (6 of 6) [13/05/2007 01:37:42]

spring node

SPRINGS

Springs, based on Hookes Law springs, can be connected between segments of an agent. At least one of the
connected segments must have dynamics active for a spring to have any effect.
The spring force is a restoring force, i.e. the force is applied to return the spring to its original rest length.
The stiffness of the spring is controlled by the spring constant. The appropriate value could be anywhere from around
1 to tens of thousands. It's best to start with something like 100 and experiment.
Damper reduces the rate of change of the length of the spring, effectively making the spring less bouncy. Zero is
maximum bouncyness. A good starting point is about 10% of the spring constant.
Collisions can occur between a spring and one or more segments, but not between springs. By default collisions is
switched on for a spring.
There are 5 types of springs in Massive:

normal

This is a standard Hooke's law spring. It resists any change to it's rest length.

stretch

Similar to the normal spring but it only resists stretching.

squash

Similar to the normal spring but it only resists squashing.

pin

This is a constraint rather than a spring. This constraint tries to keep both ends together. Any number
of these can be attached to a segment.

attach

This is also a constraint rather than a spring. This constraint can be used to attach a dynamics
segment to it's non-dynamics parent. The reason for this seemingly nonsensicle constraint is that a
segment with dynamics active moves independently of it's parent if the parent does not have
dynamics active.

SPRING ATTRIBUTES
name text field

specifies the name of the spring

Normal / Stretch / Squash

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/spring_node.html (1 of 3) [13/05/2007 01:37:44]

spring node

spring

specifies the amount of force applied to the spring

damper

specifies the amount of dampening force applied to the spring

rest length scale

specifies the ratio used to scale the target length of the spring relative to the original rest
length. The default length of the spring is determined from the rest pose. Typical values
would be between 0.1 and 2.0, with 1.0 having no effect.

collision radius

specifies the thickness of the spring for the purpose of collisions with segments

Pin
Pin springs only have a translate parameter. This specifies the maximum force to be used to keep the ends of the
spring together.
Any number of these can be attached to a segment.

translate force

specifies the amount of force applied to keep the attachment point of segment A
coincident with the attachment point of segment B. Typical values are between 1000 and
10000.

Parent
Parent Springs attempt to keep the attached segment at it's rest position in relation to it's parent. When applying rigid
body dynamics to a segment rather than the entire agent the segment is effectively disconnected from its parent (see
dynamics). A segment cannot have more than one Parent constraint.

translation force

specifies the amount of force applied to maintain the segments location relative to the
parent. Typical values are between 1000 and 10000.

x y z rotation force

specifies the amount of force applied to maintain the segments orientation relative to the
parent

friction

specifies the amount of force applied to resist change in the orientation of the parent

Attaching Springs
x y z co-ordinates

specify the location of the attachment points of the spring to the segment in segment
space.

SELECTING SPRINGS
The current functions of the mouse buttons are displayed as a message in the lower left corner of the main window.
Springs can be selected by shift-left clicking on a spring in the view window or by clicking on it in the icon window. To
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/spring_node.html (2 of 3) [13/05/2007 01:37:44]

spring node

pick or drag springs in the view window the icon window must be in the body page and a spring must be currently
selected.
To add to a selection use shift-middle click and to subtract from a selection use alt-shift-middle click.
In the view window a lassoo selection can be made by shift-dragging from somewhere away from any springs and
dragging around the springs to be selected. It is not necessary to draw a completely closed shape.
Lassoo selection can also be used to add to or subtract from the selection with the shift-middle mouse and alt-shiftmiddle mouse combinations. Any changes made to the current spring are applied to all selected springs.
To alter a spring's attachments shift drag the ends of the spring in the view window. The ends of the spring will always
move along the surface of the segment under the mouse. Spring ends can be dragged across empty space between
segments.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/spring_node.html (3 of 3) [13/05/2007 01:37:44]

cloth node

CLOTH

Cloth geometry can be read from a Wavefront .obj file, or specified as a rectangular triangle mesh. It can be attached
to segments with bones skinning. Any parts of the cloth that are not attached to segments become dynamic.

CLOTH ATTRIBUTES

name text field

specifies the name of the cloth

Cloth Shape Tab


Determines the geometry of the cloth. Polygonal Wavefron .obj files can be read as the cloth geometry. Cloth works
best when made from triangles but there are no limitiations to the structure of the cloth geometry.

grid

toggle on to create cloth within Massive using a grid

x y resolution

specifies the density of the grid

x y size

specifies the dimensions of the grid

file

filename specifying .obj file to use as the cloth

Cloth Rest Tab


Adjusts the starting pose for the cloth relative to world space.
Cloth is attached to objects by the areas of influence of bones skinning. Any part of cloth within an ellipsoid is
attached to the segment and is not included in the cloth simulation.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cloth_node.html (1 of 2) [13/05/2007 01:37:46]

cloth node

x y z rotation

specifies the initial cloth rotation with respect to world space

x y z translation

specifies the initial cloth translation with respect to world space

x y z scale

specifies the initial cloth scale with respect to world space

Cloth Dynamics Tab


The cloth solver uses the stretch resistance force value to determine how much force to apply to maintain the lengths
of cloth edges.
Cloth can collide with segments and terrain. Collision with polygonal geometry are not yet supported.

Stretch Resistance
force

specifies the amount of force used to maintain the cloth's shape.


Affects the apparent softness/stiffness of the cloth.

Collision
force

specifies the amt of force applied in collisions with other objects

thickness

specifies the thickness of the cloth for the purpose of collisions with other objects

terrain

toggle on for cloth to collide with the terrain

skeleton

toggle on for cloth to collide with the any skeletons in the scene

geometry

toggle on for cloth to collide with the agent's polygonal geometry not currently supported

Steps
steps

specifies the no. of iterations of the cloth simulation per second

drag

specifies the amount of force exerted on the cloth as it moves through space

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cloth_node.html (2 of 2) [13/05/2007 01:37:46]

Massive Manual: Geometry Node

GEOMETRY

Geometry is polygonal geometry read from Wavefront .obj files. It can be attached to segments either rigidly or with
bones skinning.
Massive does not save the geometry with the agent. The agent cdl file just contains a link to the .obj file.
Multiple geometry nodes can be connected to an option node to facilitate switching of geometry for agent variation.
There is some support for subdivision surfaces. They are displayed as a polygonal control hull except in RenderMan
renders (currently broken).

ATTACHING GEOMETRY
To rigidly attach geometry to a segment attach the geometry node to one segment node.
To skin geometry to all segments attach the geometry node to no segments.
To skin geometry to selected segments attach the geometry node to the required segments.
Geometry nodes that are connected to option nodes use the option node's connections to segments to determine
attachment.

GEOMETRY NODE ATTRIBUTES

name text field

specifies the geometry node name

file

filename specifying an .obj file to use as the geometry

smooth

options to shade geometry as smooth, faceted, constant, or wireframe

flip normals

specifies which directions normals will face once imported

Geometry - rest
Specifies the initial transformation of the Geometry.
Rigidly attached geometry is transformed relative to the segment it is attached to.
Skinned geometry is transformed relative to world space.
Any number or transforms can be added to a geometry node. Each one can be a scale, a rotate or a translate
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/geometry_node.html (1 of 3) [13/05/2007 01:37:49]

Massive Manual: Geometry Node

transform. The order of transforms can be edited with the arrows in the transform list. The order of rotation for a
rotate transform can be selected from an option menu.
Each of the three components of a transform can be controlled by agent variables.

add

adds a new translation, scale or rotation - defaults to translation

delete

deletes an existing translation, scale or rotation

transformation

specifies highlighted item in transform list as one of translation, scale or rotation

xyz

specifies rotation order for rotation transformations

variable pop up lists

assign a specific agent variable to x y or z transformations thereby allowing placement of


geometry to vary along with specified variables

world space

This button is used to attach the geometry to a segment while maintaining the world
space location and orientation of the geometry.
Rotate and translate transforms are automatically generated.
This is useful when attaching geometry that was modelled in world space in reference to
the skeleton.

Geometry - Blend
Allows addition of blend shapes to a geometry node.
Blend shape targets must be an .obj mesh with the same number of vertices in the same numbered vertex order as
the original geometry.
One geometry node can have multiple blend shape targets, which can be activated separately or in combination.
Blend shapes can be activated in the brain by creating an output node with the channel [name of geo node]:[name of
blend shape], such as face:smile.

add

adds a new blend shape

delete

deletes a blend shape

name

name of blend shape

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/geometry_node.html (2 of 3) [13/05/2007 01:37:49]

Massive Manual: Geometry Node

type

type of blend - with linear, the vertices take a linear path between targets, while with
radial, vertices take a radial path about the centre specified by centre.

file

.obj file containing the mesh used as a blend shape.

centre

centre used if blend is a radial type.

active

controls level of blend from 0 (inactive) to 1 (100% active).

Geometry - Weights
The weights tab allows a weight file of Massive vertex weight format (.w) to be imported or exported. Vertex weights
can be imported from any outside program (such as Maya) if a script is made to write them out from that program in
Massive's weight format. For more information on a Massive weight file, see the appendix on Massive weight files.

Save weights allows you to save the current weighting scheme to a .w file.
File allows you to choose a weight file to import.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/geometry_node.html (3 of 3) [13/05/2007 01:37:49]

option node

OPTION NODE

The Option node allows a choice of geometry to be used according to a specified variable by switching or blending
between different geometry. It works with geometry and cloth nodes.
If the attached geometry has the same number of points and polygons and the option value is non-integer then a
blend occurs (not currently implemented). Options are attached to segments in the same way that geometry is
attached to segments. Geometry that is connected to an option is connected to segments via the option node rather
than directly.

name text field

specifies the name of the option

manual

used to allow direct control of the option node by overriding the variable with the slider

variable

assigns an agent variable used in determining which geometry is selected.

inputs list

list of possible geometry choices available


the arrow buttons are used to change the order of the inputs

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/option_node.html (1 of 2) [13/05/2007 01:37:50]

option node

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/option_node.html (2 of 2) [13/05/2007 01:37:50]

material node

MATERIAL NODE

Material nodes are for assigning shaders & textures to connected geometry nodes. They control the appearance of
geometry and cloth in OpenGL renders and RenderMan renders.
The ambient, diffuse, specular & environment parameters affect the OpenGL shading. Set specific values for hue,
saturation and value or use the variable pop-up lists to assign agent variables to affect hue, saturation & value.
Texture maps and environment maps can be referenced using the file browsers under the diffuse tab and environment
tab. Environment mapping is not currently implemented.

MATERIAL ATTRIBUTES

nametext field

specifies the name of the material

Material Ambient Tab

colour swatch

displays current ambient colour in hue, saturation & value

specifies ambient hue

specifies ambient saturation

specifies ambient value

variables

assigns agent variables to ambient hue, saturation & value

Material Diffuse Tab

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/material_node.html (1 of 4) [13/05/2007 01:37:54]

material node

colour swatch

displays current diffuse colour in hue saturation & value

specifies diffuse hue

specifies diffuse saturation

specifies diffuse value

variables

assigns agent variables to diffuse hue saturation & value

texture map

filename specifying an .tif file to reference as the texture map

rbga buttons

not currently supported

Material Specular Tab

colour swatch

displays current specular colour in hue saturation & value

specifies specular hue

specifies specular saturation

specifies specular value

variables

assigns agent variables to specular hue saturation & value

Material RenderMan Tab


Surface, displacement, shadow surface, and displacement surface bring up a dialog box (see below) to edit the
RenderMan shader parameters. The shader path is searched for shaders and dialog parameters are created for all
found shaders.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/material_node.html (2 of 4) [13/05/2007 01:37:54]

material node

surface

allows editing of the beauty pass surface shader

displacement

allows editing of the beauty pass displacement shader

shadow surf

allows editing of the shadow pass surface shader

shadow displ

allows editing of the shadow pass displacement shader

displacement bounds
matte object

specifies displacement bounds for the surface


specifies matte object option for RenderMan

The Shader Dialog


Clicking on any of the four shader buttons in the RenderMan tab will bring up a dialog allowing you to choose a shader
from your shader path. Be sure the shader path is specified correctly and the correct renderer is selected from the
Render Options window.

Shader parameters can be selected and edited through the menu or by typing them manually in the text box at the
top.
References to texture map files can be made through the browse dialog or by typing in the path and filename
manually. These can be relative or absolute path names. Massive recognizes texture map files by the .tif, .tiff, or .tex
extensions and will be able to interpret them as relative paths.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/material_node.html (3 of 4) [13/05/2007 01:37:54]

material node

Shader parameters with numeric values can be set in the dialog or assigned an agent variable. Above, assigning the
variable "rough" to the shader parameter "roughness" allows different instances of this agent to be rendered with
varying degrees of roughness.
Additionally, agent variables can be used in filenames and should be enclosed in single quotes. For example, if
shirtMap is an agent variable with a range of 1 to 4:
shirt'shirtMap'.tif
would result in instanced agents with four varying shirt textures ranging from shirt1.tif to shirt4.tif.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/material_node.html (4 of 4) [13/05/2007 01:37:54]

Brain Page

BRAIN PAGE

The brain page is used for editing an agent's brain. The brain for the current agent (the agent whose name appears at
the top of the window) is displayed.
If the current agent is an instance agent then editing actually modifies the template agent that the current agent is
made from. All instances of this template agent are also modified.

Node work area

This is where the fuzzy logic network is displayed as


nodes. Nodes can be connected by holding down the
ctrl key and clicking on the `from' and then the `to' node.
Alternative (alt) connections which are black instead of
white.
The status of the connection/disconnection operation is
visible as a message in the lower left corner.
A context sensitive mouse help message is visible in the
lower left corner of the icons work area.

Working with brain nodes

connect nodes

ctrl-click on the 'from' node then the 'to' node

alt connect nodes

alt-click on the 'from' node then the 'to' node

disconnect nodes

ctrl-alt-click on the 'from' node then the 'to' node

select a node

left-click

multiple select nodes

left-drag in the icon window over the area to box select icons

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/brain_page.html (1 of 3) [13/05/2007 01:37:56]

Brain Page

add to a selection

shift-left-click

select inputs, outputs

shift-alt-left-click to add a node's inputs to the selection


shift-alt-middle-click to add inputs and outputs to the selection
shift-alt-right-click to add a node's outputs to the selectio

delete selected nodes

[delete] key

copy selected nodes

alt-C

paste nodes

alt-V

zoom

right-drag

scroll

middle-drag or use the scroll bars.

frame all nodes

ctrl-a

frame selected nodes

ctrl-s

Notes:

To cycle through the agents hit alt-O and shift-alt-O to cycle back. While the view window is in wireframe mode
the currently selected object will be displayed more brightly.
Alt-connections appear in black and represent a fuzzy logic NOT when appearing as an input to an AND or OR
node. When connected to other nodes, they may have specialized functions.

Macros
Macros are a way of organizing a complex brain by grouping associated nodes together into modules. To create a
macro, select the group of nodes you wish to make into a macro and hit alt-g.
Below is a list of macro-related commands.
enter a macro node

[enter] key

exit a macro

[backspace] key

collapse selected nodes into a macro

alt-G

expand a macro

shift-alt-G

externalize a node

alt-X

Externalizing a node means to make a node inside a macro node accessible for connection on the macro node 's
icon. Alt-X toggles this property on and off. External nodes appear lighter than other nodes when inside the macro
node.
The layout of external nodes on the macro depends on the layout type chosen in the menu as well as their relative
position within the macro. When Fuzzy -> macro column layout is selected in the main menu, each external node
will appear on either the right or left side of the macro, depending on which side they are closer to within the macro.
When the option is unselected, Massive will arrange the nodes around the edge of the macro, depending on their
relative position within the macro.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/brain_page.html (2 of 3) [13/05/2007 01:37:56]

Brain Page

Node edit area


This is where nodes are renamed and their parameters are
edited. The parameters available for each icon depend on
the node's type (see fuzzy logic in massive ), but
generally include buttons, sliders and text strings. To edit
a text field or a number field, click on the field, type and hit
enter. Most sliders can be edited by the user but some are
display only.

New node bar

This is the column of icons down the left side of the icons
window. To create a new brain node, drag one out of
the `new node bar' onto the node work area. The new
node can be edited and connected with the rest of the
network.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/brain_page.html (3 of 3) [13/05/2007 01:37:56]

input node

INPUT NODE

An input node gets a floating point value from the simulation. If the source string is empty then the slider on the left
can be used to set the current value. The source string can contain expressions, references to channels and
references to variables.
eg:
head:ry
time
head:ry + neck:ry
The name of the input node can be any string. It is set by default to whatever channel is entered into the source field,
but can be changed at any time.

The pos/speed buttons select whether the actual value or the current rate of change of the value is returned. This
only works for certain channels at the moment.
The range fields are user editable and determine the minimum and maximum values for the slider bar and the input
range of any attached fuzz nodes.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/input_node.html (1 of 2) [13/05/2007 01:37:58]

input node

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/input_node.html (2 of 2) [13/05/2007 01:37:58]

timer node

TIMER NODE

Timer nodes can be thought of as a special kind of input. They provide a value that varies over time. Fuzz nodes can
be attached to provide fuzzy time values. For example such a fuzz node could be used in a walk cycle where `raise
left' is a fuzzy time value.
Timers start their cycle if the input to the timer is greater than 0.5, or if it has no input. Once started the timer will
increase its output value at every increment by the rate amount until it reaches the range value. The range value
defaults to 1.0 but can be set to any positive number.
The endless button is used to prevent the timer from wrapping at the range value.
Timers have two trigger modes: `if stopped' and `always'. `if stopped' means that the timer will only restart if it has
finished its cycle. This is good for cyclic events such as walk cycles. `always' means that the timer is constantly at the
start while the input is greater than the threshold. Then when the input drops below the threshold the timer will
continue its cycle. This is good for creating a delay signal. For example delay signals might be used to determine if a
left or a right turn was taken recently.
The rate of the timer can be set by dragging the rate slider. If the timer has an alt input (see node window) then the
rate is controlled by the output value of the connected node and dragging the slider will have no effect. Rate values
are in units per second, so timers are reasonably invariant under different frame rates.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/timer_node.html (1 of 2) [13/05/2007 01:38:00]

timer node

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/timer_node.html (2 of 2) [13/05/2007 01:38:00]

noise node

NOISE NODE

Noise nodes are another special kind of input node. They provide a unique pseudo random value that is usually
between 0 and 1 and is centered on 0.5. The output value of a noise node can vary monotonicaly over time. The rate
slider controls the frequency of the variation.
The manual button is used to make the output value directly editable by the user.
The rate value can be controlled by an input to the node.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/noise_node.html (1 of 2) [13/05/2007 01:38:02]

noise node

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/noise_node.html (2 of 2) [13/05/2007 01:38:02]

fuzz node

FUZZ NODE

The fuzz nodes convert input values into fuzzy values. A membership function is applied to the input value to
determine the output value of the fuzz node. The range of input values is set in the input node.
The four standard membership functions are available as well as a singleton function. These are selected from the
buttons in the lower right of the edit area.
The graph on the right of the edit area displays the membership function in red. Other membership functions for the
same input are displayed in a darker red. If graph selected is on then all other selected fuzz nodes will be display in
dark red instead of those sharing the same input.
Drag the control points to edit a membership function. The x value of the currently edited point is displayed in the
number field in the lower right. Use the middle mouse button to drag an entire membership function. The right and left
arrow keys select the point to edit. The up and down arrow keys switch to other fuzz nodes with the same input.
A blue line represents the current input value and the current output value is displayed in the slider bar and it's number
field.
The "linear" button selects linear membership functions. The default is cosine or smooth membership functions.
The "wrap" button causes the membership function to wrap beyond the input range. This is useful for input data that
wraps at the minimum and maximum range values.
An alt (black) input connection defines the x-value of one of the points on the fuzzy membership curve. Each
successive connection defines the subsequent point. A bell-curve (lambda) membership curve would need three
incoming alt connections to define all three of its points. This allows the user to dynamically define fuzzy membership
curves and is an alternative to statically placing the points, as is usual.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/fuzz_node.html (1 of 2) [13/05/2007 01:38:04]

fuzz node

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/fuzz_node.html (2 of 2) [13/05/2007 01:38:04]

and node

AND NODE

The AND node implements fuzzy AND logic. AND and OR nodes are called rule nodes because are used to make
fuzzy rules. The degree to which the rule is true is determined from the combination of the node's inputs using either
the min or the prod function. The min function takes the minimum input value as the output value. The prod function
multiplies the inputs together to determine the output value.
The final output value is scaled by the weight. This allows the user to control the strength of the effect that the rule
has. Negative weights are allowable and can be used to create inhibitory controls.

Fuzzy NAND (negative AND) is also possible with the AND node. This is acheived by making an alt connection to the
node (see brain page for alt connections). Alt inputs are inverted (subtracted from 1) before being combined in the
rule, thereby implementing NAND. For example this could be used to create a rule that means:

if slow AND not heavy then ...

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/and_node.html (1 of 2) [13/05/2007 01:38:05]

and node

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/and_node.html (2 of 2) [13/05/2007 01:38:05]

or node

OR NODE

The OR node implements fuzzy OR logic. AND and OR nodes are called rule nodes because they are used to make
fuzzy rules. The degree to which the rule is true is determined from the combination of the node's inputs using either
the max or the sum function. The max function takes the maximum input value as the output value. The sum function
adds the inputs together and limits the sum to 1 to determine the output value.
The final output value is scaled by the weight. This allows the user to control the strength of the effect that the rule
has. Negative weights are allowable and can be used to create inhibitory controls.

Fuzzy NOR (negative OR) is also possible with the OR node. This can be acheived by making an alt connection to
the node (see brain page for alt connections). Alt inputs are inverted (subtracted from 1) before being combined in
the rule, thereby implementing NOR. For example this could be used to create a rule that means:

if slow OR not heavy then ...

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/or_node.html (1 of 2) [13/05/2007 01:38:07]

or node

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/or_node.html (2 of 2) [13/05/2007 01:38:07]

defuzz node

DEFUZZ NODE

Defuzz nodes usually connect between rule nodes and output nodes. The defuzz value (set by the user) is used by
the output node to determine the `crisp' output value (see fuzzy logic and output node).
The degree to which the defuzz value is being inferred is called the weight. This is displayed in the upper slider bar
and number field (not user editable).
The defuzzification method is set in the output node.
In fuzzy logic theory this type of defuzz value would be called a singleton value. Normally defuzz values could also
cover a range of real numbers, however this functionality is not currently available in Massive fuzzy logic.
Fuzzy else can be implemented by switching on the else button. The weight of an else defuzz node is automatically
set to 1 - max, where max is the maximum weight of any other defuzz attached to the same output node. This is
handy for default values (eg. hand position at side). Fuzzy else provides a way of under-specifying rules whilst
maintaining stability although it is not generally recommended in orthodox fuzzy logic theory.
An incoming alt (black) input into the defuzz node sets the defuzz value to the value of the input, overriding the one
specified by the user. The weight is still set by the normal incoming input.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/defuzz_node.html (1 of 2) [13/05/2007 01:38:09]

defuzz node

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/defuzz_node.html (2 of 2) [13/05/2007 01:38:09]

output node

OUTPUT NODE

Output nodes are normally used to affect the agent by assigning a value to a channel. The channel is specified by the
channel string (see channels). Here are some examples of channels that are useful in output nodes:

head:ry

Sets the angle of the x rotation of the segment named "head".

[head:ry]:offset

Offsets the values set by actions for the angle of the x rotation of the
segment named "head".

r_hand:ik.y

Sets the r_hand segment's IK end effector Y coordinate.

ry

Sets the rate of ry applied to the agent on every frame.

[ry]:scale

Scales the values set by actions for the rate of ry for the agent.

walk

A value of 1 triggers the action named "walk"

walk->sidestep

Blends the action "sidestep" over the action "walk"

dynamics.active

Activates rigid body dynamics for the agent.

Translation and rotation channels can be used for the agent or it's segments, ik channels only apply to segments.
Translations and rotations are different for agents and their segments. Segments use the value according to the pos/
speed buttons. Agents apply the values in object space (local to the agent) generating movement in much the same
way as logo turtle graphics. This means that agent channels are effectively rates of change which are applied relative
to the position at the previous frame.
The name of the output node can be any string. It is set by default to whatever channel is entered into the channel
field, but can be changed at any time.

The pos speed and accel buttons are used to determine how to apply the output value to the chosen channel.
pos - set the absolute value.
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/output_node.html (1 of 2) [13/05/2007 01:38:11]

output node

speed - set velocity of channel.

Outputs can also affect brain variables. The user can put any name into the channel string as long as the name does
not conflict with existing channel names. The value of this variable will then be available to be referenced in input
nodes.
The defuzzification method ("defuzz") is selected with the average and max buttons (see defuzz node). Average
results in the output node taking the weighted average of all the incoming defuzz nodes. Max only takes input from the
defuzz node with the highest activation value.
It is possible to connect an input directly into an output in which case the defuzz function has no effect.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/output_node.html (2 of 2) [13/05/2007 01:38:11]

Motion Page

MOTION PAGE

Overview
The Motion Page is used to design the motions of an agent in the form of one or more motion trees. This tree is part
of the agent and when triggered from the brain, causes the agent to transition from action to action in a logical and
easily controllable manner. The motion page also generates a motion capture session Take List from the motion tree.

For the majority of agents, only one motion tree is needed. However, some agents may run actions on separate
tracks, such as a horse-and-rider agent. Massive allows the user to create more than one tree per agent and assign
each tree to its own track.
To add a new tree, choose the track you wish to create the tree for (from the eight numbered track buttons on the
lower left side of the screen) and click the add button. To delete a tree, select the track you want to delete the tree
from and click the delete button.
To go between trees, click the numbered button corresponding to the track whose tree you want to view.
To turn off the tree, turn off the active trees button at the bottom.
The tree default action for the current tree is listed at the bottom of the motion page.

The tree default action can be assigned by selecting the action node you wish to make the default and clicking the
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (1 of 9) [13/05/2007 01:38:19]

Motion Page

default button beside the name field. This is the action which the agent will run at the beginning of the simulation and
will continue to run if no other action is triggered.
The agent default actions buttons allow you to select certain actions and associate them with corresponding agent
variables. The default action for each instanced agent will be the action whose corresponding agent variable has the
highest value.
Default actions chosen this way will override the tree default action.
Motion trees are built from transition nodes and actions. These can both be selected from the node area on the left.

Transition Nodes
In the motion page the term node is used to refer to transition nodes.
A transition node is a pose where two actions meet. It is the start of one action and the end of another - the pose
where the agent transitions from one action to another.

name text field

specifies name of the transition node

colour swatches

sets colour of the transition node

entries

highlighted letters indicate directions entering the transition node

Actions
An action is the motion that takes the agent from one transition pose to another. It is an actual motion that will be
motion captured or keyframed and imported into Massive.
Actions with the same name are automatically numbered incrementally.

name text field

specifies name of action

default

specifies this action as the default

comment text field

specifies comments regarding the action. These can be displayed in the action nodes in the
Work Area by toggling comments in the Tree menu. These will also appear in the action list
and take list.

dir

specifies the direction of the action

entries

highlighted letters indicate entries corresponding to the directions of the preceding actions

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (2 of 9) [13/05/2007 01:38:19]

Motion Page

omit

specifies the entries to omit for the action

triggers

assign a trigger to an action

modifiers

assign a modifier to an action

latch

assign a latch to an action

blends

assign a blend to an action

outputs

assign an output to an action

Activating Actions
In order to activate and control actions through the tree, actions need to be assigned varying combinations of triggers,
modifiers, latches, and blend activators.
Activating a trigger output node in the brain causes the motion tree to select one of the actions associated with that
trigger.
Activating a modifier output node further qualifies that selection.
Activating a latch output node qualifies the selection as well by specifying which latch of the previous action to
activate on, if the previous action has multiple latches.
Thus, the motion tree selects an action according to the particular combination of triggers, modifiers and latches.
Additionally, the motion tree can activate blend actions according to the degree that their associated blend activator
output nodes are set to.

Triggers
The Trigger Dialog Box from the Tree menu is used to define triggers.

Click add to add a new trigger and then type the name of the new trigger into the text field at the top of the window.
Click delete to delete the selected trigger.
These triggers can then be assigned to specific actions using the triggers pop-up list in the actions parameters.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (3 of 9) [13/05/2007 01:38:19]

Motion Page

Examples of triggers could be such things as "walk", "run", "block".


Trigger names cannot contain spaces.

Modifiers
The Modifiers Dialog Box from the Tree menu is used to define modifiers. It works exactly the same as the Trigger
Dialog Box.

These modifiers can then be assigned to specific actions using the modifiers pop-up list in the actions parameters.
Examples of modifiers could be such things as quickly, high, left.
Modifiers are used in conjunction with triggers to activate a greater variety of actions than the trigger alone. For
example, the trigger "block", activated at the same time as the modifier "high", would trigger an action such as
block_high, the same trigger with the modifier "middle" would trigger an action like block_middle, and changing the
modifier to "low" would trigger block_low.
Modifier names cannot contain spaces.

Latches
The Latches Dialog Box from the Tree menu is used to define latches. It is different from the other tree dialog boxes
in that in addition to defining a name for the new latch, you must also define a range in which the latch is active.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (4 of 9) [13/05/2007 01:38:19]

Motion Page

When a new latch is added, a graph will appear, displaying the latch curve of the currently selected action. Some
actions, such as "walk", may have multiple latch lows representing different phases of the action where it is possible to
exit the action and begin a new one.
You can define and label these regions in the Latches Dialog by adjusting the blue area to correspond to the phase of
the action to be associated with this latch. This area is adjusted by left-mouse-dragging either of the edges, or middlemouse-dragging the entire area.
Associating a latch, such as "rightfoot", with an action, such as "walk_to_standR", allows the user to specify that the
action is only to activate in the case that the previous action (walk) is in the "rightfoot" defined phase of the action.

Blends
The motion blending engine in Massive handles the transition of one action to another to produce an agent's motion.
It is also capable of blending an action over another action to alter the agent's motion.
The motion tree controls the activation of these 'blend' actions. The blends are represented in the motion tree as
actions which connect (one-way) to other actions rather than between transition nodes. To allow for high level control
of blends in the brain, blend activator names are assigned to the blend action nodes in much the same way as triggers
are assigned to action nodes.

Blend activator names are defined using the Blends Dialog Box from the Tree Menu, a dialog that works similarly to
the trigger and modifier dialog boxes. Blend names cannot contain spaces.
These blend activators can then be assigned to specific actions using the blends pop-up list in the actions parameters.
An example of a Blend would be 'up' for uphill motion. Uphill motion is often captured for the purpose of terrain
adaptation, whereby uphill and downhill actions are blended over 'on-the-flat' actions to varying degrees. In this case
there might be several such uphill actions such as walk_up to blend over walk and march_up to blend over march.
The blend name 'up' would be assigned to each of the uphill actions so that one output node can be used to control
all such blends.

Outputs
Output names are created in the same way as triggers, modifiers, and blend activators.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (5 of 9) [13/05/2007 01:38:19]

Motion Page

Outputs provide information to the agent's brain concerning which actions are active. For example, the actions "walk",
"run", and "march" might all be associated with a single output called "locomotion", which can indicate to the agent's
brain whether the agent is moving or not.
Outputs do not affect the decision made by the motion tree, but rather are used to indicate the current state of the
agent's actions to the rest of the brain.
To access a motion tree output in the brain, create an input node with the output name listed in the source box.
Output names should not contain spaces.

Entries & Directions


direction

the direction specifies the overall inertia of an action, especially towards the end of the action

entry

entries correspond to the directions of the preceding actions

Entries and directions are generally used to specify the momentum (or weight) of an agent coming into an action.
Depending on the different types of momentum coming into an action, there may need to be one or more variations of
that action to result in realistic transitions.
When the types of possible "weights" for each action are specified using entries and directions, the number of
variations of each action needed is calculated by Massive and listed in the take list or action list.
A quick example based on a swordfighting agent:
Suppose you have a "ready" pose. Connected to this ready pose are looped actions "ready", "lunge_forward", and
"dodge_right". (not the most efficient names, but just here for description's sake).
If you think about it, you may want to capture two "lunge_forward" actions, depending on the momentum of the action
that came before. For example, if the previous action was another "lunge_forward", this current "lunge_forward" would
have a certain forward momentum to begin with, whereas if the previous action was "dodge_right", this current
"lunge_forward" action would begin with a rightward momentum and require a subtle correction by the swordsman as
he goes into a forward lunge.
In this case, you would assign different directions to each action, such as "a" (forward) to "lunge_forward" and
"ready" and "b" (right) to "dodge_right". (This is done by toggling the associated letter under dir in the action's
parameters.) Upon doing so, you will notice that "lunge_forward" now has two incoming entries, "a" and "b", as do the
other two actions.
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (6 of 9) [13/05/2007 01:38:19]

Motion Page

If you made a take list from this tree, it would consist of 6 actions to capture, two variants of each action with
incoming rightward or forward momentum.
Suppose you decided the action "ready" is really generic enough that it doesn't require different forward and rightward
variants. You could click on "b" next to "omit" in the "ready" action node, and now "ready" will come out as a single
action to capture in the take list. Omitting entries can greatly reduce the number of motions generated by the Take
List.

The Entry Dialog Box from the Tree Menu is used to assign directions to letters.
Enter the name of the direction to be associated with each letter in the text edit
box beside it.

Motion Trees In Action


Massive motion trees graphically depict the action choices within the selected agent as the simulation runs.

The currently running action, as well as the next action selected for activation, appear with their names in red.
The arrow associated with the currently running action appears in yellow, and a moving yellow dot along the arrow
depicts the progress of the action.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (7 of 9) [13/05/2007 01:38:19]

Motion Page

Active blend actions appear highlighted in yellow. The intensity of the highlighting corresponds to the degree of
activation of the blend.

Motion Tree Brain Module


Make Brain Module under the Tree Menu generates a brain module for the Motion Tree which can then be pasted into
the agent's brain. This module is a more manual way of doing the same task as the tree itself, and may be an option
for those wishing to further customize the way actions are chosen by the agent. It is suggested that this be used only
by advanced Massive users who have a specific use for bypassing the tree.
If this option is chosen, make sure to turn off the active trees option, as the tree and the brain module will conflict with
each other.

Take Lists
A Take List is a list of motion needed to be captured to realize the Motion Tree.
Motion Planner generates this list automatically by analysing the entries of actions and calculating all the variations of
motion needed for each Action.
The order of actions is optimized for efficiency of the capture session.
Save take list under the Tree Menu creates an ascii file including the action number (a unique identifier for each
action), action name, entry type, the 'from' transition pose, action comments and the 'to' transition pose.
The Take List also includes room for take information and comments to be noted during the capture session.
ACTION
ENTRY
FROM COMMENT TO
_________________________________________________________________________________
3 | march_lower_pike | static | march_raised || march_lowered |
--------------------------------------------------------------------------------Take:
Notes:
_________________________________________________________________________________
1 | march_raised
| static | march_raised | much variation | march_raised |
--------------------------------------------------------------------------------Take:
Notes:
_________________________________________________________________________________

Action Lists
An action list is a summarized version of the take list in numeric order.
Save Action List under the Tree Menu creates an ascii file list including the action number, action name, entry type,

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (8 of 9) [13/05/2007 01:38:19]

Motion Page

transition pose 'from' and 'to'.


_____________________________________________________________________________________
name
entry
from
to
comments
_____________________________________________________________________________________
|
|
|
|
|
|
| 1a | march_raised_start | static | stand_raised | march_raised |
| 1b | march_raised_start | forward | stand_raised | march_raised |
|
|
|
|
|
|
| 2
| march_lower_pike
| static | march_raised | march_lowered |
|
|
|
|
|
|
| 3
| march_lowered
| static | march_lowered | march_lowered | much variation
|
|
|
|
|
|
| 4
| march_lowered_45L | static | march_lowered | march_lowered |
|
|
|
|
|
|
| 5
| march_lowered_45R | static | march_lowered | march_lowered |
|
|
|
|
|
|
| 6
| march_lowered_start| static | stand_lowered | march_lowered |
|
|
|
|
|
|
| 7
| march_lowered_stop | static | march_lowered | stand_lowered |
|
|
|
|
|
|
| 8
| march_Raised
| static | march_raised | march_raised | much variation
|
|
|
|
|
|
|_____|____________________|_________|_______________|_______________|_______________

Sequencer List
The sequencer list option under the Tree Menu will generate a random list for the sequencer based on the tree. For
more details, see the sequencer page.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_page.html (9 of 9) [13/05/2007 01:38:19]

Actions

ACTIONS

Motion capture and keyframe animation can be imported as actions. An action consists of any number of curves which
affect an agent's degrees of freedom. Actions are processed by the motion blending engine under the control of the an
agent's brain to provide smooth transitions, layered blends, and multiple independent tracks of motion. Actions can be
edited in the action editor .

TRIGGERING ACTIONS
Actions are triggered when an output node containing just the action name in it's channel string goes high (above .5).
eg:
walk

There are two special curves in an action that are used for controling the triggering and transitions of actions. The first
is the transition curve which determines the fading in of the triggered action and the fading out of the previous action.
A typical transition curve will start at 0 and reach 1 within about half a second and stay at 1 for the rest of the action
The second special curve is the latch curve which, when high, prevents the triggering of other actions. The latch curve
is therefore useful for specifying when it's ok to allow a transition to another action. A typical latch curve is 1 for most
of the action and 0 for a few frames about half a second from the end. For an agent that constantly tries to trigger the
most appropriate action for the current context, these curves are all that is required to ensure smooth and sensible
transitions between actions.
Setting a trigger value greater than 1 will override the action latch. In this way actions can be forced to occur
immediately.
When an action is triggered, the action data itself remains unaffected but a "playback" is started locally for the agent. It
is possible to have mutiple playbacks for any one action, so an action can transition into itself if required. To see all of
the playbacks for an agent, select the Playbacks item in the View menu.
There are 2 flags that also affect playback of actions; the "one shot" flag and the "no retrigger" flag.
If the one shot flag is set then the action will not loop when played. This should be on for non-cyclic actions to avoid
possible jumps in the motion while transitioning to another action.
If the no retrigger flag is set then only one playback of the action can be active for an agent at a time. This prevents an
action from transitioning to itself and from playing multiple times concurrently. This flag should be on for most cyclic
actions.

MODIFYING PLAYBACK
An output node containing action_name :rate will affect the playback rate of the action for the agent. Wildcards can
be used for action names. eg:
walk:rate
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/actions.html (1 of 3) [13/05/2007 01:38:21]

Actions

strike?:rate
*:rate
A value of 1 maintains the original rate and a value of .5 halves the playback rate.
The effect of actions on any particular degree of freedom can be scaled with this output node string: [channel ]:scale
and offset with this output node string: [channel ]:offset . The origin for scaling can be set with this output node
string: [channel]:origin.
eg:
[head:ry]:scale
[head:ry]:offset
[hand:ik.y]:origin
These are evaluated in this order: origin scale offset. So it's possible to scale a channel down to zero
and then apply an offset. In this way the effect of actions can be temporarily overriden for any particular
channels.

BLENDING
Blending is used to mix an action with another action that is already running. For example, an agent may
be walking in a relaxed gait (walk1) and a more aggressive walk cycle (walk2) can be blended to varying
degrees on top of the relaxed walk. Two output nodes would be required to acheive this, containing the
following channel strings:
walk1
walk1 -> walk2 By setting the first output node's output value to 1 the action walk1 is
triggered, and the second output blends walk2 with walk1. When the second output node's
value is 0.5 the motion will be halfway between the two actions, and at 1.0 the motion will
be identical to walk2. When blending, the second action is slaved to the first action so that
they are in sync with each other. Also the rate of the first action is interpolated between
the rates of the two actions. So as the blend value approaches 1.0 the resultant playback
rate approaches that of the second action.
Multiple actions can be blended on top of an action. Rather than averaging the actions,
the blending engine combines the differences between each blend and the base action. In
this way both an uphill walk and a sideways walk could be blended over a base walk
action whilst retaining the full effect of both blended actions.

TRACKS
Each action can be assigned to any one of 8 tracks. By default each action operates on
track 1. By using tracks actions can operate independently of other actions on the same
agent. For example, a horse-and-rider agent (a single skeleton in Massive), could have
horse actions, such as gallop, on track 1 and rider actions, such as sit, draw_bow, or
shoot_arrow, on track 2.
An action should be assigned a track using the control at the top of the action editor.
It should also appear in the proper tree in the motion page - the tree associated with its
track.
When using multiple tracks, keep in mind that each track should control a certain subset
of segments and it is best that these not overlap with another track's segments. So, for
example, all the horse segments in the skeleton (including the root segment) would be
controlled by track 1 actions. The action "gallop" would contain curves for all the segments
in the horse portion of the skeleton, and should not contain any curves for the rider
portion. If any exist, they should be deleted.
Actions on track 2, or the rider's track in this case, should control only rider-related
segments. This means that they will not contain root curves, as those belong to the horse.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/actions.html (2 of 3) [13/05/2007 01:38:21]

Actions

FEEDBACK
The following channel strings can be used in input nodes to get information about the
currently active actions:

action

The degree to which the action is


active.

action:rate

The rate of playback of the action.

action:running

A binary value indicating wether the the


action is playing or not.

action:phase

The phase of the most active playback


of the action.

phase

The phase of the most active playback


on track 1.

phase2

The phase of the most active playback


on track2. The phases of all tracks up
to 8 can be accessed in this way.

latch

The state of the latch for track 1.

Note that action can contain wildcard characters. Below are some examples of input node
strings:
walk
walk:rate
strike?:phase
strike*
phase
phase3

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/actions.html (3 of 3) [13/05/2007 01:38:21]

Action Editor

ACTION EDITOR

The action editor is called from the Edit menu. Each agent can have any number of actions. Actions consist of
curves which affect channels, or degrees of freedom in the agent.
At any time the action can be played and stopped by hitting the space bar, or renamed by entering a new name in the
text field at the top.
The action editor has seven tabs:

actions
curves
edit
loop
agent
IK
transform

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/action_editor.html (1 of 2) [13/05/2007 01:38:23]

Action Editor

track

selects on which of the 8 tracks the action is played

rate

scales the playback rate of actions while in the action editor

solo

disables the agent's brain and enables only the current action

IK

toggles inverse kinematics on and off

The rate variable only affects the playback rate of the action while editing. The default rate, shown above the number
field, is unaffected. See actions for information on affecting playback rates outside the editor.
Actions can start and end playback at points other than the start and end of the action. Two vertical green lines
represent the start and end times. These values are also used as the loop start and loop end for looped actions.
The action editor has infinite undo/redo. Alt-U is the undo key and shift-alt-U is the redo key. The undo/redo is
initialized upon entering the action editor so it will not remember changes while the editor is switched off.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/action_editor.html (2 of 2) [13/05/2007 01:38:23]

Action Editor: Actions

ACTION EDITOR: ACTIONS

The actions tab is for selecting actions. Only one action can be selected at a time.
Actions in white are actions that also appear in the motion tree. Actions in grey do not appear in the motion tree. This
helps identify misspellings and missing actions.

copy action

makes an identical copy of the selected action

delete action

deletes the selected action

move up

moves selected action one slot up in the list

move down

moves selected action one slot down in the list

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_actions.html (1 of 2) [13/05/2007 01:38:24]

Action Editor: Actions

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_actions.html (2 of 2) [13/05/2007 01:38:24]

Action Editor: Curves

ACTION EDITOR: CURVES

The curves tab is for selecting action curves. Any combination of curves can be selected at once. The curve selection
is the same for all of the actions for the agent.

clear selection deselects all curves.


select all selects all curves.
copy selection makes copies of all selected curves.
delete selection deletes all selected curves.

Types of Action Curves


Primary Curves
Primary curves appear in the action editor as red, green, yellow and white curves. The red, green and yellow curves
represent curves that drive translations or rotations. Primary curves relate to the segments and agent space of the
agent. They control the agent space transforms and the segment transforms.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_curves.html (1 of 3) [13/05/2007 01:38:26]

Action Editor: Curves

Some primary curves.


Blendshape Curves
Blendshape curves appear in the action editor as blue curves. They allow the activations of geometry blends to be
driven in the same way as segment/agent transforms are driven by primary curves.

Some blendshape curves.


Auxiliary Curves
Auxiliary curves are curves which have been loaded/imported with the action but for which no channel exists. These
non-existent channels are created and can be accessed via input nodes in the brain (similar to what happens if an
output node is assigned a non-existent channel).

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_curves.html (2 of 3) [13/05/2007 01:38:26]

Action Editor: Curves

Some auxiliary curves.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_curves.html (3 of 3) [13/05/2007 01:38:26]

Action Editor: Edit

ACTION EDITOR: EDIT

The edit tab is for editing curves. Curves are colour coded according to axis. x curves are red, y curves are green,
and z curves are yellow.
The current phase of the action is displayed as a white vertical line when solo is on.
The start and end points of the action are displayed as vertical green lines. These default to 0 and 1 respectively so
they are not usually visible.
The x and y values of the point being edited appear at the right below the graph of the point currently being edited.
These number fields can be directly edited.

Editing curves

select points

left-click

select a range of points

ctrl-left-drag

move points

left-drag

move curve

middle-drag

set current phase

right-click or right-drag

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_edit.html (1 of 2) [13/05/2007 01:38:28]

Action Editor: Edit

move loop start or end point

alt-left-drag

move loop start and end points together

alt-middle-drag

select next point

right arrow

select prev point

left arrow

next curve

up arrow

prev curve

down arrow

To move a range of points first select them with ctrl-left-drag and then drag them with left-drag.
The up and down arrows cycle through the selected curves.

these buttons lock dragging of points in X and Y

hierarchy
used for editing the orientation of a segment while leaving the
compensation orientation of attached segments unaffected
soft
edit

brings up the soft edit curve (in blue) and the soft edit
controls. While soft edit is on dragging points affects other
points with a smooth falloff. Points further away from the
selection are affected less. The falloff and bias sliders can be
used to control the range of influence. The wrap button
should be on for cyclic actions.

set
start

used to make the current phase the start of the action. This
can be used to synchronize loops.

reverse
interp

reverses the order of the action so that the start becomes the
end and the end becomes the start
linearly interpolates the selected range of points

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_edit.html (2 of 2) [13/05/2007 01:38:28]

Action Editor: Loop

ACTION EDITOR: LOOP

Loop mode can be used to set the start and end of an action, or to permanently clip the ends of an action, or to
perform destructive cross fade looping. It is also used to set the 'one shot' and 'no retrigger' attributes for the action.
The start and end points determine the start and end of playback for the action. Altering them does not affect the
actual length of the action itself or the data it contains, only the apparent length when played back.
The loop start and loop end points are represented by green vertical lines.
The cross fade value determines the length of the action used to cross fade the start of the loop with the end. The
result of the cross fade is evident while in the loop tab but will be lost if the apply button is not used.
The cross fade sections are represented by light green vertical lines.
The apply button crops the action at the start and end. If cross fade is non-zero then the cross faded section will be
'baked' into the action data. The apply button does affect the actual length of the action.

loop start

The button sets the start point to the current phase.


The number field represents the start point.

loop end

The button sets the end point to the current phase.


The number field represents the end point.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_loop.html (1 of 2) [13/05/2007 01:38:30]

Action Editor: Loop

cross fade

A positive number results in a cross fade of the sections after the


start and end points.
A negative number results in a cross fade of the sections before
the start and end points.
The value is edited by typing or with the right mouse virtual slider.

static

makes the appropriate selection of root curves for a static action

turning

makes the appropriate selection of root curves for a turning action

locomotion

makes the appropriate selection of root curves for a walking or


running action

ramp

makes the appropriate selection of root curves for an uphill or


downhill action

crossfade root curves These buttons determine which of the root segment curves will
have cross fade looping.
For example it would make no sense to loop tz for an action that
walks along the Z axis, since the agent would then be sliding
back to the start location on each cycle.

one shot

If the one shot flag is on the the action will not loop when
triggered from the brain.
Any action that is not cyclic should have this flag set.

no retrigger

This flag prevents the action from being triggered while it is


already active.
Since agents can have multiple playbacks of the same action
active at one time, it is sometimes necessary to set this flag.
This should normally be on for looped actions.

apply

This button truncates the action and 'bakes in' the cross fade.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_loop.html (2 of 2) [13/05/2007 01:38:30]

Action Editor: IK

ACTION EDITOR: IK

The IK tab is used to create inverse kinematic curves, IK hold curves, and rotation constraint curves.

IK curves
IK curves creation involves the conversion of existing rotation curves into the equivalent inverse kinematic curves.
Selecting a curve for a segment in the curves tab specifies the segment as the end effector.
More than one set of IK curves can be generated at once by selecting curves for multiple segments.
The original rotation curves are retained and can be deleted later if so desired. If the original rotation curves are
present they will have no effect while IK is active.
The knee/elbow bend direction is determined by the IK solver from the rotation limits of the knee/elbow joint.
The bend axis buttons are used to determine which axis to use as the bend axis for knee/elbow.

RC curves

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_ik.html (1 of 3) [13/05/2007 01:38:31]

Action Editor: IK

The RC curves button is used to create rotation constraint curves.


The RC constrant is similar to the IK constraint in that it overides the rotations of segments to satisfy a goal in the
agent's local space. In this case the constraint is a euler rotation specified on object space.
Typical uses of RC curves are

keeping feet flat to the ground when either the foot or toe bones are controlled by IK
maintaining the angle of a weapon while modifying the motion of the hand in which it is held

Note: When using RC curves and IK curves in the same limb it is best to create the RC curves before creating the IK
curves.

Hold curves
Hold curves are used to 'hold' the IK segment in world space. This is most useful for preventing slipping of feet.
When making hold curves at least one IK curve of the corresponding segment should be selected.
The appropriate curves are already selected if the IK curves have just been created.
More than one hold curve can be generated at once by selecting curves for multiple segments.

When the hold curve button is pressed:

a dark orange curve representing the speed of one of the selected segments appears
a dark green curve representing the height of one of the selected segments appears
the hold curves are automatically derived from the speed and height of the segments

There are two thresholds used in generating the hold curves. The green line represents the speed threshold (actually
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_ik.html (2 of 3) [13/05/2007 01:38:31]

Action Editor: IK

marked distance) and the yellow line represents the height threshold. Adjusting these thresholds modifies the hold
curves accordingly.
The speed threshold can be moved with left-drag.
The height threshold can be moved with middle-drag.
The hold off time is used to give an ease out to the hold curves.
When the curves are close enough they can be fine tuned in the edit tab.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_ik.html (3 of 3) [13/05/2007 01:38:31]

Action Editor: Agent

ACTION EDITOR: AGENT

The agent tab is used to create agent curves and the timing curves used in transitioning from one action to another.
Agent curves are velocity curves that affect agent translation and rotation. For example, if an action contains a tz
agent curve with a value of 1 then it will cause the agent to move forward continuously at a rate of 1 unit per second.
Usually when an action is first imported, the overall translation is in the root segment. For agents to be able to travel
about by repeatedly executing actions, it's necessary to convert the overall translation and rotation of the actions into
agent curves.

Different kinds of actions work best with different combinations of agent curves. For example a walking action would
require tx and tz curves, and so that it can be used with turning and uphill actions it would also need ty and ry curves
that are set to zero. Knowing which sorts of curves are best for each action can get complicated so the action category
buttons automatically select the appropriate agent curve settings.

Interface

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_agent.html (1 of 3) [13/05/2007 01:38:34]

Action Editor: Agent

static

selects the recommended settings for a standing action


i.e. any action that keeps the agent in the same place

turning

selects the recommended settings for a turning action


i.e. any action that turns the agent

locomotion

selects the recommended settings for a walking or running action


i.e. any action that takes the agent from one place to another that isn't a turning
action

ramp

selects the recommended settings for an uphill or downhill action


i.e. any action that travels uphill or downhill

other

selects settings that will work for any actions

apply

makes all of the selected agent curves, including the transition and latch curves.

toggles display of the 'advanced' settings

The other button selects all translation and rotation agent curves for generation. Note that it's not recommended to
have rx and rz curves for a typical bipedal agent since it may gradually drift from upright over time.
The graph depics the offset curves for each of the agent transformation channels. The offsets can be used to offset
the position and orientation of the agent from its origin if you don't like where the origin is automatically placed. Use
the up and down arrow keys to toggle between the available offset curves. Usually, there is no need to use these.

Advanced Settings
It is possible to specify the exact combination of agent curves produced. The

button makes the advanced settings

accessible.

The tx ty tz rx ry rz columns specify the kind of data to generate for each agent curve. The possible values for each
curve are:
none

no curve is generated

static

a curve with a constant value of zero is generated

constant

a curve with a constant velocity value is generated

varied

a curve with smoothly varying velocity values is generated

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_agent.html (2 of 3) [13/05/2007 01:38:34]

Action Editor: Agent

Varied agent curves contain a smoothed version of the overall motion of the action. The difference between the
smoothed motion and the original motion ends up in the root curves.
Filtered agent curve motion is useful for providing a more stable agent space, which can make for more stable
behaviour since the agent's frame of reference moves smoothly. It also provides a slight improvement in motion
quality when the agent curves are scaled by the agent's brain.

transition

specifies the generation of a transition curve

latch

specifies the generation of a latch curve

varied filter width

used to adjust the amount of smoothing that is applied to varied


curves

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_agent.html (3 of 3) [13/05/2007 01:38:34]

Action Editor: Transform

ACTION EDITOR: TRANSFORM

Rotate mode is used to transform the entire action in world space. This is useful for aligning motion with a world axis,
adjusting for tilted ground planes, offsetting in world space, and scaling.
It is recommended that any tranformation required be done before generating agent curves or IK curves.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_transform.html (1 of 2) [13/05/2007 01:38:35]

Action Editor: Transform

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ae_transform.html (2 of 2) [13/05/2007 01:38:35]

Importing Motion

IMPORTING MOTION

Massive stores motion data in .act and .actb files. These are action and action binary files. Action files are ascii and
are designed to be easily read and written by scripts. For efficient saving and loading it's best to store all of the
actions for an agent in one action binary .actb file.

GETTING THE DATA INTO MASSIVE


Massive can import motion data from one of three file formats:

Acclaim motion files (.amc)


Biovision hierarchical data files (.bvh)
Maya ascii (.ma)

There are two ways to get .amc and .bvh motion files into Massive. The first is to use the File -> load actions menu
option. This brings up a browser for selecting .act, .actb, .bvh, and .amc files. Multiple files can be selected by holding
down the shift key. The second way is through the command line.
A single .amc file can be read into Massive with the -amc command line option. The -amcrate command line option
can be used to specify the sample rate of the amc files.
eg:
massive -amcrate 100 -amc shot1.amc agent.cdl
The agent has to have the correct segments and degrees of freedom for the .amc files. Normally .amc files are
accompanied by an .asf skeleton file. To generate an agent from an .asf skeleton just load the .asf into Massive like
this:
massive skeleton.asf
and then save the resultant agent. It's a good idea to adjust the radii of the agent's segments to get a better overall
shape before saving it. See segment - shape for details.
A single .bvh file can also be read into Massive using the -bvh command line option. Unlike the .amc files, reading a .
bvh file into Massive through the command line will result in a new agent for every separate skeleton in the .bvh file.
However, .bvh files imported through the load actions dialog will import the motion from the first skeleton into the
current agent, just like it imports .amc files.
A single Maya ascii (.ma) keyframed action can be read into Massive through the File -> Import Maya ascii menu
option. See Maya integration for more details.

CONVERTING RAW DATA TO AN ACTION


There are several types of curves that are created to make an action more useful to the agent. Some of these need to
be manually adjusted for optimum results.
agent curves
transition and latch
RC and IK
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_import.html (1 of 4) [13/05/2007 01:38:38]

Importing Motion

Here's the recommended procedure:


1.
2.
3.
4.
5.
6.
7.
8.

transform
loop/trim
create agent curves
create rotation constraint curves
create inverse kinematic curves
create IK hold curves
adjust transition and latch curves
save the action

Start the action editor by selecting Edit | Action from the menu. Click on the curves tab and hilight a few curves to
be used as a visual reference (usually the root segment curves will suffice).
Make sure the solo button is on then hit the space bar. Use alt-F to make the camera follow the agent. Shift-alt-F will
toggle filtering of the camera follow constraint.

TRANSFORM
Often the action will need to be rotated to align with world Z. This is done in the transform tab. Just drag the rotate Z
slider while the action is running until the agent is facing down positive Z.

LOOPING
Click on the loop tab. First the action can be trimmed to roughly the start and end of the required motion. Set the start
and end points appropriately, leaving some room for later adjustment.
If the action does not need to loop continuously then hit the apply button and you're ready to move on to agent curves.
For actions that will be looped continuously, such as a walk or a run, cross fade looping can be applied. Cross fade
looping blends the start of the action with the end to make seamless continuous motion. Next click on the loop tab
and make sure that the solo button is on. When in loop mode, playing an action (by hitting the space bar) will display
the looped motion. This is a preview of the loop which will not be permanent until the apply button is clicked.
To be able to watch the loop properly switch on camera follow with alt-f and then switch off the follow smoothing with
shift-alt-f. Adjust the loop start, end and cross fade parameters until the desired loop is acheived. To crossfade at the
start of the loop, the cross fade parameter should be a positive number. To crossfade at the end of the loop, the cross
fade parameter should be negative. All channels will be looped except the root segment channels NOT selected by
the loop root buttons. This is to allow the action to take the object somewhere in world space while looping smoothly.
Normally only the tx and tz channels will be unselected. Once the loop is optimal, click on the apply button to "bake"
the cross fade looping into the action.

CREATING AGENT CURVES


Agent curves are derived from the root segment curves. See action editor - agent for a description of agent curves.
To create the agent curves, click on the agent tab, then make sure the appropraite action category is selected and hit
the make agent curves button.
Transition and latch curves will also be created.
Here are the action categories:
static

actions where the agent is standing in one spot

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_import.html (2 of 4) [13/05/2007 01:38:38]

Importing Motion

turning

actions where the agent ends up facing a different direction

locomotion

walking, running, marching etc

ramp

uphill and downhill actions

CREATING ROTATION CONSTRAINT CURVES


When IK is used to control an agent's feet, offseting the IK curves or varying the skeleton proportions can alter the
angle of the feet. The Rotation Constraint (RC) can be used to keep the feet flat on the ground. See Rotation
Constraint for details of how this works.
To create RC curves for a segment, first select a curve for the segment in the curves tab (e.g. r_foot:rx) and then go to
the IK tab and hit the RC curves button.

CREATING IK CURVES
Before making IK curves for an agent it's important to ensure that the segments have the appropriate settings. For
legs it's recommended to apply IK at the toe bone rather than the foot bone, so that agents turn on the ball of the foot
rather than the heel. To make this work it's necessary to let the IK solver know that the foot is not the lower limb
segment. This is done by setting the i.k. skip flag in the dof tab of the foot segment node on the body page. See
segment - dof for details.
To create IK curves, click on the curves tab to get to curves mode, select one or more curves of the end effector
segment (eg: r_toes:rx), go into IK mode, and click the ik curves button.
It's ok to select curves for more than one segment (e.g. r_toes:rx l_toes:rx). IK curves will be made for each segment.
Usually the correct bend axis for the knee/elbow joint will be automatically selected upon entering IK mode. If the
wrong axis is selected just select the desired bend axis by clicking on the X Y or Z button, before clicking on the IK
curves button. To display segment axes in the view window, hit alt-a.
Clicking on the IK curves button more than once will result in multiple sets of IK curves for the segment which is not
very useful. If this happens then go back to the curves tab, select the unwanted IK curves and hit the delete selected
button.

CREATING HOLD VALUES


IK hold curves can be used to make sure that feet stay locked to world space. Hold curves should be generated for
feet, or more specifically for the segments in the feet that have IK curves. This is likely to be r_toes and l_toes.
Hold curves are created for any segments that have selected curves when the hold curves button is clicked.
If IK curves for r_toes and l_toes have just been created then clicking on the hold curve button will create hold curves
for the same segments.
When the hold curves button is pressed the graph will display a dark orange curve representing speed of a segment
and a dark green curve representing the height of a segment. These curves are compared to speed and height
threshold values to generate the hold curve data.
The speed and height thresholds can be dragged with the left and middle mouse buttons respectively, or edited by
typing into the speed and height number fields.
The IK hold curve data is updated everytime these values are changed.
Hit alt-i to see a graphic representation of the effects of the IK hold curves in the view window while the agent is
running.

ADJUSTING TRANSITION AND LATCH CURVES


http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_import.html (3 of 4) [13/05/2007 01:38:38]

Importing Motion

For actions to transition properly the transition and latch curves need to be set to appropriate values.
An action becomes active as it's transition curve goes from 0 to 1.
No other actions can be triggered while an active action's latch curve is at 1.
The Sequencer can be used to observe the effect of these curves as the actions transition from one to another.
First select the transition and latch curves in the curves tab. Then click on the edit tab. Start the Sequencer from the
Run menu. Build up a list of 2 or 3 actions and hit the space bar (make sure the action editor solo button is off). Now
slide the transition and latch curve points in X to get the desired results.

SAVING AN ACTION
Use File | Save actions to save all of the agents actions in an action binary file. Once this has been done, save the
agent (.cdl). Next time the agent is loaded it will get the action binary file loaded along with it.
Actions can also be saved as part of the .cdl file itself. This is not normally recommended, as it greatly increases the
size of the .cdl file. In order to save the .cdl file with actions embedded, do not save an action binary (.actb) file before
saving the .cdl.

ADVANCED ACTION IMPORTING


When importing more than one .amc it's best to proceed with each importing step for all actions, and then
incrementally save before going on to the next step. This makes for a more efficient workflow and it also makes it
easier to go back a step if necessary.
A python script can be run in the textport to speed up the motion importing process. Use Options | textport to open
the textport.
Here's a listing of a python script called make_ik.py which makes rc curves for segments called l_foot and r_foot and
makes ik curves for segments called l_toes and r_toes.
agent = get_agents()
a = agent.actions
l_rc = agent.find_segment("l_foot")
l_ik = agent.find_segment("l_toes")
r_rc = agent.find_segment("r_foot")
r_ik = agent.find_segment("r_toes")
while a:
reset_all()
print a.name
a.create_rc_curves(l_rc)
a.create_rc_curves(r_rc)
a.create_ik_curves(l_ik)
a.create_ik_curves(r_ik)
a.create_hold_curve(l_ik)
a.create_hold_curve(r_ik)
a = a.next
To run a script from disk use this command in the textport:
execfile("make_ik.py")

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/motion_import.html (4 of 4) [13/05/2007 01:38:38]

The Sequencer

THE SEQUENCER

The Sequencer Dialog


The Sequencer dialog is accessed from the main menu by selecting Run->Sequencer. It is used to test whether
actions transition smoothly from one to the other.

append

adds action currently selected on the left hand list to the bottom of the right hand list.

insert

adds action currently selected on the left hand list to the spot above the selected action in
the right hand list.

replace

replaces action currently selected on the right hand list with selected action in the left hand
list.

delete

deletes action currently selected in the right hand list

Playing the simulation while the Sequencer dialog is open will cause the actions on the right hand side of the list to
play in order. The current action being played will be indicated by a red progress bar moving across the name of the
action.
When playing actions with the sequencer, make sure the solo button is off in the Action Editor and no actions are
being activated by the brain. If there are nodes in the brain that are triggering actions, make sure to disable these
nodes before running the Sequencer. These cases will lead to conflicts with the Sequencer.

The Sequencer List


A random sequence of continuous actions can be generated for the Sequencer from a motion tree by selecting Tree>sequencer list from the main menu while in the motion page.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/sequencer.html (1 of 2) [13/05/2007 01:38:40]

The Sequencer

This dialog allows you to select the number of actions you want for the list. Upon clicking the accept button, the
Sequencer will be filled with a list of actions beginning with the current action you have selected in the tree. These
actions will be selected in an order consistent with the layout of the tree.
In order to get a different sequence, select a different starting action.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/sequencer.html (2 of 2) [13/05/2007 01:38:40]

Bones

BONES

Skinning in massive is done using an algorithm called Bones. Bones uses ellipsoids to specify the influence that the
segments have on the geometry.
An alternative to using Bones is to import weights from another program after converting them to Massive's weight
format. See the section on the weights tab in the Geometry Node page.
The bones window is invoked from the Option menu.

Volumes of Influence
Each segment has 2 ellipsoids representing the bones volume of influence on the geometry.
The volume inside the inner ellipsoid represents the area of the geometry that is completely
affected by that bone.
The degree of influence on the geometry decreases between the inner & outer ellipsoids
The geometry outside the outer ellipsoid is not affected by the segment at all.
The degree of influence a ellipsoid exerts on the geometry is represented by a colour range
where blue indicates a low influence & yellow a high influence.

To display the influence of a segment or segments:


1. Select the geometry node or nodes you wish to view bones influences for.
2. Lock the geometry selction by toggling on the highlight area on the side of the geo icon in the New Icon Box.
3. Select the segments you wish to view bones influences for. Segments can be selected in the Node Window, View
Window or Bones Window.

Adjusting the Influence:


The volume of Influence of a segment can be adjusted with the parameters in the Bones Tab for the segment, or by
dragging the ellipsoids in the Bones Window. Note: Some combinations of mouse buttons are currently unsupported
under X.
Agents can be seen moving in the View Window while adjustments are made in the Bones Window.
The Agent is always displayed in Bind Pose in the Bones Window.
Weights are always normalised, i.e.vertices are guaranteed to have a total weighting of 1 unless outside of all
ellipsoids.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/bones.html (1 of 2) [13/05/2007 01:38:42]

Bones

Mouse button functions


The Bones window displays the current functions of the mouse buttons due to the shift, ctrl and alt keys in the lower
left corner of the Bones Window.
The Bones Window defaults to Segment Mode which has the same mouse functions as the Node & View Windows.
Bones originally existed as a separate program which had slightly different mouse functions.To work with the original
mouse functions switch to Alt Mode (toggle Segment/Alt Icon at bottom right of Bones Window).
Segments are drawn as simple lines in this view.
Segment Mode
Alt Mode

Segment Symmetry
Ellipsoids for a mirrored segment will be updated to match its mirror segment if symmetry is on.
Mirrored Segments are 2 segments with the same name with the excepition of an exchanged upper or lower case L
and R anywhere in the name eg. L arm and R arm.
Symmetry can be turned off by toggling the Symmetry Icon at the bottom right of the Bones Window.

Symmetry on
Symmetry off

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/bones.html (2 of 2) [13/05/2007 01:38:42]

Channels

CHANNELS

Channels are used to pass information between an agent's brain and it's body. There are channels for all of an
agent's degrees of freedom, vision, sound, actions, and information about the terrain beneath the agent. Some
channels such as segment rotations are input and output channels, others such as terrain channels are input only and
some are output only. Input nodes containing the name of the channel are used to obtain values from a channel.
Output nodes containing the name of a channel are used to set channel values.
The wildcard characters ? and * can be used in input nodes when referring to action names. See actions for details.
Sending output values to a non-existent channel creates a user variable which can be referenced in input nodes.

SYNTAX
Most channels refer to a parameter that is associated with a segment or an action. A colon seperates the name of the
segment or action from the rest of the channel name.
eg:
head:ry
walk:rate

Channels directly associated with the agent are called agent channels. These contain no colon.
eg:
ry
ground

Some channels such as IK channels form a group of channels. A fullstop is used to seperate the members of the
group.
eg:
ground.r
ground.g
ground.flow
r_hand:ik.x
r_hand:ik.y
r_hand:ik.active

When modifying the effects of actions the channel name is enclosed in square brackets.
eg:
[head:ry]:scale
[r_hand:ik.x]:offset

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/channels.html (1 of 6) [13/05/2007 01:38:46]

Channels

Input nodes can also contain expressions .


eg:
head:ry + neck:ry

CHANNEL REFERENCE
AGENT CHANNELS
channel

description

input / output

min

max

example

tx ty tz

translation rate of agent

both

-inf

inf

ty

rx ry rz

rotation rate of agent

both

-inf

inf

ry

lx ly lz

lean of agent in world space


(see lean)

input

-1

ly

collide

indicates the occurance and


depth of a collision with another
agent

input

inf

collide

collide.v

velocity of collision

input

inf

collide.v

collide.x collide.y collide.z

location of collision in agent


space

input

-inf

inf

collide.x

collide.vx collide.vy collide.


vz

velocity vector of collision in


agent coordinates

input

-int

int

collide.vx

collide.nx collide.ny collide.


nz

normal vector of collision in


agent coordinates

input

-1

collide.nx

ground

height of terrain relative to agent


(see terrain)

input

-inf

inf

ground

ground.r ground.g ground.b


ground.a

colour of terrain beneath agent

input

ground.r

ground.dx ground.dz

slope of terrain along agent x


and z axes

input

-inf

inf

ground.dx

ground.r.dx ground.g.dx
ground.b.dx
ground.r.dz ground.g.dz
ground.b.dz

gradient of terrain R G and B


with
respect to agent X and Z axes.

input

-inf

inf

ground.r.dx

balance.x balance.z

distance that agent is off


balance in x and z

input

-inf

inf

balance.x

sound.f sound.a
sound.f1f sound.f1a
sound.f2f sound.f2a

sound emmission / reception


(see sound)

both

inf

sound.f

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/channels.html (2 of 6) [13/05/2007 01:38:46]

Channels

sound.d sound.x sound.z

see sound

input

wind.x wind.y wind.z

velocity of wind (see wind)

both

-inf

inf

wind.x

wind.a wind.f

amplitude and frequency of wind


turbulence

output

inf

wind.a

dynamics.active

switches on rigid body dynamics


for the agent (see dynamics )

output

dynamics.active

output

vision.active

output

active

vision.active

switches off vision processing if


set to zero (default value is one).
switches as agent off if set to
zero

active

sound.d

parent

causes an agent to become


parented to an agent with which
it is colliding

output

parent

keyboard

Ascii code for the key that was


pressed. For realtime keyboard
control of agents.

input

65535

keyboard

controller.joy1.x
controller.joy1.y
controller.joy2.x
controller.joy2.y
controller.joy3.x
controller.joy3.y
controller.slider
controller.b1
.
.
controller.b8

Gamepad controller joysticks, d


pad, trim slider and buttons. For
realtime control of agents.

input

controller.joy3.x

(see joystick/keyboard
controls)

servo.force

magnitude of servo force to be


used for all degrees of freedom
for all segments (see
dynamics)

output

inf

servo.force

paint.r, paint.g, paint.b,


paint.a

level of red/green/blue/alpha
channels that agent paints on
the ground

output

paint.r

paint.size

size of brush agent uses to paint


on the ground

output

inf

paint.size

colour

colour of agent's skeleton

input/output

colour

SEGMENT CHANNELS
channel

description

input / output

min

max

example

tx ty tz

segment translation

both

-inf

inf

head:ty

rx ry rz

segment rotation

both

-inf

inf

head:ry

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/channels.html (3 of 6) [13/05/2007 01:38:46]

Channels

xyz

segment location in agent


space

input

-inf

inf

head:y

lx ly lz

lean of segment in world space


(see lean )

input

-1

head:ly

height of segment above


ground in world space

input

-inf

inf

r_hand:h

mass

segment mass

output

inf

head:mass

dynamics.active

switches on dynamics for the


segment and it's descendents

output

head:dynamics.active

force.x
force.y
force.z

External force applied to


segment. Forces only have
effect when dynamics is active

output

-inf

inf

r_shoulder:force.z

force.px
force.py
force.pz

Location in segment space at


which force is applied.

output

-inf

inf

r_shoulder:force.px

force.rx
force.ry
force.rz

Torque applied to segment.

output

-inf

inf

head:force.ry

ground

height of terrain under


segment relative to agent (see
terrain )

input

-inf

inf

r_foot:ground

vision.x vision.y
vision.h vision.i

see vision

input

-1

head:vision.x

ik.x ik.y ik.z ik.twist


ik.active ik.hold ik.grab

see Inverse kinematics

both

r_hand:ik.x

rc.x rc.y rc.z rc.active

see rotation constraint

both

r_hand:rc.x

collide

indicates the occurance and


depth of a collision
with another segment or agent

input

inf

head:collide

collide.v

velocity of collision

input

inf

head:collide.v

collide.x collide.y collide.z

location of collision in segment


space

input

-inf

inf

head:collide.x

collide.vx collide.vy
collide.vz

velocity vector of collision in


segment coordinates

input

-int

int

head:collide.vx

collide.nx collide.ny
collide.nz

normal vector of collision in


segment coordinates

input

-1

head:collide.nx

spawn

A rising edge (i.e. going from 0


to 1) triggers the creation of a
new instanced agent. The
new agent will instanced from
an original agent with the
same name as the segment.

output

arrow:spawn

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/channels.html (4 of 6) [13/05/2007 01:38:46]

Channels

servo.force

magnitude of servo force to be


used for all degrees of
freedom for the segment (see
dynamics)

output

inf

head:servo.force

servo.force.x servo.force.
y servo.force.z

magnitude of servo force to be


used for individual degrees of
freedom for the segment (see
dynamics)

output

inf

head:servo.force.x

servo.rx servo.ry servo.rz

sets the target rotation values


for the servos for the segment.
Note that these values are
overriden by actions (see
dynamics)

output

-inf

inf

head:servo.rx

colour

colour of segment

input/output

head:colour

ACTION CHANNELS
channel

description

input / output

min

max

example

action

A value of 1 triggers the action.


A value of 2 triggers the action
irrespective of latch state (see actions )

output

walk

action

The activation level of the action

input

walk

action1->action2

Blends action2 over action1

output

walk->sidestepL

[channel]:scale

Scales the action values applied to the


channel.

output

-inf

inf

[head:ry]:scale

[channel]:offset

Offsets the action values applied to the


channel.

output

-inf

inf

[head:ry]:offset

[channel]:origin

Sets the origin for scaling of the channel

output

-inf

inf

[r_toes:ik.y]:origin

action:rate

Sets the playback rate. 0.5 causes the


action to play at half speed. -1 causes it
to play backwards.

both

-inf

inf

walk:rate

action:running

A binary value indicating wether the the


action is playing or not.

input

walk:running

action:phase

The phase of the playback of the action

input

walk:phase

phase

The phase of the most active playback


on track 1

input

phase

phase2 ... phase8

The phase of the most active playback


on tracks 2 to 8

input

phase5

action:phase_offset

Sets the starting phase offset for the


action.

output

walk:phase_offset

latch

The state of the latch for track 1

intput

latch

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/channels.html (5 of 6) [13/05/2007 01:38:46]

Channels

LEAN CHANNELS
The lean channels ( lx ly lz) for agents and segments work like this..
lx - the Y component of the X axis in world space
ly - the Y component of the Y axis in world space
lz - the Y component of the Z axis in world space
...which basically means 'how vertical is this axis'.
In laymans terms..
lx - leaning to the left or right (-ve = left, +ve = right)
ly - how upright (1 = upright, -1 = upside down)
lz - leaning forwards or backwards (-ve = forward, +ve = back)

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/channels.html (6 of 6) [13/05/2007 01:38:46]

Dynamics

DYNAMICS

An agent, or part of an agent, can have rigid body dynamics activated at any time by setting a dynamics channel to
1.0. An output node to do this for an entire agent would contain this string:
dynamics.active
To switch on dynamics for a sub-hierarchy of an agent, for instance a tail, an output string like this one would be
used:
tail_1:dynamics.active
For dynamics to work properly the dynamics attributes of the agent must be set to appropriate values.
These attributes are edited in the body page under agent dynamics and segment dynamics.
Note that making dynamics active for a segment, rather than the whole agent, effectively detaches the segment and
it's children from the segment's parent. The parent constraint is used to maintain the relationship of the dynamic
segment to it's parent segment. This constraint is only required for the first segment in the sub-hierarchy, e.g. if tail_1
dynamics is active then it would need a parent constraint, but tail_2 and tail_3 would not.

THE DYNAMICS DIALOG

The Dynamics dialog box, accessed through Edit -> Dynamics in the main menu, allows the user to enable or disable
various dynamics options at a global level, thereby overriding dynamics at an agent or segment level.
terrain collisions

toggles on/off collisions of agents with terrain

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/dynamics.html (1 of 3) [13/05/2007 01:38:48]

Dynamics

agent collisions

toggles on/off collisions of agents with other agents

self collisions

toggles on/off collisions of segments with other segments within the agent

rotation constraints

toggles on/off rotation constraints

spring

toggles on/off effect of springs

spring collisions

toggles on/off collisions of springs

drag

toggles on/off effect of drag

quickstep

toggles on/off quickstep stepping function for the ODE solver. Quickstep is a
faster but less accurate stepping function.

The dialog also allows the user to choose a dynamics solver.

SOLVERS
Massive offers two options when it comes to the dynamics solver, Glowworm and ODE. The dynamics dialog box
contains the option to choose one or the other. The selected solver is saved with the agent (.cdl) file. However, only
one solver can be used in a scene, so if two agents with different solvers are loaded into a scene, the more recently
loaded agent will set the solver for the scene.

DYNAMICS IN MASSIVE
Collisions
There are several types of collisions that can occur in massive; terrain collisions, self collisions, agent collisions and
spring collisions. Inter-penetration is avoidable by use of the collision constraint which uses the collision constants to
scale the constraint forces.
Terrain collisions are collisions between any segment and the terrain model. Where there is no terrain model the
collisions occur at the Y=0 plane.
Self collisions occur between segments of the same agent. Collisions do not occur between a segment and it's
parent. This is so that segments which partially overlap their parents are not continually being forced apart from their
parent segment.
Agent collisions are those that occur between two segments from different agents.
Spring collisions occur with the line between the spring endpoints, and any segment within the same agent that the
spring is not attached to. Springs can have a collision thickness. Collisions are not detected between springs. Note
that a spring can collide with the child or parent of an attached segment, so it's best to ensure that springs do not
penetrate segments in the rest pose other than those to which they are attached.
Box primitives do not yet collide with terrain geometry, but they do collide with most other segments and the ground
plane (when there is no terrain geometry).

Rotations
Rotations can be constrained to stay within the segment rotation limits. Constraint forces are applied to each
rotational degree of freedom for any segments that have a non-zero rotation spring constant.

Springs
Springs can be connected between segments of an agent. At least one of the connected segments must have
dynamics active for a spring to have any effect. Springs can be created and edited using the body page .
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/dynamics.html (2 of 3) [13/05/2007 01:38:48]

Dynamics

Springs can collide with segments. By default collisions is switched on for a spring.

Drag
All segments can be affected by drag. Drag acts on segments as they move through the atmosphere. This depends
on the size, shape and motion of the segments and on the movement of the wind (see wind).

Forces
Forces can be applied to segments when dynamics is active. These forces are useful for controling the behavior of
agents during rigid body dynamic simulation. There are two types of forces that can be applied: external and torque.
External forces are specified with x y and z force values and an x y and z location relative to the segment. Any
combination of the three can be set. Specifying the location is optional and the default location is the centre of the
segment. e.g.
r_shoulder:force.z
r_shoulder:force.px
Torque forces are specified with an x y and z value. e.g.
head:force.ry

SMART STUNTS
Smart stunts can be used to combine dynamics with actions to create a realistic stunt agent.
The action in question should be set to run in the brain, and at the same time, dynamics should be set to active for the
agent.
The amount of effect the action has on the agent is determined by the magnitude of servo forces set using the servo
channels. See the channels page for a full listing of agent and segment servo channels.
Massive will use the forces specified through the servo.force channels to try to rotate the selected segments into
whatever position is specified by the running action on that particular frame.
This can be used to create an agent which is falling or being hit while simultaneously trying to block or protect itself,
among many other applications.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/dynamics.html (3 of 3) [13/05/2007 01:38:48]

Expressions

EXPRESSIONS

Expressions can be used in input nodes to modify or combine variables and channel values. See channels or
variables for more information. Brackets can be used to control order of evaluation. Spaces are ignored.

Supported operators:

operator
*/%

operation

precedence

multiply divide mod

+-

add subtract

<<

bit shift left

>>

bit shift right

>>>

shift right, fill with zero

relational

== !=

comparisons

&

bitwise AND

bitwise XOR

bitwise OR

&&

logical AND

logical OR

< > <= >=

||

Expressions are evaulated left to right with precedence as per the above table.

Supported functions:

sin(x)

trig sin where x is in degrees

cos(x)

trig cos where x is in degrees

tan(x)

trig tan where x is in degrees

asin(x)

trig arc sine in degrees

acos(x)

trig arc cosine in degrees

atan(x)

trig arc tangent in degrees

abs(x)

absolute value of x

min(a,b)

minimum of a and b

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/expressions.html (1 of 2) [13/05/2007 01:38:49]

Expressions

max(a,b)

maximium of a and b

sqrt(x)

square root of x

noise(x)

1d monotonic noise function

noise(x,y)

2d monotonic noise function

noise(x,y,z)

3d monotonic noise function

examples:

r_arm:rx - abs(ArmAngle)
(.5 + lhand:y) * 2
(.5+lhand:y)*2

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/expressions.html (2 of 2) [13/05/2007 01:38:49]

Flow Field

FLOW FIELD

The flow field is directional information embedded into the alpha channel of the terrain map, which is useful for guiding
agents around the terrain. It is made by placing flow splines onto the terrain and then clicking on the apply button to
encode the flow field into the terrain map.
The flow field represents angles about the world Y axis from 0 to 360 degrees. When this data is referenced in an
agent's input node (see terrain) it is given relative to the agent's heading. The flow field can also be used to orient
agents during placement by switching on the orient to flow flag for a generator (see place tool).
The flow field as defined by the flow splines is visible as vectors called "indicators" in the view window while the flow
field editor is active. To see the indicators at other times select the Flow field option under the View menu. Note that
the indicators do not necessarily agree with the flow field in the terrain map. The actual flow field data can be seen by
switching on texture map and alpha channel under the Terrain menu.
The flow splines are saved in the setup file. It is recommended to save the terrain map also (save terrain map under
the File menu) after the flow field has been "applied".

Flow field editor


The flow field editor is used to make the flow splines and flow gaps . Flow gaps are used to push the flow field away
from a particular location. The number of flow field indicators that are displayed in the view window is adjusted with the
sliders at the bottom of the flow field editor. When making detailed flow fields interactivity can be improved by
reducing the number of indicators.

Splines
When the top left button is selected the flow field editor is ready to add, delete or edit flow splines.
This is how to make a flow spline:

Make sure the spline button in the top left of the flow field editor is selected
Click on the add button (or hit the space bar)
Left click on the terrain, once for each control point along the spline
Right click to finish (or Esc to cancel)

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/flow_field.html (1 of 4) [13/05/2007 01:38:55]

Flow Field

The flow field will point in the direction in which the spline was drawn. The brighter ends of the flow field indicators
point in the flow direction.
The radius slider is used to control the width of the spline.
The angle slider is used to set the angle of flow away from parallel with the spline.
The edge angle slider can be used to feather the edges in or out. The edge width slider controls the width of the
feathering.
To select a spline shift left click on the spline. To drag a spline shift left drag the spline.

Points
Individual spline points can be added, deleted or moved when the point button is selected.
Shift left click to select a point. Shift left drag to move a point. Radius, angle, edge angle and edge width can all be
edited per point.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/flow_field.html (2 of 4) [13/05/2007 01:38:55]

Flow Field

To add a point to the most recently selected flow spline:

Make sure the point button is selected


Click on the add button (or hit the space bar)
Move the mouse in the view window until the cross hairs is where the new point should be
Left click (or Esc to cancel)

Gaps
Flow gaps can be added, deleted or edited when the top gap button is selected.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/flow_field.html (3 of 4) [13/05/2007 01:38:55]

Flow Field

Flow gaps have a radius of influence and a weight. Select a flow gap with shift left click and move a flow gap with shift
left drag.
To add a flow gap:

Make sure the gap button is selected


Click on the add button (or hit the space bar)
Left click on the terrain

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/flow_field.html (4 of 4) [13/05/2007 01:38:55]

Inverse Kinematics

INVERSE KINEMATICS

There are two inverse kinematics (IK) constraints in Massive; the first is a limb constraint useful for arms and legs, and
the second is a single segment constraint which points a segment at the specified location. The specified location for
an IK constraint is called the goal. Alt-i can be used to toggle visibility of IK goals in the view window.
The rotation constraint is also described below since it can be used with the IK constraints.

Limb IK
This is the simplest hierarchy that could be used with Limb IK:

root
upper_leg
lower_leg
foot
The upper leg and lower leg segments would be rotated to locate the foot (the goal segment) at the goal. For the
upper_leg rx ry and rz would be solved and for the lower leg only one of rx ry or rz would be solved. The rotation of
the foot doesn't matter at this stage since it's the origin of the foot that is constrained to be at the goal. To constrain
the rotation of the foot in agent space use the rotation constraint. The goal is specified in agent space (i.e. local to the
agent) rather than world space.
The bend axis of the lower limb segment is controlled by the availability of degrees of freedom. The bend direction of
the lower limb segment is controlled by the rotation limits. If the +ve limit is larger than the -ve limit then the bend will
be in the positive direction. Limits are set in the body page . The rotations that are affected by an IK constraint are
indicated in the view window if the goal segment is selected (shift left click to select), and if IK goal display is on.
Here are the channels that need to be set:

channel

value

foot:ik.active

foot:ik.x

x coordinate of goal in agent space

foot:ik.y

y coordinate of goal in agent space

foot:ik.z

z coordinate of goal in agent space

foot:ik.twist

rotation of limb about limb--goal axis

Optional IK channels:

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ik.html (1 of 3) [13/05/2007 01:38:57]

Inverse Kinematics

foot:ik.hold

When set to 1 this channel causes the goal to remain


stationary in world space.

foot:ik.grab

When set to 1 this channel causes the goal to remain


stationary in the segment space of a colliding
segment.

All IK channels can be controlled from the brain or from actions. Forward kinematic rotation curves in an action can
be converted to IK curves in the Action Editor . IK hold curves can also be created in the action editor.
Setting ik.active to a value between 0 and 1 will result in a blend between the values already set for the rotations and
those set by the IK solver, so that IK can be smoothly switched on and off as required. The blending uses quaternion
interpolation to avoid pops in the motion.
Since the goal is set in agent space rather than world space it is necessary to set ik.hold to keep the goal stationary in
world space. The goal widget turns red when ik.hold is on, and a blue widget appears at the location where the goal
would be if hold were off.
IK grab can be used to constrain part of an agent to be attached to another part of itself, or to another agent. The
segment that the goal is attached to is determined by the maximum depth of collision between the goal segment and
any other segment. If there are no colliding segments then the goal will not be set. The goal may be set at a later
frame if a collision occurs and the IK grab is still set to 1. The IK goal widget turns green when ik.grab is on.
The Limb IK solver can also deal with more complicated hierarches For example:

shoulder
upper_arm
lower_arm
wrist
hand
In this case the solver would know which segment to treat as the upper limb and which to treat as the lower limb by
the state of the wrist IK skip flag. This is set in the body page (from the Edit menu) and is saved in the CDL. Any
segment can have IK skip set so that the solver knows to use the next segment up the hierarchy. The rotations of
skipped segments are taken into account in the solve, so rotating a skipped segment does not usually compromise the
solve. But in some cases rotations of a skipped segment can result in ambiguous solves.

Single IK
The Single IK constraint is applied if the goal segment's IK single flag is on. This flag is set in the body page . The
Single IK constraint only rotates one segment to move the goal segment towards the goal location, so it functions
much like a lookat constraint. The rotated segment will be the parent of the goal segment unless the parent's IK skip
flag is on. The functions of the channels and the goal display are the same as for Limb IK.

Rotation Constraint
Normally segments are rotated relative to the parent segment, or in the case of the root segment relative to agent
space. The Rotation Constraint is used to rotate any segment in agent space, irrespective of the rotation of the
parent. This is especially useful for keeping hands and feet at specified angles. When controlling a leg with Limb IK
from an action it is recommended to use the Rotation Constraint to control the foot rotations, so that scaling and
offseting the foot IK channels does not affect the angle of the foot. The rotations are euler rotations applied in the
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ik.html (2 of 3) [13/05/2007 01:38:57]

Inverse Kinematics

order specified for the segment in the CDL. The rotation order is not yet editable in the segment editor.
There are 4 channels which need to be set for the Rotaion Constraint:

foot:rc.active

Switches on the Rotation Constraint for the segment

foot:rc.x

The rotation about the x axis

foot:rc.y

The rotation about the y axis

foot:rc.z

The rotation about the z axis

Rotation Constraint curves can be generated in the Action Editor.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/ik.html (3 of 3) [13/05/2007 01:38:57]

Joystick/Keyboard Control

JOYSTICK/KEYBOARD CONTROL

Massive allows real-time control over agents using joystick and keyboard input. This allows Massive users to choose
certain key agents and control their movements in real time during the simulation.

Gamepad Controller Setup


The controller inputs are designed to work with most joystick and gamepad devices that are supported by the Linux
joystick driver. See the driver documentation for a list of supported devices. The Logitech WingMan RumblePad is
recommended.
To initialize the Logitech Rumblepad it may be necessary to run these commands as root in Red Hat 7.X:
rmmod hid
modprobe joydev
modprobe hid
and these commands as root in Red Hat 9:
modprobe joydev
modprobe hid

Gamepad Channels
Massive recognizes input from most buttons and controls on the standard joystick or gamepad.
Channels corresponding to controls such as analog sticks and sliders have a range of 0 to 1, where 0.5 represents
the center while 0 and 1 represent the extremes (right/left, up/down).
Channels corresponding to buttons will return values of 0 if the button is not pressed and 1 when it is depressed.
Below is a list of joystick input channels and an approximate description of which controls they correspond to on a
standard gamepad. If your gamepad is different in any way, it is easy to quickly discover which controls map to which
channels by opening the file joy.cdl, which is included in the Demo package.
To use joy.cdl, open the file, begin running the simulation by pressing spacebar, and then press any of the controls on
your gamepad while seeing which input channels are activated. Click on the input node in question to select it and see
the name of the corresponding channel. Note: the name that appears on the input node is not the channel name. See
the "source" text box to the right of the "name" text box to see the channel.
In joy.cdl, only the joy1 and joy2 controls are connected to agent behavior (body movement and head movement
respectively). The other input channels are not connected to anything to begin with and, until connected, are only
there to help you see which channels correspond to which controls.
controller.joy1.x

The x position of the joy1 control - any value from 0 (left) to 1 (right). The
joy1 control corresponds to the left analog stick on a standard dual-analog
gamepad.

controller.joy1.y

The y position of the joy1 control - any value from 0 (down) to 1 (up). The
joy1 control corresponds to the left analog stick on a standard dual-analog
gamepad.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/joystick.html (1 of 2) [13/05/2007 01:38:59]

Joystick/Keyboard Control

controller.joy2.x

The x position of the joy2 control - any value from 0 (left) to 1 (right). The
joy2 control corresponds to the right analog stick on a standard dualanalog gamepad.

controller.joy2.y

The y position of the joy2 control - any value from 0 (down) to 1 (up). The
joy2 control corresponds to the right analog stick on a standard dualanalog gamepad.

controller.joy3.x

The x position of the joy3 control. The joy3 control usually corresponds to
the directional pad and if so, returns x values of 0, 0.5, and 1 for left,
center, and right.

controller.joy3.y

The y position of the joy3 control. The joy3 control usually corresponds to
the directional pad and if so, returns y values of 0, 0.5, and 1 for down,
center, and up.

controller.b1

The status of button 1 - on (1) or off (0). This is the left button on the front
face of a Logitech Dual Action gamepad.

controller.b2

The status of button 2 - on (1) or off (0). This is the bottom button on the
front face of a Logitech Dual Action gamepad.

controller.b3

The status of button 3 - on (1) or off (0). This is the right button on the front
face of a Logitech Dual Action gamepad.

controller.b4

The status of button 4 - on (1) or off (0). This is the top button on the front
face of a Logitech Dual Action gamepad.

controller.b5

The status of button 5 - on (1) or off (0). This is the top right button at the
back on a Logitech Dual Action gamepad.

controller.b6

The status of button 6 - on (1) or off (0). This is the top left button at the
back on a Logitech Dual Action gamepad.

controller.b7

The status of button 7 - on (1) or off (0). This is the lower right button at the
back on a Logitech Dual Action gamepad.

controller.b8

The status of button 8 - on (1) or off (0). This is the lower left button at the
back on a Logitech Dual Action gamepad.

Keyboard Control
Massive also recognizes keyboard input with the keyboard input channel. This channel returns the ascii value of the
current key being pressed and can also be used for real-time input.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/joystick.html (2 of 2) [13/05/2007 01:38:59]

Massive Manual: Maya Integration

MAYA INTEGRATION

Massive is capable of importing and exporting certain data from Maya through the File->Import Maya ascii, File>Export Maya ascii, and Sim dialog options.

Importing From Maya


Massive can read lights, cameras, skeletons and motion from Maya ascii files (.ma). The dialog box is found in File |
Import Maya ascii. The buttons on the left determine what type of data is to be imported.

Importing Lights
To import a Maya light, select the light, choose File->Export Selection, and export the light as an .ma file.
The subsequent .ma file can be imported into Massive through the Import Maya ascii dialog shown above, with the
"lights" option selected.
Information imported from a Maya camera file include rotation, translation, colour, spot angle (from cone angle in
Maya, for a spotlight), and spot exponent (from dropoff in Maya, for a spotlight).

Importing Cameras
Before importing, a Maya camera should have its animation baked (if animated) and be exported as an .ma file using
File->Export Selection in Maya.
The subsequent .ma file can be imported into Massive through the Import Maya ascii dialog shown above, with the
"cameras" option selected.
Information imported from a Maya camera file include rotation, translation, filmback (called Camera Aperture in Maya),
and focal length.
Once imported, Massive will save out the camera in its own file format (.cam) in the directory specified in the camera

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/maya.html (1 of 3) [13/05/2007 01:39:01]

Massive Manual: Maya Integration

file output directory field. This is where the camera data will be stored.

Importing Skeletons
Any skeleton can be imported directly from Maya. The skeleton should be selected and exported as an .ma file, and
then imported into Massive using the Import Maya ascii dialog with "skeleton" switched on.
The skeleton must be one continuous skeleton descended from one root joint.
Another important thing to take note of is that the root joint's local rotation axis must match the world axis, or agent
curves will not be correctly oriented when applied.

Importing Motion
Maya ascii files containing baked keyframe animation can be imported through the Import Maya ascii dialog with
"motion" switched on. The result will be similar to importing an .amc action through Load->action. See Importing
Actions for more details.
It is important to make sure the keyframes have been baked, and also take note of root axis orientation as mentioned
in "Importing skeletons" above.
Curves imported from Maya which are connected to a joint (such as joint1:rotatex) will be applied directly to that
skeleton segment. All other curves are treated as auxiliary curves, accessible as a brain channel but not immediately
connected to any behavior. See the action curves page for more on different types of curves.
A third type of curve is the blendshape curve. When importing blendshape animation from Maya, the first step is to
import the base mesh and the blend shape meshes, setting them up in a geo node as described in the geo node
page. The geo node must have the same name as the blend shape node in Maya, and the blend shapes within it
should have the same names as the blend shape targets within the node in Maya.
Now, making sure the blendshape keys are baked along with the rest of the keys, save the .ma and import it into
Massive using the Import Maya ascii dialog. If the names match up, the imported blendshape curves will appear as
blue curves in the Action editor and will control the animation of the blendshapes.

Exporting to Maya
Exporting Skeletons
An agent's skeleton can be exported to Maya ascii format by selecting the desired agent and then choosing File>Export Maya ascii from the main menu.
This skeleton is exported in the zero pose. If the intention is to use the skeleton as a reference for modeling and the
bind pose differs from the zero pose, then you will need to write out one frame of animation as a Maya ascii (see
below) and use that as your reference.

Exporting Motion
An agent's motion (skeleton included) can be exported to Maya ascii format through the Sim dialog output option
Sim, selecting "maya" as the file format. See the Sim dialog page for more information.

Exporting Particle Cache


Positions and orientations of all agents in the scene can be exported in Maya particle cache format through the Sim
dialog as well, by choosing the particle output option.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/maya.html (2 of 3) [13/05/2007 01:39:01]

Massive Manual: Maya Integration

See the Sim dialog page for more information.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/maya.html (3 of 3) [13/05/2007 01:39:01]

Paint Editor

PAINT EDITOR

The paint tool is used for painting the RGB channels of the terrain map. The terrain map can be used for placement of
agents (see generators ) and as input data for agents (see terrain ).
The current brush colour is picked by shift left clicking in the view window. There are 3 types of brushes; square
round and soft. These are selected with the 3 buttons at the top of the paint tool. The left mouse button is used for
painting in the view window. Painting only happens when the paint button is on. Apart from clicking on the paint
button, painting can be switched on with the space bar and switched off with a right click in the view window. The left
mouse button paints with colour 1 and the middle mouse paints with colour 2. To select a colour for editing click on it's
swatch next to the paint button.

size

Size of the brush in pixels.

opacity Opacity of brush strokes, 0 - 1.


stipple Amount of stippling of brush strokes. 1 is
maximum stipple.
paint

This button makes painting active in the view


window. While the paint tool is up, the space
bar also switches on painting and right click
switches off painting

Agents themselves can also paint on terrain. See the channels page for details about agent paint channels.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/paint.html (1 of 2) [13/05/2007 01:39:03]

Paint Editor

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/paint.html (2 of 2) [13/05/2007 01:39:03]

Placement

PLACEMENT

Loading a CDL results in the presence of a single original agent in the scene. The most efficient way of creating
multiple agents from one CDL is to create "instances" of the original agent. Instanced agents can differ from the
original agent by the use of agent variables. Instances are made by first generating locators and then calling the
"place" function, either with ctrl-p or the apply button in the Place Editor. The place function creates an instanced
agent at each locator, and hides the orginal agents. To delete the instanced agents from the scene use ctrl-d. After
deleting the instanced agents the original agents become visible again.
Each instance shares data from the original agent to conserve memory and processor resources. An original agent
will get default values for any agent variables. Instances are assigned their own values for the agent variables which
can be used to vary segments, geometry, cloth, shader, textures and behaviour. See variables for more on agent
variables.
Something important to note during placement is that if View->geometry is off (either using the View->geometry
menu option or the alt-m hotkey) at the moment of placing, the geometry is not merely invisible, but is not even
instanced for each agent. This can save considerably on processing time in any circumstance where geometry is not
immediately necessary (such as writing out rib and sim files).
Once agents have been placed with View->geometry toggled off, the only way to view geometry on them is to delete
all the instances with Ctrl-D, toggle View->geometry on, then Ctrl-P to place them again.

Groups
An original agent and it's instances, along with some additional data, constitute a group.
A group contains the following data:

group name
CDL filename (see below)
variables (see below)
locators
a number of instanced agents

CDL filename
The CDL filename refers to the original agent's file. Group and agent in the scene page are associated by this field.
Variables
Group variables can be used to override the agent variables. In this way the same original agent can be used with
different variables in different places in the scene.

Locators
Locators are used to specify the placement of instanced agents in the scene. Each locator stores the starting location,
rotation, and instanced template variables for an agent. Locators are produced by generators.
Locators can be individually edited. The location, rotations and variables of each locator can be modified (see locator

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/place.html (1 of 3) [13/05/2007 01:39:06]

Placement

editor). Editing of a locator results in a locked locator, so called because it's values are no longer affected by
changes to generators. Locators can also be deleted. Deleted locators are not actually deleted but no instance will
be created for a deleted locator even though the locator is still visible. Deleted locators are also unaffected by
changes to generators.
If a locator has it's brain flag switched off then the instance made at the locator will have brain processing switched
off. If a loactor has the replay flag switched on then the instance made at the locator will also have it's replay flag
switched on. When an agent's replay flag is switched on it causes the agent to replay it's motion data as pointed to by
the input sim path, set at the command line or in the sim dialog.
For example, setting replay flags on and brain flags off could be used to mix agents from a previous run of a sim with
active agents. Also switching on both flags could be used for running a secondary pass for dynamics.

locatorlocked locatordeleted locator


locator with
brain flag off

locator with
replay flag on

locked locator
with brain flag
off and replay
flag on

The names of the agents that are to be created for each locator are displayed when agent names is switched on.
Locked locators, killed locators and the brain and replay flags are saved in the setup file.

Generators
There are several different types of generators. They appear as widgets in the view window while the Place Editor is
active. Each type of generator can be used to create locators in different ways.

point

Creates one or more locators at a specific location.

circle

Creates locators within a circular region.

polygon Creates locators within a polygonal region.


spline

Creates a line of locators along a spline, or rows and columns along a spline.

colour

Creates locators on the specified colour on the terrain. This type of generator
requires a terrain map and does not appear as a widget.

A generator can create locators for any combination of the groups in the scene. The number of locators and the ratios
of locators per group are specified in the Place Editor.
Generators are saved in the setup file.

Hierarchical Placement
In addition to placing instances of individual agents, Massive also allows placing of setups in the same way.
First, a setup file (.mas) is loaded through File -> load setup with the "child of current setup" option selected, as below:
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/place.html (2 of 3) [13/05/2007 01:39:06]

Placement

A group will be created for this setup, as well as separate groups for the agents if there is more than one type of agent
in that setup. The group created for the setup now appears as a placeable group in the Place Editor, and can be
placed just like a regular group.

Spawning
Agents can also spawn from other agents using the spawn channel. For spawning to work, there need to be two
existing agents, the spawner and the spawnee. One of the segments on the spawner agent must have the same
name as the group of the spawnee. The group usually has the same name as the agent itself, but this can be doublechecked and changed if necessary in the scene page.
Once these two agents are both loaded into a scene, the output channel:
segment:spawn
where "segment" is the name of both the spawning segment and the spawnee's group, will cause an agent to spawn
every time it is triggered.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/place.html (3 of 3) [13/05/2007 01:39:06]

Place Editor

PLACE EDITOR

The place editor is used for creating and editing generators. Generators generate locators. Locators specify the
locations of all instanced agents in the scene. See place for details.

generator

These buttons specify the type of generator. The button on the


right switches between dragging generators and dragging
generator points.

number

Number of locators to be generated

distance

Distance between locators

noise

Jittering of locators

noise frequency

Frequency of noise used for jittering

angle

Angle of locators about Y axis

angle variation

Variation of angle about Y axis

height

Height above terrain of locators

height variation

Variation of height above terrain

orient to flow field Set angle about Y to align locator with flow field
orient to terrain

Lean locator Y axis to be perpendicular to terrain

rows and columns

This is used for point and spline generators to create grids of


locators.

groups

Slider for adjusting ratios of groups in generator

scrolled list
of groups

Clicking on a group toggles it's inclusion in the generator

add | delete

These buttons are used to add or delete generators.

no update

Switches off generation of locators for faster interaction

fast

Switches off distance constraint when generating locators

full

Selects full updating of locators when editing generators

place

Creates an instanced agent at each locator

A group exists for any CDL that has been read into the scene, or any setup file (.mas) that has been loaded with the
option "child of current setup". Groups appear as nodes in the scene page where they can be edited. The CDLs may

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/place_tool.html (1 of 2) [13/05/2007 01:39:10]

Place Editor

have been specified on the command line or from the load CDL dialog or by reading a setup file. Locators are
coloured according to the group colours.
To put locators into the scene, select a type of generator, click on the add button (or press the space bar) and left click
in the view window. A single click is all that's required to create a point generator, see the table below for other types
of generators. Adjust the number slider or type a number into the number field beside the slider to set the number of
locators that the generator generates.
This table describes the steps required to make a generator after clicking on the add button (or pressing the space
bar):

generator type

creation steps

point

Left click in the view window

circle

Left drag in the view window. The start of the drag operation
determines the centre of the circle.

polygon

Left click in the view winodw, once for each vertex of the polygon.
Right click to finish.

spline

Left click in the view window, once for each control point of the spline.
Right click to finish.

colour

Left click on a colour on the terrain in the view window.

Selection
Once a generator has been made it can be selected by shift left clicking on the generator's widget in the view window.
Colour generators are selected by shift left clicking on the colour on the terrain.
To add to a selection shift middle click on a generator. See the message line in the icons window for mouse function
hints.
Generators can be lasso selected by shift draging around them in the view window.
Dragging
Generators can be moved by shift left dragging. The button in the top right corner of the place editor selects between
dragging of the selected generators and dragging of a single point of the current generator. For the point generator
this makes no difference, for the circle generator it allows dragging of the edge of the circle to change the radius, and
for the polygon and spline generators it allows for dragging of the individual points.
Groups
Each generator has a list of groups for which it will generate locators. The list can be changed by clicking on the
groups in the scrolled list. In this way it is possible to generate locators for different types of agents from a single
generator.
The number of locators generated for each group is determined by the number value of the generator and the ratios in
the groups slider.
By default the ratios are even. The ratios can be changed by dragging the bars in the groups slider.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/place_tool.html (2 of 2) [13/05/2007 01:39:10]

Locator Editor

LOCATOR EDITOR

The Selections Tab


A selected set of locators can be named and saved in the
selections tab in the Locator Editor.
To select locators shift left click on a locator or left drag a
selection lassoo around locators. To add to a selection use shift
middle click or drag, and to subtract from a selection use alt shift
middle click or drag. The message in the lower left corner of the
icon work area displays the current functions of the mouse
buttons.
Once you have selected all the locators you wish to make into a
set, click add in the selections tab to create the set. To change
the name of the set (default: "new"), type the new name in the
text field.
To change which locators are assigned to the selection set,
select the set, select a new group of locators in the view
window, and click the set button to replace the old selection.
Click delete to delete a selection set.

One or more selection sets can be specified in the command


line with the -s option. This way, certain sets of agents can be
selectively processed in multiple passes.

The Edit Tab


The locator edit tab affects all selected locators. Changing any values for a locator causes the locator to become
locked. Once locked, any changes made to the generator that generated the locator will not affect the locator.*

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/locator_editor.html (1 of 3) [13/05/2007 01:39:12]

Locator Editor

Selection
To select locators shift left click on a locator or left drag a selection lassoo around locators. To add to a selection use
shift middle click or drag, and to subtract from a selection use alt shift middle click or drag. The message in the lower
left corner of the icon work area displays the current functions of the mouse buttons.
Locators can also be selected for editing by selecting a locator selection set in the selections tab, then returning to
the edit tab.

Moving
To move locators left drag on the locator to be moved. If multiple locators are selected then the other selected
locators will also be dragged. Locators are moved along the terrain and can be dragged across gaps in the terrain.
When multiple locators are selected any changes made to the values in the locator editor are applied relatively to all
selected locators. For example if there are multiple locators selected that all point in different directions and the ry
slider is moved then the amount that it is moved is added to the ry values of all of the selected locators, and they don't
all end up pointing in the same direction.
Deleted locators are not actually deleted but they become placeholders to prevent the instancing of an agent at their
location.
To unlock or undelete a locator click on the free button.

locator

The locator name field is not editable.

free

Unlocks locked locators and undeletes deleted


locators

lock

Locks selected locators

delete

Sets the delete flag for selected locators. Does not


actually delete locators but causes them to be
ignored when placing instanced agents

brain

Controls the locator's agent brain processing flag

replay

Controls the locator's agent motion replay flag

rx ry rz

These sliders are for editing the locator's orientation


in world space

height offset

This slider is for editing the locator's height above the


terrain

Scrolled list of template variable values

select all

This button selects all locators in the scene

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/locator_editor.html (2 of 3) [13/05/2007 01:39:12]

Locator Editor

*What actually happens is slightly more complicated; the locators are all regenerated and an edit list of locked locators
is aplied to the new locators to ensure that locked locators with the locked values appear at the appropriate locations.
It's a subtle difference but it helps to explain some otherwise strange behaviour.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/locator_editor.html (3 of 3) [13/05/2007 01:39:12]

Rendering

RENDERING

Agent geometry and terrain geometry can be rendered using RenderMan renderers. Massive explicitly supports Air,
3Delight, and Pixar's Prman renderer. Agent geometry is specified and attached to agents using geometry and cloth
nodes. Nothing is rendered for an agent if there are no geometry or cloth nodes. Shaders are specified and assigned
to geometry with material nodes in the body page. Terrain shader assignment is accessible from the Terrain menu.
Light shaders can edited in the light node and they can also be generated automatically from the OpenGL light
parameters.

PREVIEW RENDER
To generate a preview render of the scene as it is select Render from the Camera menu. The renderer can be
selected under Render in the Options menu.

SEQUENCE RENDER
The Sim dialog is used to generate a sequence of RIB files. If the ribs button is on then RIB files will be generated
when the go button is clicked. The padding of frame numbers in the filenames of the generated RIB files is specified
by the use of '@' or '#' characters. e.g.
pattern

Rib/a@.rib

Rib/a#.rib

Rib/a###.rib

padding

filenames

no padding

Rib/a1.rib
Rib/a2.rib
.
.
.
Rib/a10.rib

4 digit frame numbers

Rib/a0001.rib
Rib/a0002.rib
.
.
.
Rib/a0010.rib

number of digits equal to number of #'s

Rib/a001.rib
Rib/a002.rib
.
.
.
Rib/a010.rib

Several types of RIB files are written when the Sim dialog is run.

One file per frame is generated for each light that requires a shadow map. (Example: a._key0001.rib)
One agents archive RIB file is generated per frame, each file containing one procedural primitive call for each

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/rendering.html (1 of 3) [13/05/2007 01:39:15]

Rendering

agent. (Example: a._archive0001.rib)


A terrain archive RIB file is generated. (Example: a._terrain.rib)
One master RIB file is generated per frame, containing links to the files above. (Example: a.0001.rib)

The resultant RIB files do not contain the geometry and shader data for the agents. Instead they contain
procedural primitive calls. The programs required to generate the geometry and shader data during the render are
supplied with Massive. Huge savings in disk space and memory usage are realised by using procedural primitives in
this way.
The procedural primitive programs will refer to the set of motion files or "sim" for the sequence. These files may have
been generated previously or may be generated while writing out the RIB files. Either way it's essential that they exist
when rendering.
If the agents have cloth then the cloth also needs to be output as .mgeo files before the sequence can be rendered,
otherwise the cloth primitive will all be in their rest pose in the final images.
Another important thing to take note of is that RIB archive bounding boxes are generated based on the extents of the
segments, rather than the extents of the geometry. If the bounding boxes being generated are too small, segment size
should be adjusted to better match the geometry.

RENDER OPTIONS
renderer
When Prman is selected all texture maps referenced
by shaders should be in Pixar's .tex format. The
massive.so procedural primitive DSO will be called
during the render to generate geometry and shader
data for the agents.
When Air is selected all texture maps should be in .tif
format. run_program.exe will be called during the
render.
When 3Delight is selected all texture maps should be
in .tif format.
resolution
The resolution can be set to predetermined values or
to custom values. When set to custom the resolution
dimensions are editable. When set to viewport the
resolution dimensions track the size of the view
window.
pixel samples
Pixel samples corresponds to the RenderMan
RiPixelSamples options.
shading rate
Shading rate corresponds to the RenderMan
RiShadingRate attribute. The rate specifies the area in
pixels per shading sample. A value of 1 indicates at
least once per pixel.
shadows

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/rendering.html (2 of 3) [13/05/2007 01:39:15]

Rendering

When this button is off no shadows will be rendered.


shadow bias
Sets the shadow bias used to adjust the quality of shadow mapped shadows.
motion blur
When this button is on motion blur will be computed for the camera and agents. Shutter open and close specify the
fraction of the frame for which the shutter is open when using motion blur.
shader path
The shader path specifies the location of custom shaders. The shader path can contain multiple colon separated
paths. The eventual shader search path specified in the RIB files is a combination of the user specified shader path
along with the default shader path. The default shader path for Prman is $RMANTREE/lib/shaders/ and the default
shader path for Air is $AIRHOME/shaders/. If the RMANTREE or AIRHOME environment variables have not been set
then the corresponding default shader paths will not be specified in the RIB files.
e.g. Setting RMANTREE to /opt/pixar/prman-11 and shader path to /shaders would result in a shader search
path of /opt/pixar/prman-11/lib/shaders:/shaders/
The shader path can be set with the RMAN_SHADER environment variable. This setting will be overidden by any
shader path found in a .mas file.
terrain
The terrain render button toggles rendering of terrain. The shadows button toggles casting of shadows by the terrain.
The hold out button sets the matte object attribute for the terrain. When hold out is on agents are obscured by the
terrain but the terrain does not appear in the render.
displ bounds
The displ bounds slider specifies the displacement bounds for the terrain.

PROCEDURAL SEARCH PATH


So that the renderer can find the procedural primitive programs the procedural search path is specified in the RIB files.
This path is based on the MASSIVE_HOME environment variable. If the variable is set to /usr/local/massive then the
procedural search path will be /usr/local/massive/bin. If MASSIVE_HOME is not set then procedural search path will
be set to /usr/local/massive/bin.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/rendering.html (3 of 3) [13/05/2007 01:39:15]

Sim Dialog

SIM DIALOG

The sim dialog is used to run a simulation or sim. The sim dialog allows the user to specify the different types of data
that are read in or written out when running a sim.

INPUT
Input files can be:

Motion from a previous run of the sim in any of four forms of data
Acclaim Motion Capture (.amc)
Compressed .amc (.amc.gz)
AMC, 1 file per frame (.apf)
Compressed .apf (.apf.gz)
Just the directory containing the motion files needs to be specified.
Cloth simulation data from a previous run of the sim, in .mgeo (Massive cloth) format.
A camera file. This will override the cameras in the scene.

OUTPUT
Output files can be:

Motion in any of five forms of data:


Acclaim Motion Capture (.amc)
Compressed .amc (.amc.gz)
AMC, 1 file per frame (.apf)
Compressed .apf (.apf.gz)
Maya ascii (.ma)
The directory in which the files are to be written needs to be specified.
Cloth animation in .mgeo format. Again just the directory needs to be specified.
Maya particle cache file format. The motion of all the agents is saved, with each agent represented by a particle.
A camera file. The current camera is written to the specified file.
A callsheet. A callsheet is an ascii file listing all of the agents in the scene, one per line.
RIB files in the form of shadow ribs, agent archive ribs and a beauty rib per frame. A sample render script is
also generated in the current directory. The specified filename can contain @for no padding of digits, or # for 4
digit numbering, or several #'s to indicate the number of digits to use.
Tiff or JPEG images rendered in OpenGL in the view window. If writing out JPEG files, the compression can be
adjusted under Options -> Image compression in the main menu.

Sim Dialog Window

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/sim.html (1 of 3) [13/05/2007 01:39:17]

Sim Dialog

The brains button can be used to switch off all


processing of agent brains during the sim.
Specifies the input of .amc files.
Specifies the .mgeo cloth file to use as input.
Specifies the camera file to use.
Specifies the output of .amc files
Specifies the output of .mgeo cloth files.
Specifies the output for Maya particle cache
files.
Specifies the output of a camera file.
Specifies the output of a callsheet.
Specifies the output of RenderMan RIB files.
Specifies the output of OpenGL rendered .tif or .
jpg images as seen in the view window.

The go button starts the sim running.

Negative start frames can be used if the camera file doesn't allow sufficient run up.
It's often useful to break a sim into passes. The first pass would be just the overall action of the agents. The second
pass might be the cloth and attached rigid body dynamics. A third pass could be used for writing out rib files.
Note that the second pass need not contain all of the agents. Running just one agent at a time makes it easy to farm
out the dynamics to multiple machines.

Command Line Sim


Sims can also be run straight from the command line using the following options.
-sim start-end

frame range for sim I/O, also causes auto execution of sim.

-iapf path

specify an apf sim input path

-iapfz path

specify a compressed apf sim input path

-icloth file

path for cloth input files

-isim path

See -iamc

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/sim.html (2 of 3) [13/05/2007 01:39:17]

Sim Dialog

-iamc path

specify an amc sim input path

-iamcz path

specify a compressed amc sim input path

-oapf path

specify an apf sim output path

-oapfz path

specify a compressed apf sim output path

-ocall file

write a callsheet named file at start of sim.

-ocloth file

path for cloth .obj files for sims

-orib path

path for rib output files for sims

-osim path

See -oamc

-oamc path

specify an amc sim output path

-oamcz path

specify a compressed amc sim output path

-opics pattern

specifies pictures to be written during sims. eg: Pic/a@.rgb

For example, the command:


massive plod.mas -gui -sim 1-20 -oamc Sim -orib Rib/plod.#.rib
would cause Massive to run a sim of the first 20 frames of plod.mas without opening the application gui (-gui), creating
output in the form of .amc files in a directory called Sim, as well as rib files in the format of plod.#.rib in the Rib
directory.
Important note: It can seem intuitive to include -geo (display geometry) as an option when writing out files in
preparation for rendering, but as noted on the rendering page, no agent geometry information is saved in the rib files.
That information is obtained by referring to the actual cdl file during the render. Therefore, rib and sim files write out
perfectly well without instanced geometry, and this quite often saves a lot of time.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/sim.html (3 of 3) [13/05/2007 01:39:17]

Sound

SOUND

Agents can emit sounds which are transmitted to all other agents within audible range. The range is dependent on the
amplitude of the sound. Amplitudes are measured in dB SPL at 1 meter from the object origin. 0dB represents the
threshold of audible sound and 120 dB represents the threshold of pain, so most sounds should be emitted within this
range. If the receiving agent is within 1m then the sound is received at the 1m level. The frequency of sound can vary
over the entire floating point range but physically realistic values are encouraged (positive values from 100 Hz to 20
KHz). Sounds diminish over distance due to spherical radiation and all frequencies diminish similarly. So far media
transmission loss is not modeled. The receiving agent has a number of sound registers in which incoming sounds are
stored. When the number of audible sounds exceeds the number of registers, louder sounds overwrite quieter sounds.
Currently the sounds are only audible to other agents.

TRANSMITTING SOUND
Setting amplitude and frequency are all that is required for an agent to produce sound. To see a graphic
representation of the sounds being emitted select the sound emission item from the View menu. A ring describing
the 0 dB level of each transmitted sound is displayed coloured according to frequency.
Here is the list of output channels that can be used in output nodes for sound transmission:
sound.a

amplitude in dB SPL

sound.f

frequency in Hz

sound.f1f

frequency of 1st formant

sound.f1a

amplitude of 1st formant

sound.f2f

frequency of 2nd formant

sound.f2a

amplitude of 2nd formant

RECEIVING SOUND
Fuzzy AND nodes which depend on information from sound channels are called sound rules. Sound rules differ from
ordinary rules in that they are applied to all of the sounds that the agent can hear, and then the node is assigned the
maximum value obtained over all of the sound sources.
For example, a sound AND rule with the inputs "near" (from sound.d) and "left" (from sound.x) would activate only if a
single target was heard both near and to the left. If the agent heard only a target near but not left, and at the same
time heard another left but not near, the rule would not activate.

IMPORTANT NOTE: Sound rules only work properly when the connections are: input -> fuzz -> AND ->. Connecting
a sound fuzz node directly to a defuzz node will not work properly. Connecting sound rules as the input to further AND
nodes works fine.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/sound.html (1 of 3) [13/05/2007 01:39:20]

Sound

When editing a fuzz node that has a sound input, the values of all of the sounds that the agent can currently hear are
displayed as vertical lines in the background of the membership graph, coloured according to frequency. This display
can be disabled by deselecting the fuzz background item in the Fuzzy menu.
To see data in the view window from the sounds that an agent can hear select the sound reception item from the
View menu. A list of sound register data is displayed above each agent.
As an aid to debugging brains, an input node that connects to nothing but refers to a sound channel will receive the
value for the loudest audible sound.
Here is the list of input channels used for sound reception:
channel

description

min

max

sound.a

amplitude at the receiving agent

inf

sound.f

frequency (same as emmiting agent


since no doppler effect)

inf

sound.f1f

frequency of 1st formant

inf

sound.f1a

amplitude of 1st formant

inf

sound.f2f

frequency of 2nd formant

inf

sound.f2a

amplitude of 2nd formant

inf

sound.x

polar coordinate about the Y axis of


sound source

-180

180

sound.y

vertical polar coordinate of sound source

-90

90

sound.d

distance of sound source

sound.o

relative orientation of sound source

-180

180

sound.ox

polar coordinate about Y axis of relative


orientation

-180

180

sound.oy

vertical coordinate of relative orientation

-90

90

The channels sound.a, sound.f, and sound.d can be used in input nodes with the speed button on. This provides
the value of the change of amplitude, frequency and distance rather than the absolute values. Currently this does not
work with any other sound channels.
When the channels sound.a, sound.f, and sound.d are used in input nodes, there is also the choice of the average
and max buttons. The max button causes AND/OR rules referring to this input to use the value of the single input with
the highest value. The average button causes AND nodes referring to this input to use the average value of inputs that
fit any other descriptions connected to the AND.
For example, suppose sound.x has a fuzz node called 'right' and sound.d has a fuzz node called 'near', combined in
an AND rule called 'right' and 'near'. If the sound.x input node is set to average, and the sound.d input node is set to
max, then the 'right' fuzz node will pass to the AND node the average value of everything heard to the right that is in
the 'near' range.
This is good for having agents follow the trend of a group rather than follow the nearest individual. Note that only one
of the inputs should be set to 'average'. The others will set the range of which inputs are averaged.

IMPORTANT NOTE: The sound.a, sound.f1a, and sound.f2a inputs are not recommended for determining distance.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/sound.html (2 of 3) [13/05/2007 01:39:20]

Sound

In order to detect distance, use the channel sound.d.

The channel sound.d is not entirely realistic but was included largely because our own hearing provides us with some
information concerning the distance of sound sources. The relative orientation channels (sound.o sound.ox and sound.
oy) were included for convenience only.
The sound.d channel is mapped to world values in the same exponential scale as vision.z using the following formula.
d = exp(-z_factor * distance)
This maps distant sounds to 0 and close sounds to 1. So it might help to think of sound.d as closeness.

SOUND OUTPUT
You can actually output the agents' sounds through your speaker as well. In order to do this, open the Sound Output
dialog by selecting Options->sound output through the main menu.

The mute button is on by default. Unselect it in order to hear sound.


The sounds you hear are the sounds being heard by the selected agent.
Select sync to ensure that the timing of the speaker sounds is synced with the timing of the agents generating the
sounds.
Select solo to hear only the sound made by the currently selected agent.

SOUND AND VISION


Rules that have vision channels as inputs are a special case because the entire image is scanned for each of these
rules, so that the pixel that best satisfies the referenced fuzzy values is used as input. Rules which have sound and
vision rules operate as if they were a rule with vision inputs ANDed with a rule with sound inputs. There is no
correlation between pixels in the vision source and sound sources so if a rule combines sound inputs with vision
inputs, the results may not be as expected, since the chosen sound source might not correlate to the chosen image
pixel.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/sound.html (3 of 3) [13/05/2007 01:39:20]

Terrain

TERRAIN

A terrain model can be loaded from the load terrain dialog available from the File menu or from the command line.
The filename will be saved in the setup file. Terrain models are polygonal Wavefront .obj files. They do not need to be
a single continuous mesh. If texture coordinates are present they will be used for mapping terrain texures.

TERRAIN MAPS
Terrain texture maps can be loaded from the load terrain map dialog and are applied with an XZ orthographic
projection unless texture coordinates are present in the terrain model. Texture images should be in Tiff format.
The alpha channel is used for storing flow field data. If there is no flow field then the alpha channel can be used for
arbitrary data.
Terrain texture maps have no effect on what appears in the render.

TERRAIN SHADERS
Shaders can be assigned to terrain using a dialog similar to the one for assigning shaders to a material node.

This dialog is available from the main menu, through [ Terrain -> RenderMan shader ]. Displacement shaders can be
assigned through [ Terrain -> RenderMan displacement ].

TERRAIN CHANNELS
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/terrain.html (1 of 2) [13/05/2007 01:39:22]

Terrain

There are several object and segment channels which can be used in input nodes to get local information
about the terrain.
ground

terrain height beneath the segment or agent measured in agent space

ground.dx

gradient of terrain with respect to agent X

ground.dz

gradient of terrain with respect to agent Z

ground.r

terrain red channel directly beneath agent (0 to 1).

ground.g

terrain green channel

ground.b

terrain blue channel

ground.a

terrain alpha channel

ground.flow

terrain flow direction relative to agent orientation

ground.r.dx

gradient of terrain red channel with respect to agent X

ground.g.dx

gradient of terrain green channel with respect to agent X

ground.b.dx

gradient of terrain blue channel with respect to agent X

ground.r.dz

gradient of terrain red channel with respect to agent Z

ground.g.dz

gradient of terrain green channel with respect to agent Z

ground.b.dz

gradient of terrain blue channel with respect to agent Z

Ground channels work for agents and segments whereas the ground colour, flow, and colour gradient
channels only work for agents.
eg:
ground.r.dxl_foot:ground

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/terrain.html (2 of 2) [13/05/2007 01:39:22]

Variables

VARIABLES

Variables are used to store data, usually a number. Some variables, such as time, are predefined variables and are
set by the program. Brain variables are set in output nodes in the brain. Agent variables are used for variation when
making instanced agents (see Placement) and are created in the variables tab of the agent node in the body page.
Predefined variables, brain variables and agent variables can all be referenced in input nodes, whether alone or in
expressions.

Predefined variables
The values of these variables are set by the program:
variable

description

time

The simulation time in seconds.

id

The unique id number for the agent.

input

The input value to an input node.

keyboard

The ascii value of a key that was pressed. The value is zero if no key has been
pressed. A keypress gives a value for one frame.

Brain Variables
When an output node sends a value to a channel that does not exist then a brain variable is created to store the
value. This variable is then available for use in input nodes. Brain variables are floating point so they can be
fractional and can vary from very large negative numbers to very large positive numbers. The value of a brain variable
is undefined after reset and will be reported as 0 if referenced in an input node on the first frame.
Brain variable names can be any string that does not start with a number, does not include a space, and does not
match an existing channel or variable name.

Agent Variables
Agent variables are used by the program when creating instanced agents. They are stored in the CDL files as part of
the agent.

Agent variable values can be set in two ways:


http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/variables.html (1 of 2) [13/05/2007 01:39:23]

Variables

They can be assigned a default value and a range over which they can vary.
They can be assigned an expression which may refer to another variable. (Note, if this is the case, the variable
to which the expression refers must appear before the current variable in the list. This is in order to prevent
circular references.)

When locators are generated (see Placement) the agent variables are given values for each locator. Then when
agents are instanced at the locators the instanced agents receive the variables from the locators. These agent
variables may be used to provide variation in the segments, geometry, cloth, shaders, textures and behaviour of the
agents.
Agent variables are created and edited in the body page. Click on the background to access agent parameters such
as agent variables.
Agent variable names, like brain variables, can be any string that does not start with a number, does not include a
space, and does not match an existing channel or variable name.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/variables.html (2 of 2) [13/05/2007 01:39:23]

Vision

VISION

Vision is implemented as a scanline render that is processed by fuzzy rules. Colours can vary continuously between
white, red, yellow, green, cyan, blue, magenta and black. The vision is rendered every frame for each agent that has
any references to vision channels and does not have vision.active set to zero. The point of view is the origin of the
segment referred to in the vision channels. The line of sight is the +ve z axis of the segment.
The vision information is available to the fuzzy network through 5 input channels:

channel

description

min

max

vision.x

horizontal scan position offset to align


with agent space +ve z axis

-1

vision.y

vertical scan position

-1

vision.z

distance

vision.h

hue or colour

vision.i

horizontal scan position in image space

-1

vision.active

switches vision off if set to zero

Here's an example vision channel as it would appear in an input node:


head:vision.x
The channels vision.x, vision.y, and vision.z can be used in input nodes with the speed button on. This provides the
value of the change of location and distance rather than the absolute values.
When the channels vision.x, vision.y, and vision.z are used in input nodes, there is also the choice of the average
and max buttons. The max button causes AND/OR rules referring to this input to use the value of the single input with
the highest value. The average button causes AND nodes referring to this input to use the average value of inputs that
fit any other descriptions connected to the AND.
For example, suppose head:vision.x has a fuzz node called 'right' and head:vision.z has a fuzz node called 'near',
combined in an AND rule called 'right' and 'near'. If the head:vision.x input node is set to average, and the head:vision.
z input node is set to max, then the 'right' fuzz node will pass to the AND node the average value of everything seen to
the right that is in the 'near' range.
This is good for having agents follow the trend of a group rather than follow the nearest individual. Note that only one
of the inputs should be set to 'average'. The others will set the range of which inputs are averaged.
The vision.active channel is an output channel for switching vision processing on or off. The default value for this
channel is on so it does not need to be set for vision to work.
The scan area can be fuzzified into fuzzy zones (eg: upper left) by connecting fuzz nodes with the appropriate
membership functions. The fuzzy zones can be combined with other vision channels in rule nodes. Rule nodes which
rely on vision information are called vision rules. Instead of being applied to one set of fuzz values, the entire image
area is scanned and the greatest value found for the rule is used as the rule's output.
For example, a vision AND rule with the inputs "near" (from segment:vision.z) and "left" (from segment:vision.x) would
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/vision.html (1 of 2) [13/05/2007 01:39:25]

Vision

activate only if a single target was seen both near and to the left. If the agent saw only a target near but not left, and at
the same time saw another left but not near, the rule would not activate.

IMPORTANT NOTE: Vision rules only work properly when the connections are: input -> fuzz -> AND ->. Connecting
a vision fuzz node directly to a defuzz node will not work properly. Connecting vision rules as the input to ordinary
rules works fine.

In most cases the fuzzy zones should be defined using vision.x and vision.y. This causes the sense of direction to be
aligned with the object z axis. To implement eye tracking (or head tracking) use the vision.i (image space x) channel
instead of the vision.x channel.
Any number of rules can be used with vision channels, and non-vision channels can be combined with vision
channels.
The colour values are as follows:
0.0

white

0.1

red

0.2

yellow

0.3

green

0.4

cyan

0.5

blue

0.6

magenta

0.7

red

0.8

black

The vision.z channel is mapped to world values in the same exponential scale as sound.d using the following formula.
z = exp(-z_factor * distance)
This maps distant pixels to 0 and close pixels to 1, as if distance was related to intensity of a depth image. The
z_factor variable is stored in CDL files.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/vision.html (2 of 2) [13/05/2007 01:39:25]

Wind

WIND

Wind in Massive affects dynamics and the local wind values can be read in input nodes in the brain. The wind defines
the speed and direction of the atmosphere at any point in the world and therefore affects the drag forces that are
exerted on any dynamic segments. The wind can be visualized by switching on Wind under the View menu.

There are 5 parameters that affect the wind.


They are controlled by outputting values to the
wind channels from an output node. Note that
this means that any agent in the scene could be
setting wind values, but the last one to to set the
wind values actually controls it.
The overall wind speed and direction is the wind
velocity and is set by wind.x, wind.y and wind.z.
These are listed below with simplified terms in
brackets.

wind.x (sideways speed)

The X component of the wind velocity.

wind.y (vertical speed)

The Y component of the wind velocity.

wind.z (forward speed)

The Z component of the wind velocity.

wind.a (gust intensity)

This specifies the amplitude of the noise which produces variation in the wind.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/wind.html (1 of 2) [13/05/2007 01:39:28]

Wind

wind.f (gust speed)

This specifies the frequency) of the noise which produces the variation.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/wind.html (2 of 2) [13/05/2007 01:39:28]

Command Line Options

COMMAND LINE OPTIONS

-aa

switch on antialiasing.

-act file

load an action .act file.

-alf

output alfred progress.

-amc file

load an Acclaim .amc file.

-amcrate n

sample rate for acclaim import (default 60.0).

-apf

write out .apf files instead of .amc files

-bg r g b

bg colour triple 0-1.

-bgpic file

load a background picture for the view window

-bind file

load a bind pose action or .amc file.

-blur samples

switch on motion blur and specify number of samples.

-bones file

load a bones file.

-brains

do not process brains during sims

-bvh file

load a .bvh format file.

-call file

specify a callsheet to read.

-camN file

load a massive .cam file into camera N where N is from 1 to 8

-collide

switch off collision detection.

-compare file

specifies an asf or cdl to compare to the input asf or cdl

-cm

set units to cm

-fps

set simulations frames per second.

-g file

load a geometry file.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/command.html (1 of 3) [13/05/2007 01:39:30]

Command Line Options

-geo

display polygonal geometry

-geometry [W][xH][+X][+Y]

size and location of main window.

-grid

switch off grid display.

-gui

no windows (except vision window).

-h

lists command line options.

-iapf path

specify an apf sim input path

-iapfz path

specify a compressed apf sim input path

-icloth file

path for cloth input files

-inch

set units to inches

-isim path

See -iamc

-iamc path

specify an amc sim input path

-iamcz path

specify a compressed amc sim input path

-loops

allow recursive networks.

-m

set units to metres.

-n first-last

range of agents to process.

-net g

network group number.

-o file

set output .cdl filename.

-obj file

load an obj file as agent geometry.

-oapf path

specify an apf sim output path

-oapfz path

specify a compressed apf sim output path

-ocall file

write a callsheet named file at start of sim.

-ocloth file

path for cloth .obj files for sims

-old_numbers

use Alpha 10 version of locator creation function

-orib path

path for rib output files for sims

-osim path

See -oamc

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/command.html (2 of 3) [13/05/2007 01:39:30]

Command Line Options

-oamc path

specify an amc sim output path

-oamcz path

specify a compressed amc sim output path

-opics pattern

specifies pictures to be written during sims. eg: Pic/a@.rgb

-place

place agents on loading

-posfile file

dir used for net work simulations.

-quiet

inhibit expresssion and script error messages.

-res x y

specify view window resolution.

-s selection

selection set to process.

-shadow

switch off shadows

-shadow_colour r g b

specify shadow colour with a range of 0-1 for r g and b.

-shutter x

specify shutter angle with a range of 0-1.

-sim start-end

frame range for sim I/O, also causes auto execution of sim.

-single

select single buffer view window

-standin

display standin primitives.

-terrain file

load a terrain mesh from file.

-time

switch off time display

-v

verbose, prints progress to stdout

-z min max

set zmin and zmax for perspective projection.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/command.html (3 of 3) [13/05/2007 01:39:30]

Keyboard Shortcuts

KEYBOARD SHORTCUTS

Esc

Close a dialog window

Tab

Select the next fuzz node sharing the same input.

Left arrow

Select previous point in curve or fuzz membership

Right arrow

Select next point in curve or fuzz membership

Up arrow

Select previous curve or fuzz node

Down arrow

Select next curve or fuzz node

Page up

Cycle through the pages in the icon window (scene,


brain, body, motion)

Page down

Cycle the other way through pages in the icon


window

Delete

Delete selected nodes or curve points

Spacebar

Run/stop unless painting, placing or flow field


editing.

Reverse actions for one frame

Run for one frame

Alt key shortcuts:


a toggle segment axes display
A toggle agent axes display
b toggle blocky display
B toggle bounds display
c

copy selected nodes

C toggle fuzzy connected hilighting


d disable selected icons
e enable selected icons
E enable all icons
f

toggle camera follow

F toggle camera follow filter


g collapse selected nodes into a macro
G expand selected macro
i

toggle display IK hold

toggle sticks display mode

m toggle display geometry


n display segment names
N display agent names
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/shortcuts.html (1 of 2) [13/05/2007 01:39:31]

Keyboard Shortcuts

o next agent (object)


O prev agent (object)
p toggle agent p.o.v display
P toggle agent p.o.v display
q quit
r

reset

toggle shade

S toggle shadows
u undo (only for action editor)
U redo (for action editor)
v

paste nodes (works between mutiple massive sessions)

V view all objects


w write current camera
x

toggle selected nodes as IO nodes for macro

@ toggle show sound transmission


# toggle show collision optimisation grid
*

save skeleton polygons

Ctrl key shortcuts:


a frame all nodes
s frame selected nodes
d delete all instance agents from the scene
p place instance agents into the scene

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/shortcuts.html (2 of 2) [13/05/2007 01:39:31]

Importing Motion

PYTHON SCRIPTING

Python scripting through the Massive textport allows the user to access many functions of Massive with customized
scripts. The textport is accessed from the main menu, through [ Options -> textport ].

SETUP
Two versions of Python are supported with Massive, Python 1.5 and Python 2.2.
Python 1.5 is selected by default when starting Massive. To change to the Python 2.2 scripting implementation, from
the textport enter:
#!pyscript22
To return to Python 1.5, type:
#!pyscript15
You will need to have Python installed in 'the usual place'. This is off /usr in a standard Redhat distribution. If this is not
the case then the PYTHONHOME environment variable must be set (you will get a warning on stdout when you start
Massive if this is the case):
export PYTHONHOME=/usr
Where '/usr' is where the base of the Python installation is.
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (1 of 15) [13/05/2007 01:39:35]

Importing Motion

GENERAL
Single line scripting commands are evaluated as soon as 'enter' is pressed. Entering:
>print 1+2
results in:
3
Multiple lines must follow the correct Python indenting rules. The heuristic that decides whether something is 'multiple line'
is if it starts with one of these keywords: for, if, while, class or def. A multiple line statement ends when 'enter' is pressed
on an empty line.
The following multiple line statement:
>class Blah:
. def write(self, message):
. massive.text_port_out(message)
.
creates a class that can be called in a following statement:
>Blah().write("test\n")
which results in the output:
test
Note the 'dot' character is the prompt for multiline statements.
To run a script from a file, use this command in the textport:
execfile("make_ik.py")
where "make_ik.py" would be the name of your script file.

FUNCTIONS, CONSTANTS, METHODS, AND ATTRIBUTES


http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (2 of 15) [13/05/2007 01:39:35]

Importing Motion

The following functions, constants, methods, and attributes in Massive are accessible through Python scripting and can
be called in your script.

GLOBAL FUNCTIONS
All global functions are in fact located under a 'massive' namespace but all items in this namespace are loaded
automatically so you don't need to prefix things with 'massive'. The following is a list of the global functions available:
FUNCTION

DESCRIPTION

text_port_out(text)

Output text to the text port. This is unlikely to be used as all standard output goes to
the textport anyway (which is implemented using text_port_out):
>text_port_out("Hello Massive!\n")
Hello Massive!

reset_all()

Resets the simulation, same as Run -> reset in the main menu, or the alt-r shortcut.
>reset_all()

find_agent(name)

Find and return the agent with the given name. If no agent with that name exists,
returns 'None'.
>print find_agent("man")
Agent{man}

get_agents()

Massive stores agents as a linked list. This function returns the first agent in that list.
>print get_agents()
Agent{man}

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (3 of 15) [13/05/2007 01:39:35]

Importing Motion

find_group(name)

Find and return the group with the given name. If no group with that name exists,
returns 'None'.
>print find_group("test")
Group{test}

quit()

Exits Massive.
>quit()

redraw_view()

Redraws the View window.


>redraw_view()

next_frame(integer)

Advances to the next frame. The argument indicates whether or not there is a forced
wait (1: so the simulation runs no faster than real time) or no wait (0: the simulation will
run as fast as Massive can perform the calculations).
>next_frame(1)

str_to_order(string)

Converts a string of transformation channels to a number used internally by Massive to


represent a segment's transformation order.
>print str_to_order("tx ty tz rx ry rz")
42798

noise1(float)

Applies a one-dimensional noise function to a float and returns the result as a float.
>print noise1(0.5)
-0.1396484375

noise2(float,float)

Applies a two-dimensional noise function to two floats and returns the result as a float.
>print noise2(0.5,0.5)
-0.0204986333847

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (4 of 15) [13/05/2007 01:39:35]

Importing Motion

noise3(float,float,float)

Applies a three-dimensional noise function to three floats and returns the result as a
float.
>print noise2(0.5,0.5,0.5)
0.129479967058

abs(float)

Returns the absolute value of the float.

cos(float)

Returns the cosine of the float.

sin(float)

Returns the sine of the float.

tan(float)

Returns the tangent of the float.

sqrt(float)

Returns the square root of the float.

min(float,float)

Returns the minimum value of the two floats.

max(float,float)

Returns the maximum value of the two floats.

set_action_agent_chans(integer)

Sets whether transition and/or latch curves are created upon creating agent curves.
>set_action_agent_chans(TRANS_CHANNEL | LATCH_CHANNEL)
(both transition and latch curves will be created)
>set_action_agent_chans(TRANS_CHANNEL)
(only transition curves will be created)

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (5 of 15) [13/05/2007 01:39:35]

Importing Motion

get_ik_hold_d()

Returns the value of the "speed" threshhold when editing IK hold curves in the IK tab.
>print get_ik_hold_d()
-1.0

set_ik_hold_d(float)

Sets the value of the "speed" threshhold when editing IK hold curves in the IK tab.
>set_ik_hold_d(-0.5)
>print get_ik_hold_d()
-0.5

get_ik_hold_y()

Returns the value of the "height" threshhold when editing IK hold curves in the IK tab.
>print get_ik_hold_y()
0

set_ik_hold_y(integer)

Sets the value of the "height" threshhold when editing IK hold curves in the IK tab.
>set_ik_hold_y(1)
>print get_ik_hold_y()
1

get_ik_hold_soft()

Returns the value of the "IK hold off time" in the IK tab.
>print get_ik_hold_soft()
0.2

set_ik_hold_soft(float)

Sets the value of the "IK hold off time" in the IK tab).
>set_ik_hold_soft(0.3)
>print get_ik_hold_soft()
0.3

GLOBAL CONSTANTS
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (6 of 15) [13/05/2007 01:39:35]

Importing Motion

Global constants are accessed using their name:


>print TX_DOF
1
>print RX_DOF
8
The following constants are available:
Bit used to represent transform channels:
TX_DOF
TY_DOF
TZ_DOF
RX_DOF
RY_DOF
RZ_DOF
Use for enabling/disabling segment dofs:
>a = get_agents()
>seg = a.segments
>seg.dof = (TZ_DOF | RY_DOF)
Integers used to represent segment primitive types:
SPHERE_PRIMITIVE
TUBE_PRIMITIVE
DISC_PRIMITIVE
BOX_PRIMITIVE
BILLBOARD_PRIMITIVE
LINE_PRIMITIVE
POINT_PRIMITIVE
Use for referring to in segment.primitive attribute:
>a = get_agents()
>seg = a.segments
>seg.primitive = TUBE_PRIMITIVE

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (7 of 15) [13/05/2007 01:39:35]

Importing Motion

Constants for segment IK type:


IK_NORMAL
IK_SINGLE
IK_SKIP
IK_MULTI
IK_START
IK_ROOT
IK_LINK
IK_END
Use for referring to in segment.type attribute:
>a = get_agents()
>seg = a.segments
>seg.type = IK_SKIP
Bit used to represent agent channels:
TRANS_CHANNEL
LATCH_CHANNEL
Use for referring to in set_action_agent_chans() global function:
>set_action_agent_chans(TRANS_CHANNEL | LATCH_CHANNEL)

OBJECTS
Agents, segments, actions, curves, groups, and locators are all objects in Massive accessible through Python scripting.
They have a number of attributes and member functions. Attributes can be set and get using normal Python syntax:
>a = find_agent("man")
>print a.name
man
>a.name = "test"
>print a.name
test
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (8 of 15) [13/05/2007 01:39:35]

Importing Motion

>a.colour=0.5
>print a.colour
0.5

AGENT ATTRIBUTES
attribute type

description

readable/writeable

colour

float

agent colour

read/write

name

string

agent name

read/write

segments Segment returns root segment of agent

read

actions

Action

returns first action in list

read

next

Agent

next agent in linked list

read

prev

Agent

previous agent in linked list

read

rest

Matrix

transform matrix of agent rest pose

read/write

tm

Matrix

transform matrix representing agent's


current position and rotation

read/write

AGENT METHODS
METHOD

DESCRIPTION

load_amc(string)

Loads amc file specified by string.


>a=find_agent("man")
>a.load_amc("test.amc")

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (9 of 15) [13/05/2007 01:39:35]

Importing Motion

find_action(string)

Returns the action of that name if it is found, otherwise returns None.


>a=find_agent("man")
>print a.find_action("walk")
Action{Walk}

create_agent_curves(action)

Creates the agent curves for the given action.


>a=find_agent("man")
>b = a.find_action("walk")
>a.create_agent_curves(b)

find_segment(name)

Finds the segment with the given name. If no segment exists, returns None.
>print find_agent("man").find_segment("root")
Segment{root}

TERM

DEF
EXAMPLE

SEGMENT ATTRIBUTES
attribute type

description

readable/writeable

colour

float

segment colour

read/write

name

string

name of segment

read/write

density

float

segment density for dynamics

read

mass

float

segment mass for dynamics

read/write

type

integer

IK type (ie, normal, single, skip).

read/write

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (10 of 15) [13/05/2007 01:39:35]

Importing Motion

primitive

integer

segment primitive type

read/write

axis

integer

segment axis (applies to discs and tubes)

read/write

length

float

segment length (applies to discs and tubes)

read/write

radius

float

segment radius (applies to spheres)

read/write

lx

float

segment length in x (applies to boxes)

read/write

ly

float

segment length in y (applies to boxes)

read/write

lz

float

segment length in z (applies to boxes)

read/write

cx

float

x offset of segment in segment space (tx in shape tab)

read/write

cy

float

y offset of segment in segment space (ty in shape tab)

read/write

cz

float

z offset of segment in segment space (tz in shape tab)

read/write

tx

float

x translation relative to rest position

read/write

ty

float

y translation relative to rest position

read/write

tz

float

z translation relative to rest position

read/write

rx

float

x rotation relative to rest position

read/write

ry

float

y rotation relative to rest position

read/write

rz

float

z rotation relative to rest position

read/write

dof

integer

indicates which dofs are enabled for the segment using


each bit to indicate a dof channel.

read/write

seg.dof = (TX_DOF | TY_DOF | TZ_DOF |


RY_DOF)
(Enables tx, ty, tz, and ry in the segment dof tab.)
order

long

indicates order of dofs using a long integer format. Use


str_to_order to convert the desired order into this format.
(See global functions.)

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (11 of 15) [13/05/2007 01:39:35]

read/write

Importing Motion

parent

Segment the segment's parent in the skeleton hierarchy

read

sibling

Segment first sibling of segment in the skeleton hierarchy

read

child

Segment first child of segment in the skeleton hierarchy

read

next

Segment next segment in linked list

read

prev

Segment previous segment in linked list

read

rest

Matrix

rest transform matrix

read/write

tm

Matrix

current transform matrix

read/write

SEGMENT METHODS
None.

ACTION ATTRIBUTES
attribute

type

description

readable/writeable

name

string

agent name

read/write

select

integer

whether this action is selected

read/write

next

Action

next action in list

read

prev

Action

previous action in list

read

curves

Curve

first curve in action

read

ACTION METHODS
METHOD

DESCRIPTION

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (12 of 15) [13/05/2007 01:39:35]

Importing Motion

create_rc_curves(segment)

Creates RC curves for segment.


>a=find_agent("man")
>b=a.find_action("walk")
>b.create_rc_curves(a.find_segment("root"))

create_ik_curves(segment)

Creates IK curves for segment.


>a=find_agent("man")
>b=a.find_action("walk")
>b.create_ik_curves(a.find_segment("root"))

create_hold_curve(segment)

Creates IK hold curves for segment.


>a=find_agent("man")
>b=a.find_action("walk")
>print b.create_hold_curve(a.find_segment("root"))

delete_curve(Curve)

Deletes given curve


>a=find_agent("man")
>b=a.find_action("walk")
>c=b.create_hold_curve(a.find_segment("root"))
>b.delete_curve(c)

convert_rotation_order(segment, from_integer,
to_integer)

Changes the rotation order of the segment.


EXAMPLE

CURVE ATTRIBUTES
attribute

type

description

readable/writeable

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (13 of 15) [13/05/2007 01:39:35]

Importing Motion

channel

string

channel that curve controls

read/write

next

Curve

next curve in list

read

prev

Curve

previous curve in list

read

select

integer

whether this curve is selected

read/write

CURVE METHODS
None.

GROUP ATTRIBUTES
attribute type

description

readable/writeable

name

string

group name

read/write

cdl

string

cdl referenced by group

read/write

cre

integer -

read/write

n_locator integer number of locators

read

locators

Locator points to first locator in group

read

agent

Agent

read

select

integer whether the group is selected

points to agent associated with the group

read/write

GROUP METHODS
METHOD

DESCRIPTION

add_locator()

Adds a new locator to the group, returning it.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (14 of 15) [13/05/2007 01:39:35]

Importing Motion

LOCATOR ATTRIBUTES
attribute

type

description

readable/writeable

px

float

position in x

read/write

py

float

position in y

read/write

px

float

position in z

read/write

rx

float

rotation in x

read/write

ry

float

rotation in y

read/write

rz

float

rotation in z

read/write

process

integer

brain processing on/off

read/write

agent

Agent

agent associated with this locator

read

group

Group

group associated with this locator

read

select

integer

whether this locator is selected

read/write

lock

integer

whether this locator is locked

read/write

LOCATOR METHODS
METHOD

DESCRIPTION

create_instance()

Creates an instance of the agent at the position of the locator.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/python.html (15 of 15) [13/05/2007 01:39:35]

Camera Files

CAMERA FILES

Camera files can be loaded into a camera from the scene page, or specified on the comand line. For example the
following line would load a camera file into camera 1:

massive -cam1 Cameras/shot1a.cam


Here are the supported fields:
frame

an integer frame number

fov

the field of view in Y

transform

a 4 x 4 matrix used to transform the world into camera space, as per


the camera transform in a RIB file

filmback

the dimensions of the filmback of the camera in mm, used to


determine the horizontal field of view

A Massive camera file contains at least one transformation matrix and optional fov and frame numbers.
The filmback is also optional and can only occur once per camera file. The default filmback is 35mm full gate (24.892
x 18.669 mm).

eg:
filmback 24.892 18.669
frame 1
#focal length 35
fov 29.97002051
transform
0.7071067812 -0.3312945782 0.6246950476 0
-2.775557562e-17 0.8834522086 0.4685212857 0
-0.7071067812 -0.3312945782 0.6246950476 0
3560.565558 -2127.414591 3464.230949 1
frame 2
#focal length 35
fov 29.97002051
transform
0.7071067812 -0.3312945782 0.6246950476 0
-2.775557562e-17 0.8834522086 0.4685212857 0
-0.7071067812 -0.3312945782 0.6246950476 0
3560.565558 -2127.414591 3464.230949 1
frame 3
#focal length 35
fov 29.97002051
transform
0.7071067812 -0.3312945782 0.6246950476 0
-2.775557562e-17 0.8834522086 0.4685212857 0
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/camera_file.html (1 of 2) [13/05/2007 01:39:37]

Camera Files

-0.7071067812 -0.3312945782 0.6246950476 0


3560.565558 -2127.414591 3464.230949 1

The white space characters are optional and anything starting with a '#' is considered to be a comment.
Massive also reads and writes Weta camera files. This format is auto-detected by the use of the ".wcam" suffix.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/camera_file.html (2 of 2) [13/05/2007 01:39:37]

CDL Files

CDL FILES

Cdl files are ASCII decriptions of an object (also referred to as an agent). See CDL Statement Reference . An object
in a cdl file has at least one physical segment and any number of fuzzy nodes. Cdl files can be thought of as
consisting of various types of blocks:

world
object
segment
dynamics
fuzzy
action
There are also spring, cloth, material, geometry and option blocks which are not yet detailed in this page.
Before any "object" statement is encountered, the current block is the world block. After an "end object" statement the
world block is resumed. When a "segment" statement is encountered the segment block starts and continues until the
next "segment", "fuzzy" or "action" block. When a "fuzzy" statement is encountered the fuzzy block starts and
continues until the next "segment", "fuzzy" or "action" block.
"dynamics" blocks can appear inside world, object or segment blocks. They can contain any combination of dynamics
attributes in any context. Dynamics attributes are inherited from higher contexts.
When an "action" statement is encountered the action block starts and continues until the next "segment", "fuzzy" or
"action" block. Action blocks are further subdivided into curves. An "end object" statement ends all blocks except the
world block. Any statements in the world block are considered "global".

Translations, rotations, scales and transform matrices can appear in object and segment blocks. These
transformations decribe the object's rest or reset position.

Objects
The object statment has one arguement which is the name of the object. Here is a list of statements that can appear
in the object block:
colour
angles
collisions
instance action
instance material
translate
rotate
scale
transform

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl.html (1 of 4) [13/05/2007 01:39:39]

CDL Files

Segments
Each segment has a name, density, a coordinate space and a solid geometric primitive which can be any of the
following types:
box
tube
sphere
line
billboard

The box primitive is a rectangular solid decribed by 3 dimensions. Boxes are always aligned with the coordinate axes
of the segment space and can be offset from the centre.
example 2:
segment head
parent head
density 1.0000
primitive box
size
0.3000 0.5000 0.3000
centre 0.0000 0.0000 0.0000

The tube primitve is a round capped cylinder described by length (excluding caps), radius and axis. Tubes may be
rotated with respect to the segment coordinate space.
example 3:
segment neck
parent chest
density
1.0000
primitive tube
thickness 0.1000
length
0.1500
axis
Y
centre
0.0000 0.0750 0.0000
bone_rotate 10.0000 0.0000 0.0000

The sphere primitive is described by it's radius and centre relative to the segment coordinate space.
example 4:
segment hips
parent root
density
1.0000
primitive sphere
radius
0.5
centre
0.0000 0.0400 -0.0300

The line and billboard primitive are provided mainly for use in vision renders. When large numbers of objects appear
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl.html (2 of 4) [13/05/2007 01:39:39]

CDL Files

in an object's vision render, these primitives can be used as standins.

Dynamics
The dynamics attributes are used to specify rigid body dynamic simulation properties.
example 5:
dynamics
angle spring 5.0
angle dampen 0.5
angle friction .1
collision spring 12000
collision friction 30
collision dampen 200
gravity 9.8
steps 1000
end dynamics

Actions
Actions can be embedded in CDL files.
example 6:
action walk
id 1
rate 1.04335
curve
channel root:tx
type linear
3 points
0.00000
0.00000
0.50000
-0.180671
1.00000
1.617143
curve
channel root:ty
type linear
4 points
0.00000
0.00000
0.33333
0.298071
0.66666
0.63786
1.00000
1.476542
The include statement can be used to include action files:
include ACT/walk.act
Binary action files load much more quickly. Here is the syntax to load a binary action file from a CDL:
action_binary ACT/walk.actb
Only one action_binary statement should be used for each agent.
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl.html (3 of 4) [13/05/2007 01:39:39]

CDL Files

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl.html (4 of 4) [13/05/2007 01:39:39]

CDL Statement Reference

CDL STATEMENT REFERENCE

This page does not yet include details of the following data types: spring, cloth, geometry, material and option.

Object block statements


angles type
Angles can be represented in three types: degrees, radians or revolutions.
collisions type
Collisions type can be: none, normal or no_reaction.
include filename
Specifies the inclusion of the cdl file called filename.
instance action name
Creates an instance of the global action called name.
instance material name
Creates an instance of the material called name .
object name
Starts an object block and calls the object `name '.
rotate x y z
Specifies a rotation of object rest space. Rotates x about the X axis, y about the Y axis and
z about the Z axis. The units depend on the arguement given in the angles statement.
scale x y z
Specifies a scale of object rest space.
transform
m00 m01 m02 m03
m10 m11 m12 m13
m20 m21 m22 m23
m30 m31 m32 m33
Loads the matrix m into the object rest matrix. Ignores any previous transformations to the rest matrix.
translate x y z
Specifies a translation of object rest space.
vision fovx fovy resy slices
Specifies field of view in x and y and the y resolution for vision renders.
The slices value specifies the number of seperate horizontal renders used to simulate one wide angle render.
z_factor x
Specifies the factor used in mapping distance values for sound and vision.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl_ref.html (1 of 5) [13/05/2007 01:39:41]

CDL Statement Reference

Segment Block Statements


axis A
Specify the major axis for a tube primitive.
bone_rotate x y z
Specify the tube primitive rotation with respect to segment space.
centre x y z
Offset the primitive by x y z in segment space.
include filename
Specifies the inclusion of the cdl file called filename.
length l
Specifies the length of a tube or line primitive.
limits
dof min max
Sets the limits for the degree of freedom `dof'. One or more degrees of freedom may follow a single limits
statment, one to a line.
order a b c d e f
Specifies the order of transformations. a b c d e f can each be any of: tx ty tz rx ry rz.
parent name
Attaches the current segment to the named segment.
primitive type
Specifies the type of segment: box, tube, sphere, line, billboard.
radius r
Specifies the radius of a tube or sphere primitive.
rotate x y z
Specifies a rotation of segment rest space. Rotates x about the X axis, y about the Y axis and
z about the Z axis. The units depend on the arguement given in the angles statement.
scale x y z
Specifies a scale of segment rest space.
segment name
size x y z
Specifies the size of a box or billboard primitive.
standin name
Standins are like segments but can be rendered in place of an entire object. They are selected for rendering
by comparing the distance from the camera with the threshold value.
example :
standin WHITE
primitive billboard
size 0.9000 1.7000 0.0000
centre 0.0000 -0.3000 0.0000
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl_ref.html (2 of 5) [13/05/2007 01:39:41]

CDL Statement Reference

threshold 0.000
standin WHITE2
parent WHITE
primitive line
length 1.7000
axis
Y
centre 0.00000 -0.3000 0.0000
threshold 10.0000
threshold d
Specifies the threshold distance for a standin.
transform
m00 m01 m02 m03
m10 m11 m12 m13
m20 m21 m22 m23
m30 m31 m32 m33
Loads the matrix m into the segment rest matrix. Ignores any previous transformations to the rest matrix.
translate x y z
Specifies a translation of segment rest space.

Fuzzy block statements


n alt input(s) id...
Attaches n alt inputs to the current node identified by a list of n numbers.
and type
Specifies AND behaviour for a rule node. type represents the AND algorithm: min or prod.
channel name
Specifies the channel string for an input or output node.
cosine interpolation
Specifies smooth interpolation for a fuzz node.
defuzz d
Specifies the defuzz value for a defuzz node.
defuzz type
Specifies the type of defuzzification for an output node. type can be: COM or MOM.
fuzzy type
Specifies the node type: input, timer, fuzz, rule, defuzz, output or macro.
id n
Specifies the node's id number.
lambda inference a b c
Specifies lambda type membership for a fuzz node with control points at a, b and c.

n input(s) id...
Attaches n inputs to the current node identified by a list of n numbers.
name name
http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl_ref.html (3 of 5) [13/05/2007 01:39:41]

CDL Statement Reference

Names the current node.


parent name
Specifies the macro node to which the current node belongs.
pi inference a b c d
Specifies PI type membership for a fuzz node with control points at a, b, c and d.
range low high
Sets the range of an input or an output node.
s inference a b
Specifies S type membership for a fuzz node with control points at a and b.
translate x y
Specifies the location of the current node's icon in the icon work area.
weight w
Specifies the weight of a rule.
z inference a b
Specifies Z type membership for a fuzz node with control points at a and b.

Dynamics block statements


angle spring x
Specifies spring constant for angle limiter widget.
angle dampen x
Specifies spring damper constant for angle limiter widget.
angle friction x
Specifies angular velocity friction coefficient for angle limiter widget.
collision spring x
Specifies spring constant for collisions widget.
collision dampen x
Specifies spring damper constant for collisions widget.
collision friction x
Specifies friction coefficient for collisions widget.
dynamics
Begin dynamics block.
end dynamics
End dynamics block.
gravity
Specifies gravity constant. Only relevant within world or object blocks.
lock
Causes the segment to be treated as a composite primitive with it's parent for rigid body dynamics.

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl_ref.html (4 of 5) [13/05/2007 01:39:41]

CDL Statement Reference

stabilize
No longer meaningful.
steps
Specifies number of dynamics steps per second. Only relevant within world or object blocks

http://outranet.scm.tees.ac.uk:8002/Resources/docs/massive/manual/cdl_ref.html (5 of 5) [13/05/2007 01:39:41]

You might also like