Miarmy Manual 2.5.v1

413

Transcript of Miarmy Manual 2.5.v1

Page 1: Miarmy Manual 2.5.v1
Page 2: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

2 © 2011-2013 Basefount

Page 3: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

3 © 2011-2013 Basefount

Miarmy Manual

Version 2.5

Basefount Software

BASEFOUNT TECHNOLOGY (HONG KONG) LIMITED

Page 4: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

4 © 2011-2013 Basefount

Table of Contents Brief ......................................................................................................................................................................... 15

Structure .................................................................................................................................................................. 15

Part 1 Main Concept ................................................................................................................................................ 16

Miarmy Human Logic Engine Concept ................................................................................................................ 16

Decision Node ...................................................................................................................................................... 16

Defuzz Process ..................................................................................................................................................... 17

Solving Decisions Active .................................................................................................................................. 17

Make Priority for Decision Nodes .................................................................................................................... 18

Agent Brain Instantiate ........................................................................................................................................ 19

Assets Management ............................................................................................................................................ 19

Miarmy Contents ............................................................................................................................................. 19

Agent Groups ................................................................................................................................................... 20

Perception_Set Group ..................................................................................................................................... 22

Placement_Set Group ...................................................................................................................................... 22

Naming Conventions ........................................................................................................................................... 22

Animation Rig .................................................................................................................................................. 22

Original Agent, Action, Action Shell, State and Decision ................................................................................. 22

Bounding Box and Action Proxy ...................................................................................................................... 23

Geometry ......................................................................................................................................................... 23

General Pipeline .................................................................................................................................................. 23

Plan .................................................................................................................................................................. 23

Prepare ............................................................................................................................................................ 24

Create Agent Infrastructure ............................................................................................................................ 24

For Logic and behavior .................................................................................................................................... 26

Rendering and output ..................................................................................................................................... 27

Solver ................................................................................................................................................................... 27

Solver Contents ............................................................................................................................................... 27

Simulation Pipeline .......................................................................................................................................... 27

Reset, Update, Pause and Break Mechanism .................................................................................................. 28

Non-Connection Sequential Node Communication ........................................................................................ 29

Part 2: Menu Items .................................................................................................................................................. 30

Page 5: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

5 © 2011-2013 Basefount

Menus .................................................................................................................................................................. 30

New Icons GUIs and Tools Bar ............................................................................................................................. 64

The Tools ......................................................................................................................................................... 64

Credits .............................................................................................................................................................. 66

Proxy List Easy Control .................................................................................................................................... 67

Action Shells Handy Tools ................................................................................................................................ 68

Part 3: Agent Infrastructure .................................................................................................................................... 70

Rig ........................................................................................................................................................................ 70

Bone structure ................................................................................................................................................. 70

No Scale ........................................................................................................................................................... 72

About binding .................................................................................................................................................. 72

Original Agent ...................................................................................................................................................... 72

What is Original Agent? And why we need it? ................................................................................................ 72

Creating Original Agent ................................................................................................................................... 73

Agent Group Node and Agent Type ................................................................................................................ 73

Render Geometry Binding ............................................................................................................................... 75

Render Geometry Management ..................................................................................................................... 75

Render Geometry Shader ................................................................................................................................ 76

Bone Shape for Display & Physical Simulation ................................................................................................ 76

Bone Attribute & Flags .................................................................................................................................... 77

Physical Joint Type ........................................................................................................................................... 78

Physical Joint Direction .................................................................................................................................... 79

Physical Joint Limits ......................................................................................................................................... 79

Referencing & Namespace Pipeline ................................................................................................................ 82

Select-able root bone for creating original agent ........................................................................................... 86

Placement ............................................................................................................................................................ 88

Point & Formation Placement ......................................................................................................................... 88

For “formation” placement: ............................................................................................................................ 92

Randomize Row/Column for curve and formation placement ....................................................................... 93

Populate Agents from Pace Node ................................................................................................................... 96

Curve placement.............................................................................................................................................. 96

Terrain Attachment + Point placement ........................................................................................................... 96

Page 6: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

6 © 2011-2013 Basefount

Polygon Based placement ............................................................................................................................... 97

Particle Based Placement ................................................................................................................................ 98

Selection Placement (only place agents from selection) ................................................................................ 99

Proportion in Place Node .............................................................................................................................. 100

Hierarchical placement .................................................................................................................................. 101

Solver Space ................................................................................................................................................... 102

Inverse Placement ......................................................................................................................................... 103

Placement PosLock Mode ............................................................................................................................. 104

Place Node Data Structure ............................................................................................................................ 105

Visualize placement ....................................................................................................................................... 107

Skip flag can used to bypass individual instance ........................................................................................... 108

Animation and Action ........................................................................................................................................ 109

Animation to Action Pipeline Suggestion ...................................................................................................... 109

Create Action Node ....................................................................................................................................... 110

Transition Map Building .................................................................................................................................... 113

Concept .......................................................................................................................................................... 113

Main Features of Transition Map .................................................................................................................. 115

How to Build Transition Map ......................................................................................................................... 117

Watch Cameras ............................................................................................................................................. 120

Better Move Tool ........................................................................................................................................... 121

Decision ............................................................................................................................................................. 121

Create Decision node .................................................................................................................................... 122

Agent ................................................................................................................................................................. 122

Agent attributes ............................................................................................................................................. 122

Agent Mode ................................................................................................................................................... 124

Agent Memory Data ...................................................................................................................................... 125

Part 4 Logic in-depth ............................................................................................................................................. 126

Fuzzy Logic ......................................................................................................................................................... 126

Pipeline .............................................................................................................................................................. 127

Terminology ................................................................................................................................................... 127

General Pipeline ............................................................................................................................................ 128

Engine Process Breakdown ............................................................................................................................ 128

Page 7: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

7 © 2011-2013 Basefount

Implementation ................................................................................................................................................. 131

Step 1: Get Channel Results .......................................................................................................................... 131

Step 2: Fuzzy Logic for a Single Sentence Calculation ................................................................................... 131

Step 3: Fuzzy Logic between Sentences Calculation ..................................................................................... 134

Step 4: Fuzzy Logic for Priority Ranking and Interfere to Node Active ......................................................... 135

Step 5 & 6: Output Mechanism - Node Active, Default Decision and Normal Decision ............................... 137

Part 5 Logical Simulation ....................................................................................................................................... 140

Logic Presets ...................................................................................................................................................... 140

Channel Presets ............................................................................................................................................. 140

Decision Presets............................................................................................................................................. 141

Interactive with Agent ....................................................................................................................................... 141

Sound ............................................................................................................................................................. 141

Relative Speed Detection .............................................................................................................................. 145

Auto Collision Avoid....................................................................................................................................... 147

Vision ............................................................................................................................................................. 150

Agent Exclusion Feature ................................................................................................................................ 153

Dynamically Decrease Intelligence Mechanism (DDIM 1.0) .......................................................................... 155

Collision Detection ......................................................................................................................................... 155

Interactive with Environment ............................................................................................................................ 155

Ground ........................................................................................................................................................... 155

Bound ............................................................................................................................................................ 158

Indexing Technique ....................................................................................................................................... 159

Zone ............................................................................................................................................................... 160

Repel/Forbidden Zone ................................................................................................................................... 163

Spot ................................................................................................................................................................ 164

Road ............................................................................................................................................................... 166

Bi directional Road......................................................................................................................................... 175

3D Road (Path) ............................................................................................................................................... 176

Maya Field ..................................................................................................................................................... 178

Composition of Forces ................................................................................................................................... 180

Maya Fluid ..................................................................................................................................................... 180

Formation Control ......................................................................................................................................... 180

Page 8: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

8 © 2011-2013 Basefount

HP & MP ........................................................................................................................................................ 187

Lean ............................................................................................................................................................... 188

Parent channel, transform space .................................................................................................................. 190

Some Transform Channels............................................................................................................................. 191

Scene Info ...................................................................................................................................................... 192

Randomize ..................................................................................................................................................... 192

Sine Channels................................................................................................................................................. 194

Timer Channels .............................................................................................................................................. 194

Brain Variable ................................................................................................................................................ 196

Agent Variable ............................................................................................................................................... 198

Variable Proxy ................................................................................................................................................ 200

Agent Bone & terrain Channels ..................................................................................................................... 204

IK Offset Channels ......................................................................................................................................... 205

MEL/Python source in Logic Channels........................................................................................................... 205

Simulation Space ............................................................................................................................................... 206

World Transformation for physical simulation ............................................................................................. 206

Local Transformation for non-physical simulation ........................................................................................ 206

Solver Space Node ......................................................................................................................................... 207

Output Behavior Channels ................................................................................................................................ 209

Transform Speed ........................................................................................................................................... 209

Bone Offset .................................................................................................................................................... 209

Sound ............................................................................................................................................................. 209

Vision ............................................................................................................................................................. 210

Aim Constrain ................................................................................................................................................ 210

Particle Follow ............................................................................................................................................... 216

Scale Entire agent .......................................................................................................................................... 221

Action ............................................................................................................................................................. 222

Ragdoll ........................................................................................................................................................... 222

Traffic System ................................................................................................................................................ 222

Watch Logic Results ........................................................................................................................................... 228

Brain Viewer .................................................................................................................................................. 228

Feedback in Essential ..................................................................................................................................... 230

Page 9: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

9 © 2011-2013 Basefount

Simulation Extra Tools ....................................................................................................................................... 231

Feet Map Generator ...................................................................................................................................... 231

Visualization ...................................................................................................................................................... 235

Visualize HP, MP Data .................................................................................................................................... 235

Visualize Action Transition ............................................................................................................................ 236

Visualize Agent ID .......................................................................................................................................... 236

Bounding box display Mode and Inverse Placement .................................................................................... 237

Part 6 Action .......................................................................................................................................................... 238

Action Infrastructure ......................................................................................................................................... 238

Action Node Data .......................................................................................................................................... 238

Action Node Attributes for Playback and Transition ..................................................................................... 239

Scale Bone in Action ...................................................................................................................................... 244

Action Features.................................................................................................................................................. 244

Action Trigger ................................................................................................................................................ 244

Action Group Trigger ..................................................................................................................................... 245

Action Blending.............................................................................................................................................. 246

Action Playback Rate ..................................................................................................................................... 247

Action Channel for Input ............................................................................................................................... 248

Randomize Entry Points ................................................................................................................................. 248

Subjective Objective Action Synchronization ................................................................................................ 249

Hook up Custom Attributes ........................................................................................................................... 252

Single Character Cache .................................................................................................................................. 254

Skip Animation Calculation for Some Bones ................................................................................................. 258

Action Drive Agent ............................................................................................................................................. 259

Pipeline .......................................................................................................................................................... 259

Getting the Target Action .............................................................................................................................. 259

Parsing out the Next Action ........................................................................................................................... 260

Action Transition ........................................................................................................................................... 262

Action Transition Visualization .......................................................................................................................... 262

Action Proxy List ................................................................................................................................................ 264

Story List (Logic Drivable Action Proxy List) ...................................................................................................... 265

Probabilities State Machine .............................................................................................................................. 267

Page 10: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

10 © 2011-2013 Basefount

IK System ........................................................................................................................................................... 269

Part 7 Physical Simulation ..................................................................................................................................... 275

Enable Dynamics................................................................................................................................................ 275

Dynamics Types ............................................................................................................................................. 275

Dynamics Channels ........................................................................................................................................ 276

Pre-build RBD Objects and Visual Clue .............................................................................................................. 278

Fully Pre-build RBD Objects for Dynamical .................................................................................................... 280

Collision Detection............................................................................................................................................. 280

Mark Collide................................................................................................................................................... 280

Pre-build RBD Objects for Collision Detection .............................................................................................. 281

Collide Check Channels .................................................................................................................................. 281

Optimization .................................................................................................................................................. 286

Dynamics Features ............................................................................................................................................ 286

Physics Global ................................................................................................................................................ 286

Step Time and Sub Step ................................................................................................................................. 287

Disable sub-tree simulation (skip finger and toes etc…) ............................................................................... 288

Gravity VS Mass ............................................................................................................................................. 289

Joint Move Inertia .......................................................................................................................................... 290

Terrains and Default Terrain ......................................................................................................................... 291

Maya Field ..................................................................................................................................................... 294

Force Field General Rules .............................................................................................................................. 295

Maya Fluid ..................................................................................................................................................... 296

Build-in Force Field ........................................................................................................................................ 296

Combo ........................................................................................................................................................... 298

Kinematic Primitives ...................................................................................................................................... 299

Cloth simulation............................................................................................................................................. 300

More realistic Cloth Simulation and Cloth Collision ...................................................................................... 305

Mute Dynamics .............................................................................................................................................. 306

Rigid Body Dynamics Emitter ........................................................................................................................ 306

Rigid Body Contact and Leave to Agent ........................................................................................................ 310

Render RBD Emitter ....................................................................................................................................... 313

Agent Bone Particle Emitter (Action Phase based) ....................................................................................... 314

Page 11: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

11 © 2011-2013 Basefount

Part 8 Render ......................................................................................................................................................... 317

Agent Cache ....................................................................................................................................................... 317

Creating Agent Cache .................................................................................................................................... 317

Agent Cache for Bone Rotate Only ................................................................................................................ 318

Agent Cache with translate ........................................................................................................................... 318

Agent Cache with Uniform Scale ................................................................................................................... 318

Agent Cache with Bone Scale ........................................................................................................................ 319

Agent Cache with cloth .................................................................................................................................. 319

Agent Cache Format ...................................................................................................................................... 319

Command Line Caching ................................................................................................................................. 320

Render Solutions ............................................................................................................................................... 321

Render Engine Pipeline ...................................................................................................................................... 321

Render Preparation ........................................................................................................................................... 322

Skinning ......................................................................................................................................................... 322

Geometries Randomize ................................................................................................................................. 323

Textures Randomize ...................................................................................................................................... 325

Preview by Miarmy Mesh Drive 1.0 .................................................................................................................. 326

Concept .......................................................................................................................................................... 326

Optimizing Mesh Drive before Implementation ........................................................................................... 327

Generate (Duplicate) Mesh ........................................................................................................................... 328

Pairing ............................................................................................................................................................ 330

Enable Mesh Drive ......................................................................................................................................... 330

Render by Mesh Drive 2.0 & 3.0 ........................................................................................................................ 331

The Mesh Drive 2.0 ........................................................................................................................................ 331

Mesh Drive 3.0 ............................................................................................................................................... 331

Render by Renderman ....................................................................................................................................... 338

3Delight Configuration .................................................................................................................................. 338

Manually Setup Renderer (Windows) ........................................................................................................... 338

How to Render ............................................................................................................................................... 339

Render Global ................................................................................................................................................ 339

Texture generate and path accessible ........................................................................................................... 340

Multi cam render ........................................................................................................................................... 341

Page 12: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

12 © 2011-2013 Basefount

Preset shaders ............................................................................................................................................... 341

Self-defined Renderman Shader ................................................................................................................... 347

Prman Rib Export, support .slo for custom Shader ....................................................................................... 349

Light Usage & Shadow ................................................................................................................................... 350

Motion Blur .................................................................................................................................................... 353

Renderman Extra Rib Attribute (internal or custom) .................................................................................... 355

Hierarchical Subdivision Mesh ...................................................................................................................... 356

Command Line (Batch) Exporting RIBs .......................................................................................................... 357

Misc New Layers ............................................................................................................................................ 358

Subdivision Mesh ........................................................................................................................................... 359

Matte ............................................................................................................................................................. 361

Split render .................................................................................................................................................... 361

Procedural Primitives .................................................................................................................................... 363

Command Line (Batch) Exporting RIBs .......................................................................................................... 366

Render By Arnold ............................................................................................................................................... 367

General Introduction ..................................................................................................................................... 367

Arnold Procedural Primitive .......................................................................................................................... 367

The tools ........................................................................................................................................................ 372

The Workflow ................................................................................................................................................ 373

Render By Mental Ray ....................................................................................................................................... 374

General Introduction ..................................................................................................................................... 374

The tools ........................................................................................................................................................ 375

Render Pipeline and Assets Organization: .................................................................................................... 376

Render By V-Ray ................................................................................................................................................ 380

V-Ray archive Support ................................................................................................................................... 380

Preparation .................................................................................................................................................... 380

Pipeline & Assets ........................................................................................................................................... 381

Under the hood ............................................................................................................................................. 381

Replace Shader .............................................................................................................................................. 383

Alembic Cache (Geometry Cache) ..................................................................................................................... 384

Export FBX ......................................................................................................................................................... 385

Bake Bone + Geometry ...................................................................................................................................... 386

Page 13: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

13 © 2011-2013 Basefount

Bake to Bone Animation ................................................................................................................................ 386

Directly Get Simulation Data Using MEL/Python .......................................................................................... 386

Fetch Agent Render Information from Miarmy to Your Own Pipeline ............................................................. 388

Part 9 Optimization ............................................................................................................................................... 390

Low Efficiency Channels Optimization .............................................................................................................. 390

Vision ............................................................................................................................................................. 390

Collide Family Channel & Pre-build RBD Object ............................................................................................ 392

Collide Any Channel ....................................................................................................................................... 393

Bounding Box Display ........................................................................................................................................ 394

Solver Space....................................................................................................................................................... 394

Easy Transition ................................................................................................................................................... 394

Optimizing Crowd Dynamics ............................................................................................................................. 394

Using Spot or Zone Trigger Dynamic ............................................................................................................. 395

Mute Dynamics .............................................................................................................................................. 395

Aggregate Optimization ................................................................................................................................. 396

Part 10 Expanding Guide ....................................................................................................................................... 398

Scripts ................................................................................................................................................................ 399

Build your own logic Preset ........................................................................................................................... 399

Build your own channel Preset ...................................................................................................................... 399

Build your own automatic original agent setup pipeline .............................................................................. 399

Build your own automatic action creation pipeline ...................................................................................... 399

Particle Express for Hybrid Dynamics Effects ................................................................................................ 399

Command Line Tasks ..................................................................................................................................... 399

Command Line (Batch) for Developer ........................................................................................................... 399

Miarmy Configuration File ............................................................................................................................. 400

API ...................................................................................................................................................................... 401

Write your own Field Node ........................................................................................................................... 401

Render Fur ..................................................................................................................................................... 401

Use Miarmy Engine Drive Maya Character ................................................................................................... 401

Get Agent Data .............................................................................................................................................. 401

Miarmy Reference ................................................................................................................................................. 402

Callback Functions ............................................................................................................................................. 402

Page 14: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

14 © 2011-2013 Basefount

After Load Miarmy ......................................................................................................................................... 402

Before Save .................................................................................................................................................... 402

After Save ...................................................................................................................................................... 402

Selection Change ........................................................................................................................................... 402

Before Duplicate ............................................................................................................................................ 402

Reserved MEL Command .................................................................................................................................. 402

Cloth .................................................................................................................................................................. 403

Channel Reference List ...................................................................................................................................... 404

Page 15: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

15 © 2011-2013 Basefount

Brief Thank you for reading this. This document listed and explained every detail of Miarmy. Before you reading this,

please make sure you already know some basic of Miarmy. This document explained many things in technical

under the hood and not a step by step tutorial. If you like to know or learn Miarmy from start, please refer the

PDF Miarmy Example tutorials and Miarmy Online video tutorials www.youtube.com/basefount.

Structure We organize this document like this:

Part 1 Main concept: This part explained the logic engine concept of Miarmy, the Miarmy infrastructure

contents and general workflow and pipeline for making project

Part 2 Menu Item: This part detailed listed all the menu item of Miarmy

Part 3 Agent Infrastructure: This part listed and explained the agent contents we need create and how

to make them work.

Part 4 Logic in-depth: This part explained the logic workflow and pipeline in-depth and listed all the logic

algorithms of Miarmy Human Logic Engine.

Part 5 Logical Simulation: This part explained all the perception contents under the hood workflow and

algorithm, such like road, zone, etc.

Part 6 Action: This part explained the action node, action transition mechanism and drive action in logic.

Part 7 Physical Simulation: This part explained the physical collision detection and dynamic simulation

and some more stuff under the hood.

Part 8 Rendering: This part explained the Miarmy caching mechanism and rendering workflow

Part 9 Optimizing: This part explained in-depth how you can optimize your scene.

Part 10 Expanding: This part explained using Script and C++ API for expanding Miarmy. (coming soon)

Page 16: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

16 © 2011-2013 Basefount

Part 1 Main Concept In Miarmy, we get rid of any node connections and programming, balanced the simplicity and diversity, and

dedicated designed a fuzzy logical based human logic engine for imitating how people thinking. And you can

easily construct complex logic just by several nodes.

Miarmy Human Logic Engine Concept Basically, people think things just like this, “If there is something happening, decide to do something”. For

instance, there are some obstacles in front of me, I decide to turn away and go around them. People always

make some decisions based on what is happening.

More specific, each “decision” contains “something happening” and “the next things want to do”. In Miarmy, we

call them “conditions (sentences input)” and “decisions (decisions output)”. People always make some decisions

based on the conditions.

There may be many things happening together, so, we maybe have many decisions. From these decisions we

need figure out which is the correct next things to do. The process from decisions to behaviors is called “defuzz”

in Miarmy engine and this process is total automatic.

Additionally, in the process of defuzz, there may be several decisions conflicted. So, people will naturally make

priority for them. For example, someone in my left and near, I want to go right, but there is a cliff on my right,

without saying, I have to go to left for avoiding the fall. In this situation, go left and go right are conflicted

decisions, we need make a priority for them. Avoid cliff take higher priority than avoid each other. People always

make priority based on natural principles, and finally decide what to do next.

Generally, Miarmy Engine was built for trying to simulate the above brain process in human brain, conditions,

decisions, priority ranking and behaviors.

In Miarmy,

We use “decision node” to imitate the “the conditions and decisions”,

We use parenting hierarchy to rank priority for multiple “decision nodes”.

We make the “defuzz” (from decisions to behaviors) process totally automatic.

Decision Node Decision nodes are the basic units for simulating the Human Logic. In each one of decision node, there are

Several conditions tests

Some decisions to make.

Page 17: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

17 © 2011-2013 Basefount

We usually call these conditions as “sentences” and call the decision results as “outputs”. Miarmy engine will

test the “sentences” true or false with fuzzy logic, and then figure out whether and how much decides the

“outputs”.

Decision Node Pipeline

Defuzz Process Defuzz is the process based on your decisions figure out the behaviors, and this process is totally automatic. In

this process we need each decisions active and decisions priority. After that, we can assign the behavior to the

digital actor.

Solving Decisions Active

The decision active is the condition test result of decision node. For example, if someone in my left and near, I

need go right and slow down.

Input Sentences:

1. Someone in my left

2. Someone is near

Output Decisions:

1. Decide go right

2. Decide slow down a bit

In this example, the decision active of this decision nodes is the condition test result of these input sentences.

We use the fuzzy logic to test conditions, and the result value will be a float value from 0 to 1. We will talk about

the sentences test later in detail. See Part 4 – Logic in-depth

Blue bound for conditions and yellow bound for decisions

Page 18: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

18 © 2011-2013 Basefount

Make Priority for Decision Nodes

For achieving the priority for decisions, we just need simply re-arrange the hierarchy of decision nodes.

Decision node priority ranking pipeline

In the following real example, character need to avoid each other, get around a zone and follow the road

direction. We need make the following priority ranking:

1. First priority: avoid each other

2. Second Priority: get around a zone

3. Third Priority: follow road

Just re-arrange the hierarchy of these nodes we can achieve this:

Priority ranking by hierarchy

You can also group a bunch of decision nodes together and make this bunch of decision nodes totally lower

priority than the other bunch of nodes.

All of decision making process and priority ranking process are driven by Fuzzy Logic engine. We will explain the

in-depth algorithm and implementation in Part 4: Logic in-depth

Page 19: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

19 © 2011-2013 Basefount

Agent Brain Instantiate You may ask, a group of agent, all of them have the same brain, are their behaviors also the same??

No. The behavior is depending on the decisions, and the decisions are depending on not only the brain, but the

environment. Different agents are facing different environments. Therefore, they will have different decisions

and behaviors

Just like the picture below.

The same brain in different condition, brings out different behaviors

Assets Management

Miarmy Contents

Miarmy_Contens Group is the main group contains all of Miarmy infrastructure. They are agent groups,

Perception_Set group and Placement_Set group

Miarmy Contents, General Group

Page 20: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

20 © 2011-2013 Basefount

Agent Groups

Usually there may not be only one kind of agent in scene. We group their contents in different groups and this

kind of group is McdAgentGroup node, we dedicated designed the McdAgentGroup rather than using group

node (Maya transform node), because we want them can be searched by engine easily. Technically,

McdAgentGroup node is the same as transform node. In addition, there are many extra attributes on this node.

And we call them “Agent Type Attributes”

Extra attributes on McdAgentGroup node

And for each type of agent, there are several kinds of contents in different groups. The contents in each agent

group node, only belongs to their specific agent type. They are shown in following image, and we will introduce

them in details.

Agent Group Structure

Setup_<agentName> under Agent Group Node

This group contains the user defined character rig. And this rig is usually should be referenced into Maya scene

for keeping you scene clean, because this rig will not be useful when all agent infrastructure created. We just

need reference its bone structure for easily deleting after everything is done.

Page 21: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

21 © 2011-2013 Basefount

A rig been referenced to scene under Setup Group

Original_<agentName> Group under Agent Group Node

This group contains a bone structure with exact the same as the character rig. Original agent is the template of

agent and contains many necessary attributes which character rig doesn’t have. When we place the agent out,

we also need the original agent to provide some extra information, such like the render, cloth, matching

information. We will continually provide more information throughout this entire document.

Action_<agentName> under Agent Group Node

This group contains all the action nodes, the action nodes are generated from animated Character Rig and

responsible for drive the agent to the target poses. For more details about the action nodes, please check out

the “action” chapter.

ActionProxy_<agentName> under Agent Group Node

This group will contain an only one node if you create action proxy. The action proxy is a fairly simple node only

contains a list of action names. If you already create some actions for this type of agent, you can fill some

existed action names into action proxy list and our engine will take place the logic procedure and perform the

actions inside this list cyclically, one by one. For more details about action proxy node, please check out the

“action Proxy” chapter

Story_<agentName> under Agent Group Node

This group will contain several story nodes, story node are playback list similar like Action Proxy node but it’s can

be multiple and also can be called by story channels. Also you can edit the story by Story List Editor, for more

details, please check out the “story list” chapter

TransitionMap_<agentName> under Agent Group Node

This group contains the action shell and state nodes. They are the element nodes of the Transition Map. For

more detail about the action transition, please check out the “Transition Action” and “Transition Map Viewer”

chapter.

Page 22: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

22 © 2011-2013 Basefount

Decision_<agentName> under Agent Group Node

This group contains all of the logical decision for this type of agent. With these nodes, we define the agents’

brain and behaviors

Geometry _<agentName>under Agent Group Node

This group contains all the geometries of this agent type need to be rendered. Just using the simple structure

arrangement you can achieve the random geometries. For details, please check out the “random geometry” in

“render” chapter.

PlacerShape _<agentName>under Agent Group Node

This group contains some geometries which can be the preview shapes for placement node, once the

geometries have been put into this type of PlacerShape, which type of placer will turn to real geometry instead

of small “triangle” in place node. For more details, please check out in “placement” chapter

FootMap _<agentName>under Agent Group Node

This group contains a cubic place polygon which been assigned to foot texture, it will be used to generate the

foot map onto the foot base. For more details, please check out the “Foot map generation” chapter

Perception_Set Group

All of the perception contents node will be located in this group after them firstly been created, there are lot of

types of perception content, such as road, bound, zone, field, etc. For more detail, please check out the

“Perception Contents” chapter

Placement_Set Group

All of the place nodes will be located in this group after them firstly been created. Place node is a pre-

visualization of the agents would to be placed. This node will provide a visible position and rotation for the

agents to be populated and let the users setup their transformation and proportion. For more details, please

check out the “Placement” chapter

Naming Conventions Note: This naming convention is only available in current version. In future, the naming might be more arbitrary.

Animation Rig

Rig joints and controls can be any naming including namespace

Original Agent, Action, Action Shell, State and Decision

<Name>_<Node Type>_<Agent Type Name>

Example:

Page 23: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

23 © 2011-2013 Basefount

The agent type name is casual

Original Agent Joint: torso1_ogb_casual

Action Example: standToRun_action_casual

Decision Example: default_decision_casual

State Example: walk_state_casual

Action Shell Example: jog_actionShell_casual

Bounding Box and Action Proxy

There is unique bounding box in each type of agent, and also Action Proxy node

<Node Type>_<Agent Type Name>

Example:

Original Agent Bound Box Example: BoundingBox_casual

Action Proxy Example: actionProxy_casual

Geometry

Geometry cannot contain namespace comma “:”, except, it can be any name

General Pipeline In this chapter we will introduce the general pipeline of all Miarmy throughout. But this is just a general

introduction, if you want to know the details, please refer the specific part and chapter.

Plan

Crowd simulation sometimes is a little bit complex that you have to consider the entire pipeline throughout

from modeling to final rendering. We need plan it carefully before we start it. Here we listed some important

stuffs you need plan them in details before starting.

Models complexity for rendering speed

If you have many complex models for each agent, it is going to be difficult for rendering. So please plan

the complexity of your models based on the shot and agent number.

Page 24: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

24 © 2011-2013 Basefount

How to do the animation and Action

You need consider which action you need the agent have, so you need prepare them before started, you

can use any type of animation keyframe, preset packages or motion capture are ok.

Logic complexity

We need carefully plan which the behaviors we want to the agents perform and which the logic can

achieve these. Then we can plan which decision the agents need make. And which the perception we

have to create. If the scene is too large, you need consider using the Decrease Intelligence Mechanism

or making some agents with very low-intelligence for filling the scene.

Agent types

You need consider how many types of agent you need, such as solider and enemy. Each one has a color

and some specific attribute such like sound range, vision range, density etc.

Whether we need perform crowd dynamics

If you want to let your agent been enable ragdoll dynamics, you need plan them from start. When

agents perform dynamics, each of the character bone will be transformed to RBD, so each bone should

have length. Mute some agents are never going to be enabled dynamics for saving huge time. Plan the

collide body etc.

Which renderer you need to use

For current version, if you want to render you scene by Renderman, you need install 3delight.

If you want to render you scene with Mesh Drive and arbitrary type of renderer, you need first consider

the complexity of your character model because mesh drive need duplicate all the geometries out and

drive them. See “Mesh Drive”

Prepare

Rig

In this step we usually reference rig to scene, or if you want, you can build your own one. The rig has to

obey some limits, please check out the “rig” chapter

Animation

We create action node for agent from animated character rig with same structure, so you need prepare

these animated character before starting.

Create Agent Infrastructure

Original Agent Create and Check

In this step we need build original agent from character rig. If everything of rig in all right, the original

agent will be the exact same bone structure as character rig, without all of the controls like the IK solver

and constrains. The original agent is the blueprint template of agent. For more about the original agent,

please check out the “original agent” chapter

Page 25: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

25 © 2011-2013 Basefount

Original Agent Refine

Then we need fine-tune the original agent in many aspects. Setup bone attribute, setup agent attribute,

adjust the bounding box, set flags, etc.

Physical Setup

If you want to your agent can be enable dynamical ragdoll or be influenced by the force field, you need

setup the physical bones and joint correctly and carefully. Also you need setup the collision detection

flags (see “Original Agent” and “physics simulation” part)

The original agent, left: physical joints, right: original agent bounding box

Simple Render Test

You need skinning all of the geometries to original agent so that our engine can render it. In this step,

we usually create a very simple placement node and place the agent out and render some agents.

A simple setup and placement

Page 26: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

26 © 2011-2013 Basefount

Test render by mental ray (mesh drive) and 3delight

For Logic and behavior

Create Perception & Logic

In this step we need create the planed logic for the agent, and make perception contents like road, zone

into your scene.

Test simulation, fine-tuning, and optimizing

In this step we need place part of the agents out and check is that everything running ok. Please notice,

we are not recommended you place full number of agents for now. Small group of agents are easier for

debugging and designing the logic of them.

Usually you need find-tune the data in logic node for achieving better results. Also, you can continually

add perception contents and logic in any time even in simulation playing back.

Optimization

You can optimize your scene in many aspects. You can decrease the intelligence of many agents in real-

time, mute some agents’ dynamic etc. See dedicated Part 9, Optimization

Generate Crowd and Preview

After you satisfying your setup, you can place all of your agents out and check out the entire scene in

your shot

Page 27: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

27 © 2011-2013 Basefount

Rendering and output

Caching

After caching, you can achieve interactive playback for your large scene. You can easily watch your

finally results. Also, the deformation motion blur can be rendered out only after caching.

Get rid of error agents

If some of agents are not correct, we recommend you get rid of them out of the shot. But you cannot

delete the agent directly because this agent will appear again after next placing. What you need to do is

using a Maya expression to put these agents out of the screen. Just like “McdAgent1.ty = 100000;”

Render it!

If you satisfy your scene, you can render it by 3delight directly or duplicate these geometries out and

render them by any other renderer. You also can make geometry cache or Alembic cache for exporting

to others package for VFX and rendering.

Solver

Solver Contents

When you click the Miarmy > Miarmy Ready, the solver contents have been created, they are “McdBrain”,

“McdBrainPost” and “McdGlobal”, without these nodes, you simulation is not going to start.

Solver setup and contents creation

Simulation Pipeline

Each time update, Miarmy will do the following things if the simulation is not broken.

1. The McdBrain is responsible for collecting the information from scene. Such as the agent information,

the perception contents information, etc.

2. Then, McdBrain will send the collected data to engine.

3. The engine will calculate out the result, such as the agent transformation and posing.

Page 28: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

28 © 2011-2013 Basefount

4. The McdBrainPost is responsible for updating the scene using the engine results

Simulation Pipeline

Reset, Update, Pause and Break Mechanism

There are 4 statuses of solver which are “reset”, “update”, “pause” and “break”.

Suppose that the start time of engine is 1, we can set it by McdBrain.startTime

Green: reset, Yellow: update, Red: will break simulation

Take a look at the green point, any time you can reset your scene by setting current time to start time (or before

start time)

As the yellow arrows shown, the engine can simulate and update Maya scene correctly, when playback from

start time and frame by frame.

If you jump frame back or jump more than one frame, the simulation will break, just like the red arrows shown.

At this time, the engine will never solve until you reset it (back to start time).

If simulation has been paused at the “x”th frame, you can jump time as you like, but before resuming it, you

need set the time when the time simulation break which is the “x”th frame. You can pause the simulation in

Miarmy Global.

Reset: the agents will be set back to initial status, meanwhile, some information in agent memory will

be clear and reset, such as the physical stuff, cloth buffer, etc.

Update: simulation in progress, engine is still working for updating scene

Pause: simulation stop but can resume later

Break: simulation will not continue proceed any more until reset.

Page 29: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

29 © 2011-2013 Basefount

Non-Connection Sequential Node Communication

Using some non-traditional Maya techniques, we designed a non-connection sequential node communication

solver. So, there are no connections among any Miarmy nodes for data transferring. All of data transfer is

happening in memory. When we create the Miarmy scene, we don’t need hypergraph anymore.

Page 30: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

30 © 2011-2013 Basefount

Part 2: Menu Items

Menus

Miarmy Ready!

Click this button system will do the follow things for you:

1. Setup Playback Options:

a. Update all viewport

b. Play every frame

c. By 1.0 frame for each update

d. Max playback speed is realtime (depending on the user specify, 24fps or 30fps)

2. Create Something:

a. Create a McdBrain node if not exist

b. Create a McdBrainPost node if not exist

Page 31: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

31 © 2011-2013 Basefount

c. Create a McdGlobal node if not exist.

d. Create Miarmy_Contents group and some preset stuffs

Miarmy Contents:

Agent group 1: agent repository

o Setup: rig location (usually reference into the scene)

o Original Agent: template for current agent

o Action: Miarmy action generated by Maya animation

o Action Proxy: an action list node can proxy all action playback

o Transition Map: state and action for build transition map

o Decision: logic entity

o Geometry: binding geometry

Agent Group 2

o …

o …

Agent Group 3

Miarmy Contents Check

It will check the naming convention and integrity of Miarmy_Contents group and stuff inside.

It will try to fix the naming in specific group.

Import without Namespace Prefix

Maya 2012 has bugs, it cannot import contents without name prefix or namespace. This tool let you import

contents without changing the name of objects.

Page 32: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

32 © 2011-2013 Basefount

Miarmy Tools

Agent Cache Options

o Enable Agent Cache

Enable agent cache, make the engine find cache file instead of solving

o Is Cache Bone Translate

Page 33: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

33 © 2011-2013 Basefount

If enable, when making cache, the translate information will be recorded. When assigning, the

translate information will be set to bone. It’s useful for record break body like the sword and

shield

o Generate Foot Locator

After enable this, system will generate locator for segment which been marked foot (in original

agent) and automatically key frame the location and visibility

o Cache folder

Specify in which the cache file located, the path should be accessible

o Cache Name

Specify the cache file name such as “scene001cache”

o Cache Offset

Frame offset when apply cache to scene.

Mesh Drive Options

o Start Agent Global ID

Specify the first agent which will perform mesh drive

o End Agent Global ID

Specify the last agent which will perform mesh drive, mesh drive will enable the agent id

between these 2 values

o Enable Progress Bar

Show updating progress bar when agents drive their meshes

o Clear

Delete all duplicated meshes

o Duplicate Mesh

Duplicate meshes for agents, from start ID to end ID

o Pairing Meshes and Agent

Mapping agent to their paired geometries in agent memory

o Enable Mesh Drive

Enable mesh drive for update meshes.

Note: if you change your frame rate of this scene in Maya Preferences, the start time will change. You need

to fix it to the correct value.

Page 34: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

34 © 2011-2013 Basefount

Foot Map Options

o Foot Map Folder

Specify the folder store foot map

o Foot Map Name

Specify the name of foot map

o Foot Map Resolution

Specify the size of foot map will be created.

o Foot Map Lifespan

Fade out old existed foot map

o Foot Height Threshold

Below this value, that segment will draw foot map

o Create Footprint Map

Start to create foot map

Page 35: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

35 © 2011-2013 Basefount

Character Cache

o Cache Folder

Specify which place the character cache should be written.

o Convert Agent Cache to Character Cache (By Character)

Convert agent cache to character cache, one character by another

o Create Cache to Character Cache (By Frame)

Directly create character cache without agent cache

o Enable Character Cache

Directly create character cache without agent cache

o Create Cache to Character Cache (By Frame)

Directly create character cache without agent cache

FBX Exporter

o Export to FBX, one agent one file

Export FBX based on the character cache

Page 36: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

36 © 2011-2013 Basefount

Miarmy Global

Transition Type

o Use Simple Transition

If enable, the transition map will be ignored by engine. Transition will automatically happened

by themselves between any 2 actions.

Solver Options

o Stop Feedback

If enable, the agent will not send information to Brain Viewer. It will save your time if you are

already done the logic construction.

o Pause Solve

If enable, the simulation will be paused. And if you disable this at the frame you enable this, the

simulation will continue.

o Start Time

Specify the simulation start frame.

o TBB Parallel Computing

Enable Intel TBB Paralleled Computing

Mesh Drive Save Block

o Unblock save with MD3

By default Miarmy not recommend user save scene with duplicated mesh in scene, enable this

make this file can be saved with Mesh Drive Enable

Page 37: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

37 © 2011-2013 Basefount

Physics Global

Page 38: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

38 © 2011-2013 Basefount

Page 39: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

39 © 2011-2013 Basefount

Solver

o Each Step Time:

Specify how much time will proceed in one Maya frame

o Sub Step:

Specify how many steps will make in Each Step Time

o Is Self-Collide:

Specify whether you need enable collision on bones of single agent

o Inertia Factor:

How much (in percent) speed will inherit from action when enable dynamics

o Block Same Type Collide

Stop checking collide with same type of agent

o Update Kine Prim Shape

Update shape of kinematic primitive in each frame

o Gravity X:

Gravity acceleration in X direction

o Gravity Y:

Gravity acceleration in Y direction

o Gravity Z:

Gravity acceleration in Z direction

Agent Body

o Stop Apply Force Speed

When the speed of RBD exceeds this value, the force field cannot add force on to it.

Agent Cloth

o Solver Frequency

Solver frequency specifies how often the simulation step is computed per second. For example,

a value of 60 represents one simulation step per frame in a 60fps scene. A value of 120 will

represent two simulation steps per frame, etc.

o Stiff Damping (de-jitter)

The damping coefficient is the portion of local particle velocity that is canceled in 1/10 sec.

o Cloth Density

The particles’ density of cloth

o Vertical Stretch Stiffness

Stiffness in horizontal direction, bigger value leads harder deform in horizontal space

o Horizontal Stretch Stiffness

Stiffness in vertical direction, bigger value leads harder deform in vertical space

o Shearing Stretch Stiffness

Stiffness in diagonal direction, bigger value leads harder deform in diagonal space

o Bending Stiffness

Page 40: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

40 © 2011-2013 Basefount

Stiffness of bend down, bigger value make not easy to curly

Default Plane Terrain

The attribute effect on the plane terrain default created.

o Dynamic Friction

The friction force when object is moving on terrain

o Static Friction

The friction force when object is before moving on terrain

o Restitution

The energy of bounces back from collision, increase this make object bounce greater on the

default terrain

Agent Dynamic Bones

The attribute effect on the agent body default created.

o Dynamic Friction

The friction force when object is moving on terrain

o Static Friction

The friction force when object is before moving on terrain

o Restitution

The energy of bounces back from collision, increase this make object bounce greater on the

default terrain

Field Multiplier

Exclusive adjust the force effect on the rigid body of Miarmy. If the Maya field or fluid affects both

Miarmy contents and Maya contents, you can adjust these values to change the result only on the

Miarmy contents.

o Field Force Multiplier

The value will be multiply the result force effect on the rigid body from Maya field

o Fluid Force Multiplier

The value will be multiply the result force effect on the rigid body from Maya fluid

Page 41: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

41 © 2011-2013 Basefount

Render Global

Summary

First line: The result folder name of output image or rib

Second line: The result file name of output image of rib

Image File Output

Page 42: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

42 © 2011-2013 Basefount

The attributes can change the file export name, format and path

o Full User Custom Path

Make the user specified path totally, will not add any sub folder or camera folder

o Output Folder

The location your image files of each pass will output

o Ribs Name(Rib/)

The file name of RIB file

o Pics Name

The file name of image file

o Extension

The file name extension

o Image Format

The format of output image

o Start Frame

The frame the render will start

o End Frame

The frame the render will end

o Frame Padding

The bit of digits of file name endin

Renderable Camera

Adjust the camera attributes

o Renderable Camera

Select the renderable camera here

o Alpha Channel

Enable this if you want to export alpha channel

o Depth Channel

Enable this if you want to export depth channel

o Camera Motion Blur

Enable this if you want ot apply motion blur when camera is moving

Image Size

o Preset

Choose width and height presets

o Width

The X resolution of output image

o Height

The Y resolution of output image

o Copy from Maya

Copy the same setup from Maya Render Global node

Split Render

To know more about split render, please refer the render part of this manual.

o Split X

Page 43: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

43 © 2011-2013 Basefount

The number of parts the viewport should be split in horizontal space

o Split Y

The number of parts the viewport should be split in vertical space

o Bound Filter

The filter pixels which between any 2 split parts

Texture Options

o Generate .tex Everytime

The system will generate a .tex texture file for each of texture file and send the .tex file to the

RenderMan renderer when rendering. By default, the system will check the existence of

that .tex file, if there is .tex file exist, system will not generate them again. If you need convert it

every time, please enable this.

Image Quality

The attributes exclusive belong to RenderMan and control the quality of output images

Please refer the RISpec if you want to know them in details

o Shading Rate

Page 44: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

44 © 2011-2013 Basefount

Minimum rate of surface shading

o Pixel Sample X

Sampling rate in the horizontal directions

o Pixel Sample Y

Sampling rate in the vertical directions

o Filter method

Antialiasing by filtering the geometry (or supersampling) and then sampling at pixel locations

o Pixel Filter X

The filter in horizontal directions

o Pixel Filter Y

The filter in vertical directions

o Deformation Motion Blur

Enable this to enable deformation motion blur, only available with agent cache

o Motion Blur

Enable this to enable motion blur

o Shutter Open

The times at which the shutter opens

o Shutter Close

The times at which the shutter closes

Ambient Occlusion Options

o Occ Sample

Increase this can get smoother result (less noise) but take more time to render

Procedural Primitive

o Enable

Enable procedural primitives when export RIB

o Run Program Folder

Specify the run program folder

Page 45: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

45 © 2011-2013 Basefount

Render Passes Setup

Specify which pass or passes should be rendered

If in preview mode (Miarmy > Render Preview), renderer will render the first option which

enable here.

If in batch mode (Miarmy > Render Extra > Render Batch to Image Files/RIB Files), renderer will

render all the options enabled here.

Page 46: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

46 © 2011-2013 Basefount

Other Renders Tab is the place for setting up the other renderers output paths or names

Render Preview (i-display)

Render current frame from current active viewport and put the image to the frame buffer (or i-display). The pass

to be rendered should be the first pass enabled in Render Pass Setup of Render Global.

Render Extra (sub menu)

Page 47: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

47 © 2011-2013 Basefount

Foreground Render

Open Maya Render View, and render this scene from start frame to end just inside of Maya

Render Batch to Image Files

Render this scene from start frame to end frame and output the images to the folder been specified in

Render Setting

Render Batch to RIB Files

Convert the scene to the RIB files start frame to end frame and output the RIB files to the folder been

specified in Render Setting

Export Rib Archive Files

Export rib file with only agent info as archive file can be referencing back

Export Procedural Primitive Assets

Export

Export Rib Archive Files

Add or remove custom render man attributes:

Add Subd Attribute

Add 2 attributes to the selected objects, so that the objects can be recognized to the subdivision

mesh by the render engine.

Delete Subd Attribute

Remove the 2 attributes of subdivision mesh flags from selected objects

Add Displacement Bound Attribute

Add an attribute to the selected objects, so that the renderer will use this value when dealing with

displacement shader

Delete Displacement Bound Attribute

Remove the attribute of displacement bound from selected objects

Page 48: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

48 © 2011-2013 Basefount

Add Matte Attribute

Add an attribute to the selected objects, so that the renderer will render it totally black but alpha

channel existed.

Delete Matte Attribute

Remove the attribute of matte from selected objects

Note: if this attribute is added to the agent instead of geometry, the specific agent will matte out all

the geometries it used

Agent Viewer (Auto Focusing)

The Agent Viewer will display the bone structure and some flags set in Agent memory

Bone structure:

The name of bone in memory, it can be used in channel, like torso1:tx

Flags

(@) sign

This bone will join collision check if using “collide” channel

Page 49: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

49 © 2011-2013 Basefount

(*) sign

This bone can feel field and fluid when dynamics is turned on

Agent Manager

Agent manager can determine which type of agent is activated. System will create contents such as logic

decision nodes or action nodes for the active agent and put the contents inside the active agent group.

Active

Active the agent type in this line

Modify

Modify the name of agent

Delete

Delete all the contents of this agent

Color buttons

Select color for active agent, when the agents are placed, the color of bones will be the same color

selected here

Add Agents

Add a new type of agent to scene

Terrain Manager

Page 50: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

50 © 2011-2013 Basefount

Terrain manager can mark geometry terrain. When the geometry is marked terrain, the agents can interactive

with it and the rigid body can collide in it. In fact, the geometry which been marked terrain is connected by a

McdTerrain node.

Terrain Node

The McdTerrain node name which connected to terrain geometry

Mesh

Actual mesh name been marked terrain

Dynamic Friction

The friction force when object is moving on terrain

Static Friction

The friction force when object is before moving on terrain

Restitution

The energy of bounces back from collision, increase this make object bounce greater on the terrain

Is anim

Enable this if the terrain has animation or deformation.

Is Plane

Enable this if the terrain is a plane, it can speed up the physical simulation

Select

Select the transform node of this terrain geometry.

Visualization

Sound range switch

Switch on/off the sound range

Page 51: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

51 © 2011-2013 Basefount

Vision range switch

Switch on/off the sound range

As the picture above, the red circle is sound range, and the green frustum is the vision range.

Setup Rig

Miarmy provide a free setup pipeline tool, which can generate a simple rig from the template.

Import Template

Import template with default pose

Import Template (Preset Pose)

Import template with the preset pose

Setup Rig

Convert the template to the rig

Import Standard Bone Tree

Import a clean and preset posed bone chain which can be used to motion capture

Page 52: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

52 © 2011-2013 Basefount

Above 3 pictures, from left to right:

1. Template with default pose

2. Template with preset pose

3. Bone chain with preset pose

After setup, the rig has been generated.

Original Agents

Page 53: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

53 © 2011-2013 Basefount

Create Original Agent

Create Original Agent if there is correct rig in Setup group for the active agent type

Create Original Agent (Preset Pose)

Create Original Agent with many preset setup

Select Skin Bone and Geo

Selete all the joints except end ones from current active original agent

Hide Bone Shape

Hide all the box shape of the bone

Unhide Bone Shape

Hide all the box shape of the bone

Re-create Original Agent

Delete the current active original agent and create it again. If you delete some important part from

original agent, you can use this tool

Delete Original Agent

Delete the current active original agent

Create Bounding Box for Agent

Create bounding box for current active agent

Shape Box Adjustment (This feature is not finished yet)

Go Original Pose

Clear all rotation value from original agent and put it to the origin

Send Active Geo to Original Agent

Copy geometries and skinning info from setup rig to Original Agent, only can work on active agent type

Placement

Page 54: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

54 © 2011-2013 Basefount

Create Placement Node

Create a placement node for you

Placement Editor

Placement editor can setup the proportion for the selected placement node

o Proportion Setup (slider)

Only the place-able agent type can be listed here. The agent with original agent is correct agent

type. Move any of the slider, the others types will automatically update except 0 proportion

type

0 proportion

Crank down to 0 for turning off this type of agent place

o Make Even

Auto averaging all the proportion of exist types

Page 55: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

55 © 2011-2013 Basefount

Place

Populate agent to scene.

De-Place (Delete All Agents)

Delete all the agents and flush the undo queue. We not recommended delete agents by “del” key

because that the agent is actually leave there in memory.

Inverse Place

Create a brand new place node from the selected agents, and this will record follow info:

o Parent node of each agent

o Type of each agent

o Translate and Rotate

o Mute dynamic flag

Attach Terrain

Attach place node to the selected terrain

Detach Terrain

Detach place node from terrain

Attach Curve

Attach place node to the selected curve

Detach Curve

Detach place node from curve

Mocap

Import Standard Bone Tree

Import a clean and preset posed bone chain which can be used to motion capture

Human IK (available next time)

Characterize (available next time)

Actions

Create Action

Create an action node, then playback once and store the animation data to this node, from rig (with

animation) to action

Action Editor

Page 56: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

56 © 2011-2013 Basefount

o Basic Attribute

Length

The length info of current selected action

Rate

The playback speed multiplier, e.g. 2 means playback speed is 2 times than normal

Is Final

Enable this means that once agent transit to this action, never transit out, e.g. dead

o Transition

Control the transition between 2 actions

Is Cycle

Enable: cycle action (e.g. walk), Disable: transition action (e.g. standToWalk)

Cycle Filter

A percent value stand for a smooth filter when the action performing self-cycle

transition

Entry Range

The range of transition from previous action to the current one

Exit Range

After this percent range, this action can transit to next action, before that, it playback

itself

o Agent Transform Speed

The speed of transform node of the agent, this can create the locomotion result, please check

out the detail of this in Animation and Action session

Channel(TX, TY, TZ, RX, RY, RZ)

Block/Open the channel on agent transform node

Auto Fill

Use the preset channel preset

Rebuild

Important: After editing the channels, user need click this rebuild button make it works

Page 57: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

57 © 2011-2013 Basefount

o Agent Transform Fix

This feature can offset the result of transform speed of the root, e.g. one of the motion capture

data is x-oriented, but one can use this feature to rotate it back to z-oriented action

Transform Data

Specify which channel and how many values need offset

Fix Agent Transform

Once specify the value in blank, click this for performing offset

o Exit Choices

In different phase, action can transit to different next actions. We can specify the exit choices

here

Exit Action

The list of actions which the current action will transit to

Start Frame & End Frame

Between start and end frame, the current action will transit to this exit action if there is

a transition signal

Preview Bar

Preview in which phase we can transit to which exit action

Create Action Proxy

Create an action proxy node for current active agent type

Action Proxy Editor

Action proxy can check the transition between any actions and see is them transit smooth or correct

For more details of action proxy, please check out the Transition session of this manual.

Page 58: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

58 © 2011-2013 Basefount

o Active

Activate/deactivate element of agent name

o Play list

The names of actions in list

o Set

From right to left set

o Available Actions

Choose which action to be set

Transition Map

(Note: need switch to the transition map viewport)

Move tool

Click and drag to move the states and action shells in transition map viewport

Create State

Create a new state node for current active agent type

Create Action Shell

Create a new action shell node for current active agent type

Add/Edit Action Group

Add an action group flag to the selected action

Cancel Action Group

Remove the action group flag from the selected action

Knowledge Perception

Page 59: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

59 © 2011-2013 Basefount

Please check out the channel spec for the detailed information

Create Solver Space

Create a solver space node

Create Road from Curve

Create a road object from your selected curve, the agent can feel it

Attach Road to Terrain

Attach the road to terrain

Road Mode Switch

Switch road between flow and road modes

Create Bound

Create bound box/sphere so that the agent can feel it

Create Spot + Force Field Combo

Create a spot node and set the Feel Mode to “both”

Create Spot

Create a spot node and set the Feel Mode to “Only Spot”

Create Force Field

Create a spot node and set the Feel Mode to “Only Field”

Create Wind

Create a wind node so that the agent can feel it

Create Zone

Convert the selected geometry to zone object

Select Zone Node

Select the geometry firstly, and then this tool can help you get the related zone node

Logic and Decision

Page 60: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

60 © 2011-2013 Basefount

Make Decision

Create a decision node for the active agent type, for detail, please check out the logic part of this

manual

Decision Node Editor

o Input Part (Normal Mode)

The inner logic part

Make Default/Global Button

Change the current selected decision to Global Mode

Active

Activate/Deactivate of this sentence

Priority

The priority of this sentence, bigger value has higher priority

Logic

The operate before this sentence

Not

Determine whether invert the logic result

ID

The Identity of this sentence assigned by the system

Input

Input sentence

Inf

Whether infinity for the fuzzy range in, e.g. “< 10” means negative infinity to 10

Min

The minimum/start value of range in which the result will be true

Inf

Whether infinity for the fuzzy range out, e.g. “> 10” means 10 to positive infinity

Max

The maximum/end value of range in which the result will be true

Fuzzy In

Blur the start of true range, not available when negative infinity

Fuzzy Out

Blur the end of true range, not available when positive infinity

Page 61: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

61 © 2011-2013 Basefount

Input Type

Chose the input type between max or average

Max

Take the result which makes this sentence fully activated

Average

Take all the results and calculate out the average, then calculate the activation

of this sentence

Auto Fill

Some presets for the user, one can add new preset in McdSentencePresetListGUI.py

Move Up

Change the order between 2 sentences up and down, move current sentence up

Del

Delete current sentence

Parse Result

The result of inner logic

o Output Part (Normal Mode)

Active

Activate/deactivate output channel

Decision

The output decision

Value

The output value if full activated

Auto Fill

Some presets for the user, one can add new preset in McdDecisionPresetListGUI.py

o Decision (Global Mode)

Make Normal Button

Change the current selected decision to Normal Mode

Default Action

Play this action when there is no other action activated.

Active

Activate/Deactivate the default output channel

Page 62: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

62 © 2011-2013 Basefount

Decision

The output channel

Default Else

System will use this value when the channel are not been activated

Output Type

The output value change type, absolute value or change rate

Defuzz Type

The output defuzz type average/blend/max

Auto Fill

Some presets for the user, one can add new preset in McdDecisionPresetListGUI.py

Preset Logic Behavior

Create the preset logic decision nodes for current active agent type

Physics

Cloth Setup

o Attach Cloth (Tip: points to box)

Mark cloth for selected geometry and attach the selected points to the bone shape of original

agent (firstly select the cloth points, then the bone box shape)

o Clear Cloth

Unmark the cloth for the selected geometry

Force Field

Create PhysX force field

Kinematic Primitive

Page 63: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

63 © 2011-2013 Basefount

Create PhysX kinematic Primitives

Create PhysX Debug Node

Create a PhysX debug node which can display all the contents of PhysX scene.

Debug Tools

Create PhysX Debug Node

Create a PhysX debug node which can display all the contents of PhysX scene.

Agent Match

Match the original agent to the selected agent, this feature is used to integrate your baking or rendering

pipeline

Agent Return

Put the original agent back to origin and default pose

Re-Link Miarmy

Reconnect your Miarmy if you install a new version in the other place

Un-Link Miarmy

Disconnect Miarmy from this Maya

3Delight Setup

Page 64: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

64 © 2011-2013 Basefount

Check Renderer Status

Check is your 3delight been installed correctly, check are your 3delight paths been setup correctly, check

are your 3delight shaders been compiled ok, etc. If there is anything incorrect, the finished dialog will

report them

Compile Shaders

Find the source code of shader in Miarmy installation place and compile using your installed 3delight

program, then put the result shaders into 3delight shader path

Remove 3delight.dll

Remove the 3delight.dll from your Maya bin folder. Because system will copy a 3delight.dll to your Maya

bin folder when installing, this 3delight will proxy/take over the 3delight of yourself if you already using

your own 3delight. Delete the 3delight Miarmy provided here.

New Icons GUIs and Tools Bar

The Tools

Toolbars

Miarmy Ready

Miarmy GUI

Show/Hide Sound Range

Show/Hide Vision Frustum

Show/Hide HP/MP Bar

Show/Hide Play Action and Transition Action

Miarmy Tools

Page 65: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

65 © 2011-2013 Basefount

Miarmy Global

Physics Global

Render Global

Place

De-Place (delete agents)

Brain Viewer

Transition Map

Agent Viewer

Agent Manager

Terrain Manger

Particle Emitter Manger

RBD Emitter Manger

Action Editor

Action Proxy Editor

Story List Editor

Create Decision Node

Create Solver Space Node

Create Road

Create Bound

Create Spot

Create Wind

Page 66: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

66 © 2011-2013 Basefount

Mark/Create Zone

Select Zone node

Create Kinematic Primitive

Agent Match (Original Agent match Agent)

Agent Return (Original Agent return default pose)

Focus Observe agent

Interactive Playback (same as Maya native)

Credits

Special Thanks,

The New Toolbar and new control Menu with a lot of useful and handy tools are created by Thanapoom

Siripopungul from Luma Pictures. We really appreciate his brilliant skill and kindest help! And we’ll continue

work together and provide better tools for you.

Page 67: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

67 © 2011-2013 Basefount

“Main GUI” and tools created by Thana

Proxy List Easy Control

Main GUI has some cool features like the proxy list operators

Add action proxy

You may notice there are many more operations than Miarmy Proxy Editor and much easier to operate on the

action proxy list. The result will sync to Miarmy Proxy List.

(left) Main GUI, (right) Miarmy GUI, they will sync

Page 68: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

68 © 2011-2013 Basefount

Action Shells Handy Tools

Another very handy tool is auto create action shells, in the Main GUI, ACT tab, user can multi select the action

name list and then click “Create Multiple Action Shell”, the action shell will automatically create in Transition

Map

Specify action and get ready for action shells creating

After some re-arrangement, it can be listed in Map

Created action shells

Also there is a tool can assign action group for selected action shells list together. Just load the right list “Load

Action Shell” and then click “create multi action group”

Page 69: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

69 © 2011-2013 Basefount

Mark action group for multiply action shells

Also many tools very useful, if you interesting, please just use it and give us feedback and we can improve them

for you

Page 70: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

70 © 2011-2013 Basefount

Part 3: Agent Infrastructure

Rig Animation Rig can be anything, FBIK, Human IK, or any kind of custom Maya joint system. Miarmy need the joint

structure of your rig for generating the Original Agent and fetch the animation data from that, and nothing else.

Just making sure your bone structure obey some rules and everything will be OK.

Bone structure

Single Chain Joint Structure

You should make sure your rig is a single chain rigging system. Single chain rigging system means each of the

joint (except root) must have a joint parent. No matter how many children nodes under each joint, and no

matter how many constrain and IK, just make sure each bone has a joint parent. Notice the following 2 pictures,

the left one is an example of single bone chain, because each joint (except root) in structure has a joint parent,

although joint 2 have several non-joint children. However, the right picture is not a single bone chain. Please

notice the parent of joint 3 is locator 2. The locator 2 breaks the chain.

(Left:) single chain rig; (right:) non single chain rig

Bone with length

If you like to enable dynamics on your rig, please make sure each bone has a length, otherwise, once you enable

dynamic for the agent originate from this rig, your dynamic system will unstable, even might crash Maya

The joint2 and joint3 overlapped and the joint2 doesn’t have length

Page 71: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

71 © 2011-2013 Basefount

(Green:) correct joint2 with length (red:) joint2 and joint3 overlapped without any length

Bone Naming

We highly recommend you make the name of the bone unique because the repeated name may bring some

unpredictable problems. Non-unique name is no problem in most case but we are not sure is there further

problem in features of coming future.

Please take a look at the following 2 pictures, the left one contains some joints which name is not unique

whereas the right bones are all unique name.

(Left:) joint name non unique; (right:) joint name unique

And once you select a joint with non-unique name, the verbose in script editor will be its full dag path instead of

its node name.

Select the non-unique name of joint

Joint Orientations

The root joint should orient to positive Z axis, because all of Miarmy engine algorithms (like the sound, vision,

field and so on) and action system take the +Z axis of agent as the face front. Please make sure your rig and

animation is facing to +Z axis.

Page 72: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

72 © 2011-2013 Basefount

Facing to +Z axis

No Scale

Please do not contain the “scale” value on joint, Miarmy do not support scale bone. If there have some joints

need change the length, please consider switch to “translate” mode.

About binding

The geometries on the rig will not join the render pipeline, you need duplicate and bind the geometries to the

original agent (and we have script can do this for you automatically). We will talk about this in following

chapters

Original Agent

What is Original Agent? And why we need it?

Original agent is the blueprint or template of agents. It is generated form animation rig. Original agent contains

a bunch of Miarmy necessary information we need them to populate agents. Each one of Original Agent is

responsible for populating one type of agent.

You may ask, if we have ability to populate agents directly from animation rig, why we need Original Agent. The

answer is obvious:

Animation rig is complex and contains many extra useless nodes and information for building agents.

These stuffs will make Maya scene messy.

Page 73: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

73 © 2011-2013 Basefount

Original agent has much extra necessary information and nodes when populating agents. We don’t want

to add these stuffs directly to your animation rig.

So, the animation rig is not part of your Miarmy scene, usually we just need it to be referenced to scene.

Original agent is a main and important part of your Miarmy scene. It contains the same bone structure

information of the animation rig, contains enough necessary information to populate agents. Additionally, it is

very “clean and clear”

Creating Original Agent

For creating original agent, you need firstly make sure that your animation rig meets the requirements we

mentioned above and then just simply put you entire rig into the “Setup_<AgentName>”. And you can create

original agent with menu item Miarmy > Original Agent > Create Original Agent.

There is another situation we need notice. Some rigging system has control joints structure and deformer joint

structure, please make sure your deformer joint structure above the control joints. Or you can make the

Once you click “Create Original Agent”, our code will parse the structure from your animation rig and create a

new rig based on your rig. After that, it will add a bounding box for each joint of the new rig. The new created

From another point of view, if you original agent can be created correctly and successfully, that prove that your

animation rig is ok.

Agent Group Node and Agent Type

The agent group nods is the root node for managing all the contents of one agent type. Our system distinguishes

different agent types using this group node. You can add, edit or delete the agent group in Miarmy > Agent

Manager. Please take a look at the follow example, there are 4 types of agent in scene, each one of them have

its own setup, original agent and other contents. And in each one of agent type node, there are several groups

nodes for storing the contents of this agent type.

(left:) Agent group nodes; (right:) contents in Agent_aaa

Page 74: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

74 © 2011-2013 Basefount

Technically, the agent group node is a simply transform node and the Maya type name is “McdAgentGroup”.

Due to that usually there is not only one type of agent in scene, when we want to create some contents for

specific agent type, we need specify which type is activated for current been dealing with, and the new created

stuff will automatically belongs to the active type. For example, we want to create a logical decision node for

type “aaa”. We have to activate the “aaa” type of agent in Agent Manager. Then, the system will know the new

created decision node belongs to “aaa” agent type and group the decision node to the Decision_aaa node. For

detail, see “Menu Item, Agent Manager” chapter.

(left:) new created node belongs to aaa; (right:) Agent Manager, agent which type name is “aaa” has been activated

The active agent name will be stored in McdGlobal node, with attribute name is “activeAgentName”, the

following picture demonstrate this.

The agent type name

The attribute in McdGlobal Node

Importantly, there are several attributes on each agent group node, and these attributes belong to this type of

agents

Page 75: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

75 © 2011-2013 Basefount

Extra attributes on McdAgentGroup node

Scale min/max: random range for sizing agents

Sound Freq: the sound frequency of agents

Sound Range: the sound range (amplitude) of agents. If 0, it will automatically use the diagonal length of

bound box of this agent

Vision X/Y: vision range frustum angle in horizontal and vertical

Density: the bone density for physical simulation

Start Delay Rand: some random frame before starting action

Road Probe: how far the agent can feel in front road

HP/MP Min/Max: random range for setting initial HP/MP

Render Geometry Binding

Different render pipeline support different binding method.

If you are going to use 3delight build-in plugin for rendering, you can use arbitrary binding method, such

as smooth skinning bind, rigid skinning bind, even constrain.

If you are going to use Mesh Drive Pipeline for rendering you scene directly in Maya or export geometry

cache, you need to use smooth bind skin the geometries to the original agent. Notice it’s only support

smooth skinning bind.

About render, see details in Part 8 Rendering.

Render Geometry Management

After skinning, you need put your geometries to Geometries_<agentNam> group like this:

Page 76: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

76 © 2011-2013 Basefount

Putting the geometries of original agent in Geometry_<agentName>

Cloth geometry should be put in his group.

Render Geometry Shader

Different render pipeline support different kind shader on geometries.

If you are going to use 3delight build-in plugin for rendering, you can only use the default shader like

Lamber, Blinn, or Phong. Or you can create custom surface or displacement shader with McdRMShader

and McdRMDispMat. And our plugin doesn’t support bump map, we only support displacement map.

If you are going to use Mesh Drive Pipeline for rendering you scene directly in Maya or export geometry

cache, any type of shader is available such as mental ray, v-ray, and so on.

About render, see details in Part 8 Rendering.

Bone Shape for Display & Physical Simulation

Adjust the boxes of the original agent and make them look right size and transform. The placed agents will be

the same as the original agent.

Also, don’t forget resize the green bounding box, make it can bound your agent. No need precise, but roughly

bound the agent. This bounding box can determine:

Default sound range

OpenGL display culling (The bounding box of each agent)

Split render culling

Be careful: don’t scale or move the joint!!

Page 77: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

77 © 2011-2013 Basefount

(left:) the original agent boxes; (right:) the placed agents

The final bone (end box) is not necessary to deal with, just ignore it.

You can ignore the head end. It’s useless and will not join the animation and physical simulation

Bone Attribute & Flags

Also, each of the boxes has some extra attributes can be applied:

Page 78: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

78 © 2011-2013 Basefount

Bone Scale Min and bone scale max determine the current bone random size when populating agents

Bone Thickness is not available for current version of Miarmy

Field Feel determine whether this bone can feel Maya field after turning on dynamics

Collide Feel determine whether this bone can join collision checking when we apply “collide” channel

Collide Cloth determine whether this bone can collide against with cloth

We will call them flagged bones when collision detection or interacting with force field.

Physical Joint Type

Between each pair of bones, there is a joint. It is use to build rag doll joint. Each joint can be one of 3 types like

the picture below middle.

Page 79: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

79 © 2011-2013 Basefount

3 different types of joint respectively: ball, shoulder, hinge

Physical Joint Direction

Each joint have a green arrow, you should always point this arrow to the next bone

Pointing the green arrow to next bone

Physical Joint Limits

Each of joint has some rotation limits need to setup, especially on elbow and leg. And the same attribute name

maybe have different meanning if the different joint type. The swing attribute cannot be the negtive value.

Joint types and limit attributes

Ball joint

Ball joint can swing and twist:

Page 80: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

80 © 2011-2013 Basefount

Ball joint example

Ball joint swing and twist limit

After Miarmy 1.5, once you select the physical joint, it will become to a visible manipulator

Left non-selected, Right Selected

The ball joint setup (Blue: swing down, red: swing up, yellow and purple: twist in counter/clockwise)

(From left to right) Small range of rotate, middle range or rotate, wide range of rotate

Page 81: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

81 © 2011-2013 Basefount

Shoulder joint

Shoulder joint can swing only, cannot twist

Shoulder joint limit, swing up and down limit

Hinge joint

Hinge joint can rotate as Z axis only:

Hinge example

Page 82: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

82 © 2011-2013 Basefount

Hinge joint rotation limit (the right one: can be rotate back easy but cannot rotate to forward)

Referencing & Namespace Pipeline

Exclude the regularity way, Miarmy Original Agent Contents can be referenced to scene. Thanks to the Maya

referencing system, we can get many benefits:

Save a lot hard disk space for different scene with the same agent.

Easy to replace agent if we want to replace another type of agent.

Artist can get benefit if the agent changed from crowd TD. One change, automatically update the agent

in any scene contains that.

Pre-Reference Contents

Before referencing, we need clean up the scene and just leave the agent group there. Please refer the pictures

below, the left picture shows if the scene non-referencing, something usually when creating agents contents by

Crowd TD. Then it should be cleaned up and just leave the “agent group” node there and save to a independent

file.

You can click “Miarmy > Save/Load Assets > Export Agent” for exporting that node and sub nodes.

Page 83: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

83 © 2011-2013 Basefount

left: non-referencing scene, right: referencing element

Referencing

Then, for the Crowd Artists/Animators, they just need reference the agent into the scene and it will contain the

namespace, the referenced agent groups need be put into the “Miarmy_Contents” sub tree, like the following

picture:

Referencing and put to Miarmy Contents

Namespace & Agent Type Name

If we deal with the scene without referencing, the agent type name will be the suffix of the agent group, like the

first picture below, whereas the type name of the referencing file, it will be the namespace.

Notice: the non-referencing and referencing file cannot exist together mixed.

Page 84: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

84 © 2011-2013 Basefount

Regular scene without referencing namespace

Scene with namespace

And if you want to change the type name, just need change the namespace at reference editor:

Adjust namespace of agent type for referencing scene

Page 85: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

85 © 2011-2013 Basefount

Production

Now the artists and animators can work with the referenced scene and make specific shot in production. They

can freely create scene contents like “bounds”, “spots”, and “roads” etc. Also they can tweak the placement as

wishes.

The artist can replace agent can control the namespace of the agent type.

Also once the crowd TD changes the referencing stuff, the artist’ scene will change at the same time. (Re-open

scene or refresh reference)

Animators build environments and perception contents.

Referencing Pipeline Suggestion:

The crowd TD can:

Can do anything but need responsible for exporting correct referencing file.

Sometime need do several different versions of agent for the same agent type because some shot need

some specific deal with.

The crowd artists cannot add/edit the below stuffs:

Cannot add/edit actions

Cannot add/edit transition map

Cannot add/edit Original Agents

Cannot add/edit Geometry

The artists can add/edit

Add perception contents like bound, road, etc…

Arrangement the placement

Add/edit Logic node (but not recommended)

Page 86: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

86 © 2011-2013 Basefount

Assets management

Crowd TD will build different Type of agents, and make actions, logics, geometries etc. Of course some agents

will interactive each other, so they need make them in the same files.

Then crowd TD will export each agent file to the hard disc and store there.

Animators will referenece the agents to the different scene

Assets on hard disk should be like this

Select-able root bone for creating original agent

For example this is your rig and the root you want is “blue” joint, “red” is root but not animation root.

Root bone is not real moving root

Page 87: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

87 © 2011-2013 Basefount

And of course the animation will be on the blue joint, just like the right picture above.

1. Select the “red” joint, add an attribute called “skipRoot” (Boolean type) and make it “True”/”On”, then

use this rig generate action node, the system will automatically find “blue” joint and skip the “red” one.

Select the red bone, and add an attribute called “skipRoot” and make it true

2. We create action node as usually. The action node will know what happened and automatically ignore

the “red” joint

3. Before creating original agent, please un-parent and create one without “fake” joint node, and the

action will drive the agent perfectly

The original agent we need get rid of the “fake” root

Everything will be OK

Page 88: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

88 © 2011-2013 Basefount

Placement Place node is a tool can populate your agent into the scene. There are some main features:

You can adjust proportion for different types of agents

Automatically check overlap if all place nodes in the same parent

You can parent the place node to a specific node for achieving “Hierarchical Placement”

If you make the place type “custom”, you can use MEL or Python to adjust the inner data structure of it.

Inverse placement mechanism can store “the information of your custom placement scheme” to

placement node. From your agents to placement node.

Point & Formation Placement

Firstly, we are going to introduce you 2 independent placement types “point” and “formation”. Please look at

the picture below.

Point placement type

Formation placement type

Page 89: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

89 © 2011-2013 Basefount

Note: in current version, the circle and polygon type is not available.

Creating Place Node

For create a placement node, simply click Miarmy > Placement > Create Placement Node, The default type of

place node is “point”:

(left) default initial place node (right) attributes on place node

Terminology

The single unit of triangle stand for one agent instance, we call it “Place Unit”.

The entire placement group we call it “Place Node”

The process we generate agents from place node, we call it “placement”

Page 90: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

90 © 2011-2013 Basefount

Attributes on Place Node

There are some attributes on each of place node. And different placement type need different attributes, let’s

take a look at the following example:

Num of Agent:

The “numOfAgent” determines how many agents to be placed

Scale:

The “scale” determines the size of single place unit

Page 91: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

91 © 2011-2013 Basefount

Noise:

The “noise” determines the random position on X and Z axis of each place unit

Orient:

The “orient” determines the orient of every place unit uniformly

Orient Random:

The “orientRandom” determines the random orient of each single place unit

High Random:

The “heightRandom” determines the random of Y-axis of each place unit

Page 92: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

92 © 2011-2013 Basefount

For “formation” placement:

The place type is “formation”

Noise:

The “noise” working on the formation place type

Angle:

The “angle” determine the entire rotation for formation place type

Orient:

The “orient” determines each single rotate uniformly

Page 93: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

93 © 2011-2013 Basefount

Orient Random:

The “orientRandom” determines the random orient of each single place unit

Column:

The “column” determines how many columns for a formation placement

The summary of place node attributes:

Place Type:

o Point: arrange based beehive

o Circle: not available for current version

o Polygon: not available for current version

o Curve: arrange follow curve

o Formation: arrange by row and column

o Custom: arrange by use

Num of Agent: Number of agent for current node

Scale: unit size

Noise: random x, z value of unit in space

Angle: (only work for formation place) the rotate of entire place node

Orient: unit rotation Y

Orient Random: unit rotation Y random from 0 to 360

Column: (only work for formation place) column number of a group of unit

Distance: distance between units

Height: place node height, translate Y

Height Random: unit translate Y random

Randomize Row/Column for curve and formation placement

There are some new attributes for the curve and formation distribute placement, they are

Page 94: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

94 © 2011-2013 Basefount

Row/column new attribute

The best way to familiar with these tools are simple use it a little bit:

Row offset

Column offset

Row noise for vertical space

Page 95: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

95 © 2011-2013 Basefount

Column noise for horizontal space

Row and column offset for horizontal and vertical space

Row and column noise for horizontal and vertical space

Page 96: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

96 © 2011-2013 Basefount

Populate Agents from Pace Node

Then, after you adjusting place node, you can place agent by Miarmy >Placement > Place

Or you can delete all placed agent by Miarmy > Placement >De-Place (Delete All Agents)

The reasons we provide the “De-place” function for you is not only we need delete all agents automatically, but

also clear/flush the memory. As everybody knows that, Maya has a feature called “undo”. It means if undo

feature enable, the object you delete is not actually deleted, all the date still there. It’s a hazard in crowd

simulation since it will take huge memory, as well as, the physical stuffs are still there in scene.

So please use “De-place” as much as possible instead of “delete manually”.

Curve placement

(left:) Place node attach curve (right:) need to switch to “curve” mode

You need first select place node, then select the curve, chick Miarmy > Placement > Attach Curve

Terrain Attachment + Point placement

Terrain attach is happened in Y direction of unit (place element). That is means no matter what type of

placement you are using, they can be attached to terrain.

Page 97: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

97 © 2011-2013 Basefount

For attaching terrain:

1. First make sure a plane-like geometry is zero transformation (clear all translate, rotate, scale values).

2. Select place node firstly, and geometry secondly, then click

Combining with place type, curve and terrain, you can apply any kind of placement scheme.

Terrain Attachment + Curve Placement

Terrain Attachment + Formation Placement

Polygon Based placement

Since version 1.5 Miarmy support polygon based distribute placement.

We need select the place node firstly then add select polygon, then click Miarmy > Placement > Attach Range

Mesh

Page 98: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

98 © 2011-2013 Basefount

Specify the polygon range placement

The polygon placement distribute result

Particle Based Placement

Agents can be placed from particles. And particles can be emitted by many method, so that, the placement can

be very flexible.

Create place node from particles

The workflow

The workflow is very simple. We just need create some particles, and select its particle node, and then generate

a place node from it. Miarmy > Placement > Create Place Node From > Particle 3D

Page 99: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

99 © 2011-2013 Basefount

Usually we can use this particle placement do the following things:

1. Shape variation: we can distribute the particles to many different locations by emit from object or

texture maps or brush tool, etc. And then generation the place node from it.

2. Density variation: we can determine the density of placement by adjust the “grayscale” of the map,

please refer the Autodesk “emit particle from map” session and get more information

Emit the particles from texture and distribute

Placement PosLock Mode

The place node generated from particle node will automatically switched to “custom” place mode, but if you

want to further change the proportion or orientation, you need switch it to “PosLock” mode. Please refer the

Position Lock Mode of Placement session.

Selection Placement (only place agents from selection)

Sometimes there are several placement nodes in scene and we just want to populate our agent from what we

want to focus. Then just need to select which you interested and click Miarmy > Placement > Place (from

Selected)

Page 100: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

100 © 2011-2013 Basefount

Place from selected place node

Proportion in Place Node

Please take a few minutes to recall the “Agent Manager”, “Original Agent” and “Multiply Types of Agent”. If

there are more than one type of agent in scene and all of them have “original agent”. The 2 conditions should

both meet. We can assign proportion for the placement node:

Open placement editor:

Select your placement node and this window will update automatically

Page 101: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

101 © 2011-2013 Basefount

The proportion Editor

Simply tweak the slider for assigning proportion to your placement node. The total proportion is always sum to

100%. If you don’t want to assign proportion for specific agent type, just simply crank it to “0” for locking. Notice

the “orc” agent has been locked.

Lock down the orc agent type

Click “make even” for averaging the assignment. (Notice the orc has been locked)

Make even for non-locked agent types “locoman” and “loco”

Hierarchical placement

Hierarchical placement means that you can place your agent in hierarchical local space instead of world space.

For example, you have several battleships in scene, and each ship has some agents on the deck. These agents

are walking and doing something, the ships are moving. At this time the agents on deck will naturally moving

with ships also. If we put our place node under ship transform node which means a child node of ship node, the

agents populated from this node will automatically be the children of ship. These agents will act in their parent’s

local space respectively.

Page 102: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

102 © 2011-2013 Basefount

Agents are acting on moving ships

For achieving this, the only thing you need to do is parent your place node to its parent. Like this:

Once you place your agents, they will automatically host to the same parent of place node.

Hierarchical placement, (left) before placing; (right) after placing

Solver Space

Technically, take a look at the picture above. They (2 groups of agents) are only separated by transformation

space but not solver space. Because Miarmy take local coordinate to solve, the 2 groups of agents may affect

each other even not in same world position. (Different world positions maybe the same local position)

To separate them totally and never affect each other, we need solver space node. Later, we will talk about the

solver space more detail.

Page 103: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

103 © 2011-2013 Basefount

The pictures above show the different parenting scheme. The left shows agents separated by transformation

space, whereas the right one shows agents separated not only by transformation space but solver space.

Inverse Placement

Inverse placement is a process which from the selected agents, create new place node. The new created node

will record the information inherit from the selected agents.

The inherited information includes:

Translate of each place unit

Rotate of each place unit

Type ID of each place unit

Parent of each place unit

Usually pipeline is, firstly you arrange agents by your hands (move them, rotate them, parent them), just like a

tactical arrangement, and then select some agents, apply inverse placement by Miarmy > Placement > Inverse

Place.

(up :) select some agents, (down:) from selections inversely create new place node

Page 104: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

104 © 2011-2013 Basefount

Please Notice Important: There may be some overlapped placement slot in scene after inverse placement. We

highly recommend you clear old place node after inverse place node generating. If you place agent by place

node and inverse place node at the same time, the system will prompt you for confirm.

You can use inverse placement to place agent according to your rehearsal just like the picture below:

Inverse placement result

You may notice the orange cycle placement are arranged by inverse placement

Placement PosLock Mode

The place node generated from particle node or inverse placement will automatically switched to “custom”

place mode, but if you want to further change the proportion or orientation, you need switch it to position Lock

mode which is “PosLock” mode.

In PosLock Mode, our agent placer will still be the same as custom placement but we can change the orientation,

proportion

posLoc Mode in Place node

Page 105: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

105 © 2011-2013 Basefount

Place Node Data Structure

You can arrange the placement by procedural methods. Using MEL or Python script, you can access and modify

the placement data easily and directly.

We should setup the place type to “custom” for a place node firstly:

Switch to “custom mode

Transformation Info

<place node>.placement[<unit id>].agentPlace[<infomation>]

<place node>: the shape node name of place node

<unit id>: the Nth agent unit

<information>: from 0 to 7 stand for:

0. Agent Type ID

1. Translate X

2. Translate Y

3. Translate Z

4. Rotate X

5. Rotate Y

6. Rotate Z

Example:

Line1: get the agent type from unit 0 of McdPlace2 node

Line2: set the translate X to unit 0 of McdPlace2 node

Parent Info

You can also specify each agent parent:

<place node>.parentSet[<unit id>]

Example:

Page 106: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

106 © 2011-2013 Basefount

Line3: set the parent for unit 0 of McdPlace2 node

Real Example

You can refer it from the placeStatium.txt in the <Miarmy Directory>/samples (the same place store the samples)

This code can place stadium:

After executing the code in above, the result will be:

Page 107: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

107 © 2011-2013 Basefount

The result of stadium placement

Visualize placement

Sometimes, the small triangular locators of placement node are not enough for setting layout, so we provide a

method to visualize how the placement finally will look like.

There is group “PlacerShape_<agentName>”in agent group, just put any mesh node inside with arbitrary

hierarchy, all the placement node in scene will display out the meshes of you placed inside.

If you found that group does not exist please click Miarmy > Miarmy Contents Check

Add new group repository

Original placement node

Visualize single geometry “sphere”

Page 108: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

108 © 2011-2013 Basefount

Visualize multiple geometries body parts

Multi type of agents (a human (pink), and a sphere (orange))

Skip flag can used to bypass individual instance

Sometimes we don’t want to place some individual agents out for some reasons, we can block them place, just

by 2 simple steps:

1. Turn the digital placer on, and check which agents you don’t want to place out.

The digital placement holder

2. Mark some agents out by simple MEL command, for example in above picture, we don’t want agent 0, 1,

7, and 19 place out, we need mark these agent place extra slot 4 from false to TRUE, and the following

pictures show the whole process

Page 109: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

109 © 2011-2013 Basefount

Run mel command to block agent placement

Some agents been blocked placement

Animation and Action Action is one of most important infrastructure for build behavioral crowd animation. We create actions nodes

from animation on the rig.

Note: here we just introduce the creation process, for usage and details, please refer the Part 6 Action

Animation to Action Pipeline Suggestion

When you creating action node, we suggestion you take the following pipeline. It would be easily for

management and further modify. Note: maybe you have better solutions, here just a suggestion.

Please take a look at the pictures below. Firstly, we suggest save as each animation file to single file (the first

picture). In each file, there is a rig (better be referenced into scene) under the Setup_<agent> name node

(second picture). You can freely key frame animation or import animation to this rig. Finally, in each file, there is

only one action node and you can export this node to anywhere.

Page 110: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

110 © 2011-2013 Basefount

The action create pipeline

All in all, each file contains a single piece of animation and only one action node. It would be easily for

management.

Create Action Node

Animation on the rig

The action node will be generated for active agent type. The only thing we are going to do is click Miarmy >

Actions > Create Action. And you will see some prompt need you fill or confirm:

Specify an action name

The action setup wizard will pop out for setting your action node up:

Page 111: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

111 © 2011-2013 Basefount

If you click Setup, the wizard will begin.

Static: agent stands without transform change (e.g. stand, sit, cheer)

Locomotion(Z+): agent walks in z direction straight (e.g. walk, stand to walk, jog, run)

Locomotion: agent walks in horizontal space (e.g. walk to left)

Turning: agent turning to left or right (turn left, turn right)

Ramp: agent go up or go down (go upstairs, climbing)

Cycle: self-cycle animation (e.g. walk, stand, run)

Transition Action: middle action between 2 cycle action (e.g. stand to walk, walk to run)

If you select cycle action, there is an additional attribute “cycle range”, means the self-transition range, more

specifically, if the action is go into the last XX%, the cycle will occur, self-transition. It blends the end self-

transition part to the head part of the action by some percent.

Page 112: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

112 © 2011-2013 Basefount

As picture above, after playing back green area, the action will perform self-cycle.

Either you select “cycle action” or “transition action”. There will be 2 attributes need set up, “transition in” and

“transition out”.

Transition in:

When previous action transit to current action, some percent should be smooth blended. This is the entry range

of this current action. Like the picture below, when the previous action transiting to current action, 10% of

action length should be blended from previous end to current start.

When transiting in, blend with previous action

Transition Out:

When current action should transit to next action, only when the current action playback after exit range

percent, the current action can transit to next action, otherwise, maintains the self-playback

Only after 80% playing back, the current action can transit to other actions

Page 113: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

113 © 2011-2013 Basefount

Your action nodes will be created in:

You can select one of it and open Action Editor for checking or editing details:

Action editor

The more detail about action and something under the hood will be described in Part 6 Action

Transition Map Building

Concept

Action transit from one to another can be 2 methods:

1. Easy Transition

2. Transition Map

The easy transition makes your action transit to another directly automatically.

Except Easy Transition, there is another transition method we can apply, it is Transition Map. Transition Map is

able to precisely control how one action transit to another, which others action will in between of them. For

example, the current action is “walk” and the target action is “stand”. If we are using Easy Transition, the action

transition will be “walk -> stand” directly. Whereas if we are using Transition Map, the result will be “walk ->

walk to stand -> stand”, which guild by transition map. Please look at the picture below.

Also, the Transition Map can control action blending, action randomization, and then get the feedback from

agent playback.

Page 114: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

114 © 2011-2013 Basefount

Transition Map screenshot

Note: Transition Map is always showing the contents of active agent. Please make sure you already activate the

agent type which you want to edit.

Transition Map located in viewport renderer:

You should switch it to front view for viewing it:

Transition Map consists of “State”, “ActonShell” and “connections”

(left:) action shell (right:) state

Action Shells are the aliases of actions. They stand for actions but not actions.

States are terminals can hook many cyclic actions.

Page 115: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

115 © 2011-2013 Basefount

Main Features of Transition Map

Naming checking

The action and action shell are twins. Engine parses “action shells” in Transition Map whereas drives agents by

“actions”. So both “action shells” and “actions” should exist with right naming conventions.

The “runToJog” and “jogToRun” only have action shell without real action, the title of action shell will be

“red”

The “jog” has both action shell and action and can be recognized by engine. The title will be normal

“black”

Precise transition action control

Between each 2 cyclic action, we can apply some transition actions between 2 states. To trigger the action,

simply put your action name in decision node. All the things are automatically done by engine. The engine can

always find the shortest way to get your target action.

Page 116: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

116 © 2011-2013 Basefount

Action group

A group of cyclic action can make a “signal” group, when our logic decision call “actionGroup:sit” channel the

system will automatically random select one of the actions of it.

Action blending

One action can blend to another action with blend engine. Not only the action itself, the rate can be blended.

Blend is from 0% to 100%. 2 blend actions should have the same number of frames!

Call “walk->walkHappy” in decision node can perform this:

Exits choice

Between 2 cyclic actions

Page 117: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

117 © 2011-2013 Basefount

Take a look at the above picture, from walk to stand, there are 2 ways: “walkToStandR” and “walkToStandL”, we

want to choose one of them in different situation. More specifically, different phase of action should transit to

appropriate transition action.

We just need specify the Exist Choices in form of Action Editor, everything will be ok. You may notice the right

blue-white bar shows the exit phase.

How to Build Transition Map

In Transition Map renderer, switch to “Front” View:

Enable Move Tool firstly, and there are 3 types of operations in Transition Map,

1. click-hold for moving nodes

Page 118: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

118 © 2011-2013 Basefount

Move the nodes

2. Above pictures, ctrl + click “walkHappy”, and ctrl + click walk, for connecting

Link 2 nodes

3. Above pictures, shift + click walkHappy, and shift + click walk, for disconnecting

Break connections

And there are 3 types of Action Connections in Transition Map (enable move tool firstly):

1. The cycle action:

a. ctrl + click walk action

Page 119: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

119 © 2011-2013 Basefount

b. then ctrl + click walk state

c. ctrl + click walk state

d. ctrl + click walk action

Cycle action host on a state

2. The transition action:

a. Ctrl + click walk

b. Ctrl + click walkToStand

c. Ctrl + click walkToStand

d. Ctrl + click stand

Transition action between 2 states

3. Action Blend:

a. Ctrl + click walkHappy

b. Ctrl + click walk

Page 120: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

120 © 2011-2013 Basefount

Blend action link to an another action

Uncheck the Simple Transition in Miarmy Global:

If you unintentionally enable Simple Transition, the Transition Map will have a background with tip message

“Simple Transition” apear

Watermarks there in simple transition mode

Watch Cameras

When the users switch to brain viewer or transition map, the system will automatically add the cameras to

watch the contents of them. This can avoid the conflict using “top” and “side” camera in scene.

Page 121: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

121 © 2011-2013 Basefount

Orthographic camera automatically added

Better Move Tool

Also we improve the transition map move tools, when we move the state, the related actions will be moved also,

and the transition action will move 50% along with the moving vector

Move together with the states

Move together with the action blend

Decision Decision node is another infrastructure of agents’ brain. Please check out the details in Part 7 Logic in-depth and

Part 8 Logic & Perception

Page 122: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

122 © 2011-2013 Basefount

Create Decision node

Firstly, you need active the agent type which you want to edit.

You can easily create it from Miarmy > Logic Decision > Make Decision

Agent There is much information on each instantiated agent. Some of them are exist in the form of attributes, located

in channel box, whereas some of them in memory and cannot access by regular methods.

Acting agents

Agent attributes

Mute Dynamic. Once enable, this agent can entirely block the dynamics feature, and this attribute can be stored

in place node through inverse placement.

Notice: the information (attributes and memory data) on agent cannot be saved when

you are saving your scene. All of the information is originated from Original Agents. In

this version of Miarmy, Only “muteDynamic” attribute can be stored in place node

through inverse placement feature

Page 123: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

123 © 2011-2013 Basefount

This is a very important feature for optimizing crowd dynamics, and we will introduce it in detail in Part 9

Optimization – Mute Dynamics

The others attributes, originated from Original Agent

Agent scale 0.8(left) and 1.3(right)

Sound range 35(left) and 60(right)

Sound frequency 5(left) and 3(right)

Page 124: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

124 © 2011-2013 Basefount

Vision X 100(left) and 30(right)

Color 4(left) and 8(right)

Compare the left and right attributes differences and agent results

Agent Mode

There are 3 modes of agent:

Acting mode: controlled by action and logic decision.

Dynamics mode: controlled by action and logic decision.

Page 125: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

125 © 2011-2013 Basefount

Combo mode: some parts controlled by action whereas another parts controlled by dynamics, such as

these feature enable: breakable dynamics, partial dynamics and body dynamics

Agent Memory Data

You can check the bone structure and flags on bone through Agent Viewer. Because these data cannot be saved,

so we didn’t provide any method to modify them.

Take a look at the following picture, the tree like list is the bone structure. The bone name is the “real name” in

memory and if you want to fill the bone-specific channel in logic decision node (such as bone “upArmR:tx”),

please use the name in this list.

The bone maybe has some flags, such as the root, have “@” and “*” flags. Check the legend on the bottom of

the list, the “@” stand for the collision detection flag, and the “*” stand for field affect flag. We will talk about

the collision detection channel in Part 5 Logic & Perception, and the field dynamics in Part 7 Physics

Agent viewer, contains bone structure and flags

Page 126: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

126 © 2011-2013 Basefount

Part 4 Logic in-depth This part explained all the logic engine calculation and procedure. All of them are happened under the hood

automatically and it will not need you understand all of them at this time. You can combine with the video

tutorials and make everything clear gradually.

Fuzzy Logic In the world of fuzzy logic, there is no “True” or “False”, because the boundary of “True” and “False” have been

blurred. Instead, we called them “active”. If true, it’s 1.0 active, and if false, it’s 0.0 active, between true and

false, it’s a float point value from 0.0 to 1.0 active, such 0.618 active.

Make an example and take a look at the pictures below, in regular logic, an input value is -80, the output should

be “True”, and another input value is -100, the output should be “False”. But in fuzzy logic, the input values -80

and -100 are neither true nor false. Notice the slope in in the second picture, the input -80 get active value 0.667,

and the -100 get the active value 0.333

Regular Logic: Red: False, Green: True

Fuzzy Logic: Red: 1.0 Active; Green: 0.0 Active; Gradient, 0.x Active

So our Miarmy system is full Fuzzy logic system implementation. And all the calculations are based on “Fuzzy

Active” rather than “True/False”, including sentence test, priority and node active test.

Look at an example:

This is regular logic we are talking about, something true, do 1, something false, do 2:

1. When hot, turn on fan.

2. When cool (not hot), turn off it.

Page 127: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

127 © 2011-2013 Basefount

Color means fan speed, the dark line is the temperature

Here we bring in a concept called “active”, ranging from 0 to 1, please take a look at the picture below

When false, the active is 0

When true, the active is 1

The active value 0 and 1, represent the true and false

Then, this it is fuzzy logic, it make the boundary blurred:

Color means fan speed, the dark line is the temperature

1. When cold turn off fan (the active value is 0.0)

2. When a little bit hot, turn on fan (the active value is 0.2)

3. When hotter, turn up fan (the active value is 0.8)

4. Very hot, turn up fan speed to max (the active value is 1.0)

Pipeline

Terminology

As we mentioned in the Part 1 Main Concept, in a single decision node, there are several conditions and

decisions. In terminology, we are going to call them sentence inputs and decision outputs.

There is an input channel in each sentence input whereas an output channel in each decision output.

Please distinguish the “active” and “results”, the active is a fuzzy logic concept value and it would be and usually

in range from 0.0 to 1.0, whereas, the results can be any values, it’s a variables. E.g. channel “tz” active is 0.55,

channel “tz” value is 100, and the results is “100 * 0.55” = 55

The calculation result of an input channel is an array, and it would be arbitrary number of results (even 0-length

array and no result), we called them channel results

Page 128: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

128 © 2011-2013 Basefount

The calculated active of a single sentence, we call it sentence active

The calculated of a decision node, we call it node active

After node active, we will get some output channel results, we call them decision results

We need solve out the behavior results from decision results, and this calculation process we call it defuzz

General Pipeline

Our brain node will collect all the information from scene (environment perceptions & agents themselves) and

put the information to Miarmy Core Engine. Then our engine will deal with the information and solve out the

behavior results, finally drive agents and update the scene in brain post node.

The engine is not a node or command, it’s a piece of code can receive information, solve out the results and

send information back

Logic General Pipeline

Engine Process Breakdown

1. Calculate each sentence input channel results

2. Solve out the sentence active from the sentence channel results by fuzzy logic

3. Use sentence active and logic rule and priority among these sentences, solve out the node active

4. Using hierarchical priority ranking system, recalculate the node active

5. Collect all the decision results based on node active

6. Using defuzz engine and decision results to calculate behavior result

Please notice the color of the following pictures:

Firstly, we need solve out the channel results from the type of input channel

Page 129: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

129 © 2011-2013 Basefount

Step 1: from input channel, calculate the channel results

After getting the values from input channel, we will use the test range, fuzzy value and input type to calculating

out the active of a single sentence, we called this sentence active

Step 2: Sentence Active Calculation Pipeline

Then we need use the logic tool and priority among several sentences and to calculate out the node active

Step 3: Node Activate Calculation Pipeline

Using priority ranking hierarchy, recalculate out the new node active

Step 4: Modify node active using priority ranking hierarchy

Page 130: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

130 © 2011-2013 Basefount

Using the active value from each node, and decision output values, we can get many decision results. Then

using defuzz method, we can solve out the actual results of each type of channel, drive behavior

Step 5 & 6: using node active and decision results finally get the behavior results, defuzz

Page 131: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

131 © 2011-2013 Basefount

Implementation

Step 1: Get Channel Results

From input channel name, we can let the engine calculate the results for this channel, the result is an array, and

the length of array is non-fixed, even can be zero.

A sentence of node, Red: input channel

The channel “sound.x” may return many results based on how many agents in the sound range of current agent.

Also maybe it returns nothing. (See “sound” perception chapter for getting the details the return values of

“sound.x” channel)

Step 2: Fuzzy Logic for a Single Sentence Calculation

In the following picture, a single sentence contains an input channel, a true range and 2 fuzzy values.

A single channel in yellow bound, Red: input channel Green Bound: true range Blue: fuzzy values

Each sentence is composed of:

Page 132: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

132 © 2011-2013 Basefount

Input channel: return a list of values based on channel type

Test rule: ID, pre-operator, priority, inverse flag

Test range: the full true range without fuzzy blur

Fuzzy value for the start and end of test range, plus and minus

Firstly, the input channel will return a list of values from Channel Input Engine base on the information of agent

itself and environment.

Using input type, we can deal with the list of input results.

The input type have “max” and “average” 2 kinds of calculation algorithm:

Max: choose the value make the sentence most be activated one

Average: take all the results from that array and calculate the average one

Finally, we can get one result value, we call it Channel Result. Please distinguish it with the Channel Results

Use the Channel Result being input value and use fuzzy logic to test its output active, this active is sentence

active

Fuzzy Range

And the sentence contains a “true range”:

True range from -90 to 0 make sentence true

Then and a fuzzy value, such as 30, then turns out the fuzzy range:

=> (-90 – 30), (-90 + 30), (0 – 30), (0 + 30)

=> -120, -60, -30, 30

Fuzzy range from -120 to 30 make sentence activated

Page 133: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

133 © 2011-2013 Basefount

Then the sentence active value will be:

Full active 1.0: if Channel Result from -60 to -30

Non active 0.0: if Channel Result less than -120 or greater than 30

Float point active 0.x: if Channel Result from -120 to -60 or -30 to 30

If using “Inf” channel (infinity channel), enable, and the fuzzy out will disappear

0 to + infinity in channel

The true range will be like this:

True range: input > 0 true

Then and a fuzzy value, such as 20, then turns out the fuzzy range:

=> 0 + 20 = 20; 0 – 20 = -20

=> -20, 20

Fuzzy range: input greater than -20 make sentence activated

Then the sentence active value will be:

Full active 1.0: if Channel Result greater than 20

Non active 0.0: if Channel Result less than -20

Float point active 0.x: if Channel Result from -20 to 20

Testing that Channel Result with the fuzzy range, we can get the “sentence active” in this step

Page 134: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

134 © 2011-2013 Basefount

Step 3: Fuzzy Logic between Sentences Calculation

Among the different sentences, there are “active flags”, “sentence priority”, “’not’ flags”, “logic operators” and

the ID of each sentence. Using these logic tools and the “sentence active” of each sentence from previous step,

we can calculate out the “node active”

Yellow bound are logic tools

We can give a logic operator before the each sentence

&&: “and” operator, ||: “or” operator, xor: “exclusive or” operator

You can also using the “not flags”, “sentence priority” modify the result, and the calculation rule will be

conclusion in Parse Result, use this rule and sentence active from each one, we can finally get the node active

An example of more complicated situation, but usually we don’t need that

Algorithm for prefix operator:

Add: the minimums active value

Page 135: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

135 © 2011-2013 Basefount

Or: the maximums active value

Exclusive Or: the absolute value of the different

After the calculation among these sentences, we will get the node active, in this step.

Step 4: Fuzzy Logic for Priority Ranking and Interfere to Node Active

By now, we have already known the node active, every node has its own node active, but if they are re-

arranging by hierarchy, the node active will be interfered. The decision in higher hierarchy takes higher priority.

A real example of decision hierarchy

Direct hierarchy:

(1 – Node Active) will passed to the child, and multiple to the Node Active of child

For example, the node 1, node 2, node 3 active values are: 0.2, 1.0, and 0.5

the node1 active is 0.2, then the 0.8(1-0.2) will be passed to node2

the node2 active is 1.0 and it will yield to 0.8(1.0 * 0.8), and the 0.2(1.0 – 0.8) will be passed to node3

the node3 active is 0.1(0.5 * 0.2)

So the node active results of the 3 nodes are: 0.2, 0.8, and 0.1 after ranking priority.

Page 136: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

136 © 2011-2013 Basefount

Grouping hierarchy:

(1 – Max Active) will be passed to the child group, and multiply to all of the children decisions

For example the node active values from node1 to node 4 are 0.1, 0.4, 0.7 and 0.5

the max active value of node1 and 2 is 0.4, so 0.6(1.0 – 0.4) will be passed to group2 and multiple to

node3 and node4

so the post-calculated active value of node3 is 0.42(0.7 * 0.6) and node4 is 0.3(0.5 * 0.6)

Grouping and Node Hierarchy Hybrid

You also can combine the direct and grouping method together, and the algorithm is the same

Hybrid hierarchy ranking priority

Page 137: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

137 © 2011-2013 Basefount

Step 5 & 6: Output Mechanism - Node Active, Default Decision and Normal Decision

Using each node active value, we can firstly get the output channel active of each node, and then solve out the

decision results. Just like the picture below, if the node active is 0.2 after sentences calculation. The “ry” and “tz”

channels are active 0.2 for this specific node. The decision results are “ry”: 24 (120 * 0.2) and “tz” 4 (20 * 0.2).

Normal Decision determine output channel based on node active

But please notice, this output channel active (like the 0.2 we just mentioned) is not the final output active for

this type of channel, system need also calculate the node active from every node. And finally, system need solve

out the ultimate correct active value of a type of channel combine with several active values from every node

and the default value of this channel in the default decision.

Before continuing, we need now introduce a concept called default decision.

Default decision implicitly contains the default value of every channel’s output. (even there is no default

decision, these implicit values exist)

The default value means the value which output channel will blend with, when this type of output

channel has not been fully activated by any of normal node.

One can explicitly specify one or more default values for some specific channels and those default values

will take place the implicit ones.

If we want to get the ultimate active value of specific channel, we need combine with default decision node.

Default value will work when this channel is not fully activated

Page 138: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

138 © 2011-2013 Basefount

Please look at the picture above, “tz” channel has been explicitly re-specified and when there is no any node

trigger “tz”, the “tz” channel will be 100.0 by default; And if the “tz” channel is fully triggered by any other node,

the tz will take the value from that node; Or if the “tz” channel has not been fully triggered, system will calculate

a blended value base on Defuzz Type Algorithm.

3 types of defuzz algorithm

Average: average result from every normal decision, then average the default one

Max: get the max one from result of normal decisions if the max one less than 0.5, get the default one

Blend: don not distinguish the normal and default decision, blend the result all.

So far as we know, each node has a node active, and each node has several outputs. The part would a little bit

confusion so we will explain this directly by an example. Imagine that we have bunch of decision nodes, and

each one of them has several outputs. There must be several overlapped channel names. We need calculate the

output active based on the defuzz type. Let’s take a look an example, just look at the following 3 nodes, 2

normal decisions and a default decision.

We just demonstrate the calculation of channel “tz”.

2 normal decision nodes with 0.2 and 0.8 active and a default node

For the first normal node, we got:

value:20

active: 0.2

For the second normal node, we got:

value: 20

active 0.8

The default decision node, we got:

Page 139: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

139 © 2011-2013 Basefount

Value: 200

We can calculate the result by following rules:

Average Type

o The default node active is (1 – max): 1 - 0.8 = 0.2

o Sum = 0.2 * 20 + 0.8 * 20 + 0.2 * 200 = 60

o Sum of Active = 0.2 + 0.8 + 0.2 = 1.2

o Result: 60 / 1.2 = 50

Max Type:

o We get the max active 0.8, the second normal decision

o Result: 20 itself (the second normal decision value)

o Note: if the max active blew 0.5, we take the default value in default decision 200

Blend Type:

o We get the max active 0.8, the second normal decision

o Result: 0.8 * 20 = 16

o Note: similar like Max Type but we need multiply the active value.

Page 140: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

140 © 2011-2013 Basefount

Part 5 Logical Simulation As far as we know we can use input channel get an array which contains the input results. So different channel

channels get the different array based on our channel input engine.

And also there are a lot of decision results represented by the output channel, we need transform that to the

execute information by our channel output engine and send them to agent.

Logic Presets There are many presets for building decisions or filling channels, after you familiar with all the concepts, you can

use these preset accelerate the brain construction process.

Channel Presets

Automatically fill the channel contents

Channel presets

Page 141: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

141 © 2011-2013 Basefount

Decision Presets

Automatically create decision will logic inside.

Logic decision presets

Interactive with Agent Some channels can return result based on other agents, let the agent can feel others. They are “sound” and

“vision”

Sound

Sound channel is useful and effective ways for knowing the agent nearby and usually used to apply agents

collision avoidance. Each of agents has an intrinsic sound range attribute and a sound frequency attribute.

Selecting any agent, you may notice it is located channel box:

Sound attributes

Each of the agents has a sound itself. Like this:

The sound range for agent

Page 142: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

142 © 2011-2013 Basefount

Sound channel have some auxiliary option, like sound.x, sound.y, sound.d, etc. No matter what channel you are

using, before calculating, sound channel will firstly find the agents in its range, then only calculate result based

the in-range agents. Like the picture shown blow, the Y agent can only feel B and C for sound testing, whereas

the X will let agent C and A for testing.

The agent Y cannot feel agent A and X, and the agent X cannot feel agent B and Y

And actually the sound range is a 3D range, means it can feel the agent in top and button of it.

Select the agents in sound range firstly

After getting the agents in the sound range of current agent, it will test them by specific channel and return

values.

The sound.x will return the degree relative to the current agent. Look at the picture below,

The sound.x will return 45 for agent “A”, -135 for agent “B”. As for agent “C”, because the C agent is not in range

of agent, so, there is no return. The final result will be an array which contents are [45, -135].

Using this array, we can combine the “input type and “fuzzy range”, we can calculate out the sentence active.

Also see the picture below, for example, we are testing is there any agent in my left front, and the fuzzy range is

0 to 90, with a fuzzy value (the red gradient color). The results are [45, -135],

So the 45 make the sentence fully active 1.0, and the -135 make the sentence active 0.0, if we using

“input type: Max”, we need find the maximum sentence active. Conclusion, the sentence active will be

1.0

If we are using “input type: Average”, we will take both sentence active 1.0 and 0.0 and average them,

so the sentence active will be 0.5

Note: There’s a concept call subjective and objective, like the picture shown above,

when we testing agent Y, the “Agent Y” is subjective agent, we call it “current agent”,

and this time “Agent A, B, C and X” are objective agents, we call them “others agents”.

The engine will iterate calculate every agent in scene, and each one of them have one

chance being the “current agent”

Page 143: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

143 © 2011-2013 Basefount

The sound.x is testing others agents in horizontal space whereas the the sound.y is testing others agents in

vertical space

sound.x channel example for current agent

Take a look at the following picture, the sound.ox channel tests the in-range agent’s orientation. The agent A,

angle is α, should be -60 degree; for agent B, the angle is β = -160, in this example, the input results contents are

[-60, 160]

The sound.ox is testing agents in horizontal space whereas the the sound.oy is testing agents in vertical space

sound.ox channel example for current agent

sound.d channel will return the every distances between the current agent and the others agents in sound

range. For the following example, only the agent A, B, C can join calculation. Assuming that the sound range of

current agent if 25, the input results should be [d1, d2, d3], approximate [18, 16, 23]

Page 144: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

144 © 2011-2013 Basefount

sound.d channel example for current agent

sound.f channel will return the each frequency of agent in current agent sound range. For the following example,

the current agent can feel A and B, if the frequency of A is 3, the frequency of B is 5, the input results should be

[3, 5]

sound.f channel example for current agent

You may notice, with sound channel, we can easily get the information from nearby agents and response, so it’s

usually can use to aiming target, of avoid close agent.

Page 145: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

145 © 2011-2013 Basefount

Relative Speed Detection

For getting more details on the relative velocity this topic, please reference Wikipedia

http://en.wikipedia.org/wiki/Relative_velocity

We can use sound channel detect the relative velocity of near agents, and know is the near agent is approaching

or leaving, also the direction relationship.

We’ll decompose the velocity into the speed of X, Y, and Z, and use “+” or “-” to describe the approaching and

leaving behavior.

In the following 4 examples we’ll describe the relative speed of each agents:

Example 1: both agents’ moving speeds are 3, and face to face,

If they are approaching (left picture), the relative velocity:

Speed X: 0

Speed Z: +6

If they are leaving (right picture), the relative velocity:

Speed X: 0

Speed Z: -6

Inverse direction (Left) approaching, (right) leaving

Example 2, the moving speed is 3, and face to face but in different direction

If they are approaching (left picture), the relative velocity:

Speed X: +3

Speed Z: +3

Page 146: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

146 © 2011-2013 Basefount

If they are leaving (right picture), the relative velocity:

Speed X: -3

Speed Z: -3

Cross direction (Left) approaching, (right) leaving

Example 3, the moving speed is 3, and face to back follow but in different directions

Speed X: 0

Speed Z: 0

Relative speed is 0, both left or right agents

Example 2, the moving speed is 3, and face to face but in different direction

Page 147: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

147 © 2011-2013 Basefount

If they are approaching (left picture), the relative velocity:

Agent Blue: Speed X: +3

Agent Blue: Speed Z: 0

Agent Yellow: Speed X: 0

Agent Yellow: Speed Z: +3

If they are leaving (right picture), the relative velocity:

Agent Blue: Speed X: -3

Agent Blue: Speed Z: 0

Agent Yellow: Speed X: 0

Agent Yellow: Speed Z: -3

The blue agent is still no moving, and yellow one passed him

Channels

The agent can only detect only one near agent in his sound range for relative speed. So please use this carefully.

sound.spx the relative speed in X direction of one near agent

sound.spy the relative speed in Y direction of one near agent

sound.spz the relative speed in Z direction of one near agent

Auto Collision Avoid

As we mentioned before, if we want our agents to avoid each other, we usually need the “sound” family

(sound.x, sound.d or sound.y) channels with logic nodes to achieve that. But in some case we want to simplify

this process, in below cases, we can ignore the slipping on the feet (or no feet):

Page 148: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

148 © 2011-2013 Basefount

Shot is very far (agent number also very high)

3D space (like birds or flying animal)

After version 2.5, we provided the Auto Collision Avoid tool which can make our agents avoid each other

automatically without any setup.

The smallest radius

Before talking about the auto avoid, there is a very important concept need firstly clarify. It is the smallest radius.

Each agent has a radius range, if other agents in this range, the agent will push out other agents a little bit, and

this range called “smallest radius”. That’s the closest distance the agent can bear other agents.

The smallest radius can be calculated by:

Agent Smallest Radius = Agent Sound Range * Smallest Radius Ratio

The agent sound range is a native range existed in each agent

The smallest radius ratio is a value located on each Agent Group Node, and the default value is 0.5

So by default the smallest radius of agent is the HALF of the sound range. The reason we setup the HALF of the

sound range as the default, because:

We want the sound channel also worked in some case so that we can blend auto avoid with the sound

logic, and make behavior better

Sound range usually bigger than the agent body, so we need shrink it down a little bit.

How to Use

The only things we need to do are:

Page 149: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

149 © 2011-2013 Basefount

1. Make sure the sound range and smallest radius setup correctly, for example the bird like this, you can

select the agent and

Select and see the sound range

2. Open the auto avoid in the Miarmy Global and adjust the push speed

Open auto avoid and adjust the push speed

The Push Speed

The push speed means the percentage the current agent push other agents outside the smallest radius. Like the

following 2 pictures shown, the first case is 1 (100% per frame), that is means push the other agent out directly

from the smallest radius in a single frame.

Push speed is 1 (100% per frame)

The second case is 0.5 (50% per frame), that is means push the other agent out from the smallest radius 50%

each frame and after 4~5 fames, the other agents will be pushed out, the whole process is smoothly.

Page 150: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

150 © 2011-2013 Basefount

Push speed is 0.5 (50% per frame)

Our default value is 0.3 (30%) and that is a smooth setup, if you want to use 1(100%) there might be some jitter

in some cases.

Vision

Vision channel is useful ways for finding identify far agent. Any agents in current agent vision range can be seen.

Each of Miarmy agents has 2 intrinsic vision ranges attribute and a color attribute. Selecting any agent, you may

notice it is located channel box.

Vision attributes

Each of the agents has a vision itself. Like this, notice the green frustum, it is the vision range of selected agent

Vision range frustum

You can define these attribute in agent group node, see Part 3 Agent Infrastructure

Page 151: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

151 © 2011-2013 Basefount

The same as sound, vision channel also have some auxiliary option, like vision.x, vision.y, vision.h, etc. No matter

what channel you are using, before calculating, vision channel will firstly find the agents in its range, and then

only calculate result based the in-range agents.

Like the picture shown blow, the current agent cannot see agent B, C and D, but cannot see Agent A and E

And actually the vision range is a 3D range as well as sound, means it can feel the agent in top and button of it.

Select agents in vision range firstly

After getting the agents in the vision range current agent, it will test them by specific channel and return values.

The vision.x will return the degree relative to the current agent. Look at the picture below,

The vision.x will return α degree for agent “A”, γ degree for agent “B”, and β degree for agent C”. As for agent “D”

and “E”, because they are not in vision range of agent, so, there is no return. The final result will be an array

which contents are [α, β, γ]. As shown by following picture, the result approximate is [30, 15, 35].

The vision.x is testing others agents in horizontal space whereas the the vision.y is testing others agents in

vertical space

Page 152: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

152 © 2011-2013 Basefount

vision.x channel example for current agent

vision.z channel will return the every distances between the current agent and the others agents in vision range.

For the following example, only the agent A, B, C can join calculation. Take a look at the example picture below,

the input results should be [d1, d2, d3]

vision.z channel example for current agent

vision.h (hue) channel will return the each color of agent in current agent vision range. For the following

example, the current agent can see A, B and C, if the color of A is 0, the color of B is 2, the color of C is 3, the

input results should be [0, 2, 3]

Page 153: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

153 © 2011-2013 Basefount

vision.h channel example for current agent

You may notice, with vision channel, we can easily get the information from far and in-front agents and

response, so it’s usually can use to identifying and chasing target.

Agent Exclusion Feature

Sound channel and vision channel has agent exclusion feature among sentence calculate, this feature can make

sure the channel get more precise and natural results. Additionally, this feature is automatically enabled, and

user cannot disable it.

Usually we need use not only one type of channel for interactive the others agents. For example, sometimes we

need test is there someone in my left and near. (So that we can turn right and slow down)

As far as we know, we can use sound.x channel to test is there someone in my left, and use sound.d channel to

test is there someone nearby, then naturally use “AND” operator to get the intersection agents.

Just like this:

Someone in my left and near

Page 154: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

154 © 2011-2013 Basefount

At this time, the agent exclusion feature will be automatically enabled. Please take look at the pictures below,

the agents are gradually excluded by the filter and never join the calculation again for the other sentences in the

same decision node, and we will finally get the accurate agent meet condition.

From left to right, the exclusion filters respectively are “sound range”, “sound.x” and “sound.d”

Suppose that we didn’t have Agent Exclusion Feature and take a look at the following example, the node will get

the wrong result (wrong node active)!! Please notice the following second picture, green dot mean there is an

agent make sound.x channel test active 1.0 and notice the third picture, green dots mean there are 2 agents

make sound.d channel active 1.0. Finally, sentence A and B will both active 1.0, the A “&&” B logic expression

makes this node active 1.0. The system would mistake there is someone in my left and near. But unfortunately,

in fact, there is no agent in the GREEN Zone in third picture! That is means that, actually there is no agent in my

left and near. So, without agent exclusion feature, the channel will not very accurate.

Situation without agent exclusion feature

The vision channel also has agent exclusion feature enable. Therefore, between each sound and vision channel,

we only need “&&” (“and” operator).

And also we need avoid sound and vision channels are filled in the same decision node, because the sound and

vision channels have independent exclusive agent engine.

All of them happened automatically and the user will not notice it.

Page 155: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

155 © 2011-2013 Basefount

Dynamically Decrease Intelligence Mechanism (DDIM 1.0)

In some situation, for optimizing and speeding up of simulation, we need disable some feeling for some agents.

And block the others agents feel them.

sound.mute (output channel)

If this channel is executed, the current agent will disable the sound and also cannot be hear by others agents.

vision.mute (output channel)

If this channel is executed, the current agent will disable the vision and also cannot be seen by others agents.

There is an example we explained more about this in Part 9: Optimization - Lower the Intelligence

Collision Detection

Collide channels are another important kind of feature make agent interactive each other. For details, please

check out Part 7 Collision Detection

Interactive with Environment One can create many Miarmy perception contents in scene and organize them to environment.

Some channels can return results based on environment, let the agent can feel the contents of the scene and

interactive with them, like follow a road, avoid stuff and so on.

Ground

Ground channels let agents are able to feel terrains and interactive with them, adapt the shape of terrain, such

like follow the height and align the orientation.

For making the agents are able to feel terrains, we need mark that piece of plane mesh terrain in Miarmy Terrain

Manager. (We highly recommend that you simplify the mesh before marking it terrain)

And once a piece of geometry marked terrain, there is a McdTerrainNode connect to this mesh. This node will

record some attributes of terrain for physical simulation usage. So you don’t need do anything on this node.

Page 156: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

156 © 2011-2013 Basefount

Terrain manager and mark terrain

Once marked terrain for a mesh plane, agent will find them when apply ground channels.

Above and beneath the terrain plane mesh

The ground channels will first find the closest terrain and return only one result to input results. Shown as the

following picture, in this moment, the agent A can only feel and interactive with terrain 1 and the agent B can

only feel and interactive with terrain 2

Agents are able to feel the closest terrain in scene

The ground channel will return the height underneath the feet of agent. For example and take a look at the

following picture, the ground channel will return 3 for first agent, 0 for second agent, minus 4 for third agent

and 2 for last agent.

The ground channel example for agents

Page 157: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

157 © 2011-2013 Basefount

The ground.dz will return the angle between the Z-axis of agent and the terrain plane of that agent place, for

example the following picture, the first agent will return α = 35 because the ground in-front is higher, and the

second agent will return β = -40 because the ground in-front is lower, whereas the third agent will return 0

because the ground in-front is align to Z-axis of current agent.

The ground.dz channel example for agents

The ground.dx channel is very familiar with ground.dz channel, nothing special but testing the X-axis. In

following picture, the first agent will return α = 40 because the right terrain is higher, and the second agent will

return β = -35 because the left terrain is higher. The third agent will return 0 because the x-axis of agent is align

to the terrain

The ground.dx channel example for agents

Once we get the relationship between the agents and terrain, we can move the agents up and down, rotate

them forward or backward, and left or right for adapting the terrain

Page 158: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

158 © 2011-2013 Basefount

Using with ground, ground.dx and ground.dz, we can align our agent seamless to terrain

Bound

Bound is a kind of perception contents, which can be cubic and spherical shapes in this version of Miarmy and

you can key frame it for triggering some event easily, such as triggering a group of agent start to run. (Bound can

be any shapes in next version)

You can create bound in Miarmy > Perception Contents > Create Bound, and each bound has 2 bound related

attributes

Bound channels let agents are able to feel bound and test whether in or out side of bound. It’s the simplest

channel but very useful.

(left:) Bound attributes (right:) Spherical and cubic bound

The bound.in channel will return 1 when the agent inside of it while 0 when the agent outside of it. Suppose

there are 3 bounds in scene and 5 agents located in different places, so the inputs result will be:

return 1 for agent A, C, E

return 0 for agent B, D

Note: the agents can read the information from deforming terrain, but it may not

accurate when the deformation is big, because there is a Maya Bug. For avoiding the

bug, we just need simply create a geometry cache for that terrain and remove the

deformers.

Page 159: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

159 © 2011-2013 Basefount

Bound channel example

Indexing Technique

Some perception contents support indexing. The perception contents which can be indexed are:

Bound

Zone

Road

Wind

On each one of these perception contents, there usually is an attribute XXX ID, such as Bound ID or Road ID. The

channel name can be modified to such as bound[2].in, road[0].x or zone[15].d. If the channel name have ID, it

can only percept and interact with the perception contents with the same ID, for example, road[3].ox can only

fetch results from the road which Road ID is 3.

For example, bound is one kind of them. Please notice there is a Bound ID attribute on each bound.

Bound ID attribute can be any positive value (including 0)

We can simplify use bound[0].in to test whether current agent in bound which Bound ID is 0. So modified from

the previous bound example, the results will be:

Return 1 for agent A, because only A is inside of bound which ID is 0

Return 0 for agent B, C, D and E

Page 160: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

160 © 2011-2013 Basefount

Bound channel with indexing techniques

Zone

Zone is a kind of perception contents created from a little piece of mesh, usually not complex one.

And similar like terrain, once a piece of geometry been marked zone, there is a McdZoneNode connect to this

mesh. This node will record the Zone ID attribute for this zone.

(left:) any piece of simple mesh can be marked “zone” (right:) Zone ID attribute on zone

Zone channels let agents are able to feel a geometry zone plane with arbitrary shapes, and return the

relationship to the zone.

In fact the return results are based on the closest point on zone. So any zone channels will firstly find the closest

points from zone, and any calculation is based on these points. The red dot on the edge of zone as shown below:

Find the closest point, (left) 2D space, (right) 3D space

Page 161: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

161 © 2011-2013 Basefount

The zone.x channel will return the degrees between the agent’s Z-axis and the line from agent to the zones, in

horizontal space. Look at the following picture below, the red dots are closest points and the angle α and β will

be the retuned input results, approximate α = 80 and the β = -140, input results [80, -140]

The zone.x is testing zones in horizontal space whereas the the zone.y is testing zones in vertical space

zone.x channel example

The zone.d (zone.d2d) channel will return the distances from agent to zones in XZ plane. Please take a look at

the following 2 examples.

The first is in the top view, and the agent and 2 zones are all in XZ plane. After agent finding the closest points on

plane, zone.d channel will return in distances in XZ plane, the input result will be [d1, d2].

Example of zone.d or zone.d2d channel in top view

Page 162: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

162 © 2011-2013 Basefount

The second example shown this in 3d perspective view, please notice although the agent is in top of left zone

but it is in side of it, the distance in XZ plane is actually 0. And the distance from the right zone should be

mapped to the XZ plane d2 instead of those grey lines.

Another example of zone.d or zone.d2d channel in perspective view

The zone.d3d channel will return distances in 3d space. Shown as the following picture, (please distinguish this

to our previous zone.d2d example) we directly get the results from agent to the closest points of the zone. They

are green lines in the following picture, without mapping them to XZ plane. The input results will be [d1, d2]

zone.d3d channel example in perspective view

The zone.in channel can test whether current agent in the zone area in XZ plane and return 1 if the agent inside

of it. Like the picture shown below, the agent A, B, and C is inside the zone area in XZ plane and will return 1 for

zone.in channel. For agent D, zone.in channel will return 0 due to that it is not inside of any zone area.

If you using zone[2].in for testing them, the agent B and C will return 1 and agent A and D will return 0.

Page 163: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

163 © 2011-2013 Basefount

zone.in channel example with/without zone ID, in Top View

The zone.hi can test the heights from agent to the zones. Firstly we get the vectors from agent to the zones, and

map those vectors to the Y-axis, like the green lines shown in the following picture, the channel input results

should be [h1, h2]

zone.hi channel example in perspective view

Repel/Forbidden Zone

What is Repel Zone

There is an interesting extra attribute on Zone object, it is “auto repel distance”, when this value set greater

than 0.1, it can repel agent out from zone without any logic trigger, this is useful when the agents want to get

around this zone.

Usage

All the things are automatically without any logic and

But please notice, if the agent already inside, it cannot push out them

Page 164: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

164 © 2011-2013 Basefount

Repel zone distance example, the agents already in there will not been pushed out

We recommend combine the obstacles meshes to a single mesh (and delete the history), can accelerate the

simulation speed tremendously.

A more complex example

Spot

Spot is another perception content of Miarmy. It’s actually a point in 3d space. With spot channels, agents can

test distances and directions with the spots and interactive with them, such like follow a spot, or trigger some

behaviors near a spot.

Additionally, spot support indexing.

Page 165: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

165 © 2011-2013 Basefount

(Left:) spots in scene, (right:) spot attributes

You can create spot in Miarmy > Perception Contents > Create spot, and each spot has 1 spot related attribute.

The spot.x channel will return the angle between the Z-axis of agent and the line of agent to the spots (angle

between black line and green lines, shown as below). In the following example, the spot.x channel will return α

degree for spot A, β degree for spot B and γ degree for spot C, so the input results should be [α, β, γ],

approximate [45, 130, -70]

The spot.x test spots in horizontal space whereas the spot.y channel test spots in vertical space

Note: you may notice there are some extra attributes on each spot, they are actually

belongs to build-in force field, we designed spot with a build-in force field combo due to

that in many case we need them both working together. We will talk about this later in

Part 7: Physical Simulation – build-in force field

(left:) Spot and build-in force field combo, (right:)build-in force field attributes

Page 166: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

166 © 2011-2013 Basefount

spot.x channel example

The spot.d channel will return distances between the agent and the spot in 3d space, like the following picture,

the spot.d channel will return the input results [d1, d2, d3] from current agent.

spot.d channel example

Road

Road is a main perception content of Miarmy. It’s actually a point in 3d space. With spot channels, agents can

test distances and directions with the spots and interactive with them, such like follow a spot, or trigger some

behaviors near a spot.

For creating road, just select any curve, and click:

Page 167: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

167 © 2011-2013 Basefount

Creating road from curve

Road under the hood

Assets

Once we create a road, there are 3 kinds of asset been created, they need working together for displaying the

road and interacting with agents. Please manage them well and don’t delete any one of it, or your road would

not working properly.

1. Road control curve

2. Road mapping curve

3. Road node

Take a look at the following pictues, in the left picture, the selected curve on top of road is the “control curve”

and the blue-arrows-formed road on the ground is the “road node”. In the right picture, the selected curve on

the ground is the “mapping curve” which is a mapped curve from control curve. It always been set as

Intermediate Object (know more about Intermediate Object, please Google “Maya intermediate object”).

Control curve and mapping curve, the blue flow arrows are road node

Page 168: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

168 © 2011-2013 Basefount

Management by Parenting

For parenting road to others node ,you just need parent the control curve to other node. For example, you need

parent your road from “Perception_Set” to “group1”, you just need select curve1 and parent curve1 to the

group1, then the rest suff will be automatically moved to group1.

Parenting “road” process from Perception_Set to group1, only operate on curve1 (the control curve)

Road Visualization by Control Curve Points

Arrange well the points on control curve can lead better visualization of the curve, just like the pictures below.

(left:) A well arranged control curve (right:) a non-well arranged control curve

But please don’t add or delete points on control curve, because in fact the control curve is controlling the

“mapping curve” all the time. The road will not working if you add/delete the topology of the control curve.

Road Precision by Control Curve Points

The precision of road is determined by the complexity of control curve (before creating)

Page 169: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

169 © 2011-2013 Basefount

Usually, a more precise road only can lead better visual result, but the calculation is slower, we not recommend

you do that.

Attach Road to Terrain

Road can be attached to terrain. Select the control curve and terrain mesh, and click Miarmy > Knowledge

Perception > Attach Road to Terrain, your road will be attached to terrain.

Road has been attached to terrain

Road Mode

Road can be 2 modes: flow mode and road mode.

Using flow mode, you can roughly constrain a group of agents follow a flow and make them

convergence or separate by flow edge direction.

Using road mode, you can precisely constrain you agents in road even a portion of road.

Flow mode:

Page 170: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

170 © 2011-2013 Basefount

Flow Mode: turn on flow and turn off road

Road mode:

Road Mode: Turn on road and turn off flow

Usually, you can switch mode by menu item:

Switch road mode in menu item

Flow Mode Attributes

Please notice, flow mode is not support indexing techniques,

Note: There would be an update problem here. Sometimes, after switching mode, the

road would disappear, like this (picture below, left). You can simply move the control

curve little bit, it would be ok. (Right picture)

Page 171: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

171 © 2011-2013 Basefount

Flow mode attributes

Flow Width Attribute:

The narrow and wide flows, controlled by “flowWidth” attribute

Flow Orient Attribute:

The outward and inward flows, controlled by “flowOrient” attribute

Flow Edge Attribute:

(left:) 1.0 (100%) edge ratio (right:) 0.3 (30%) edge ratio

Flow Len Attribute:

Page 172: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

172 © 2011-2013 Basefount

The long and short arrows’ length of the flows, controlled by “flowLen” attribute

When the agent is in flow, it can feel it automatically.

Road Mode Attributes

Road mode can use indexing techniques.

Road mode attributes

Road Width Attribute:

Narrow or wide roads, controlled by “roadWidth” attribute

Page 173: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

173 © 2011-2013 Basefount

Road for perception

Road Orientation

No matter road or flow mode of the road, the relationship of road orientation and agent orientation is the same,

just as the picture shown below. If the road direction pointing to the agents left, the return value should be

positive, if the road direction pointing to the right of agent, the return value should be the negative.

The relationship of road orientation and agent orientation (both road and flow mode, the same)

Road Channels

Different mode should use different channel, or they will not work.

If you are using flow mode, there is only one channel called road.flow available.

If you are using road mode, you can use road.x and road.ox channels.

Firstly, if the agent isn’t on the flow, the channel will return blank. For the agents on the road, the channel will

return the angle between the agent Z-axis and the flow direction.

Take a look as the following picture, the red arrows are the flow direction, and the blue arrow are the agent Z-

axis. For agent D, the channel road.flow will return blank, for agent A, B and C, the channel will return α = -70, β

= 30 and γ = 25.

Page 174: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

174 © 2011-2013 Basefount

road.flow channel example, red: flow direction, blue: agent z axis

The road.x channel will return the position of agent on the road, the middle of the road is 0, and the left and

right side of the road are 1.0 and -1.0. In the following example, the agent C will return blank because it’s

outside of the road, the agent A, B and C will return -0.4, 0.2 and 0.5 respectively.

road.x channel example

The road.ox channel will return the angle between the agent Z-axis and the road direction, the red arrow is the

road direction and the blue arrows are the agent Z-axis. For the agent C, the channel will return blank, and for

the agent A, B and D, it will return β = 35, γ = 0 and α= -70 respectively.

Page 175: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

175 © 2011-2013 Basefount

road.ox channel example, similar with the road.flow

Bi directional Road

Our agents can detect the road by “road” channels, but also they can detect the road in the reverse direction.

And use our “OR” logic setup, our agent can walk on the road bi-directional.

rroad.ox (reverse road detection channel)

This channel is the same as “road.ox” but it detected the road by reverse direction, that is means if the road

point to my left, this channel will return the road point to my right, and also the degree will be changed,

For example:

road.ox return 30 ( the road point to my left )

rroad.ox will return -150 (the road point to my right behind)

We usually use the decision node channels like this:

Road point to left logic

Page 176: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

176 © 2011-2013 Basefount

Road point to right logic

Bi-directional Road

3D Road (Path)

With Maya curve tool, we can create a 3D path and make our agents feel it and interactive with it, such as follow

it. And our path supports indexing.

Page 177: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

177 © 2011-2013 Basefount

3D Path

The path system is very similar like “road” but we extended it into 3D space. For creating the path, we need to

the 2 steps:

Select a curve and make sure it frozen transformation (translate and rotate 0 and scale 1)

Click Miarmy > Perception Knowledge > Create 3D Path

Then the selected curve will be marked path and there will be a path range been drawn out like the above

picture shown, the blue range circles is the path range.

Also there are some path attributes in the channel box, but at this time, only “flow width” and the “road ID” is

useful.

Path attributes in channel box

Please check out the follow picture, the orange dot line is the curve we used to create the path, and the cylinder

is a range which distance from curve is “Range” which marked by the blue short line.

If we want our agent feel the path, the agents should be inside the road range, there are 2 agents in the below

image, the inside one can feel the path and interactive with it, but the outside one cannot

Page 178: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

178 © 2011-2013 Basefount

The inside agent can feel the path whereas the outside one cannot, and the path range is R, short blue line

Channels

path.ox

Similar like the “road.ox”, can detect the degree between path direction and the agent direction in horizontal

space (left is positive, right is negative)

path.oy

Similar like path.ox, but in vertical space (down is positive, up is negative)

path[<idx>].ox

Similar like the “road[<idx>].ox”, can detect the degree between path direction and the agent direction in

horizontal space (left is positive, right is negative)

path[<idx>].oy

Similar like path[<idx>].ox, but in vertical space (down is positive, up is negative)

Maya Field

Agents can feel Maya field directly without any additional setup.

Page 179: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

179 © 2011-2013 Basefount

Red arrows are the directions of field and the blue arrow is the Z-axis of agent

Similar the road.ox, the field.ox channel will return the angle between agent Z-axis and the field direction of

agent position in horizontal space. In the following example, the channel will return result α = 25, β = -65 and γ =

-110 respectively, for agent A, B and C.

Arbitrary Maya field and field.ox channel example

The field.ox is dealing with horizontal space whereas the field.oy is dealing with the vertical space

The field.a channel can return the Maya field amplitude from the agent position.

Page 180: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

180 © 2011-2013 Basefount

Composition of Forces

The force field related channels, like the Maya field, fluid, and the wind, are not support indexing techniques.

But they support composition of forces.

Imagine that there are several fields in scene. At this time, channels like the field.ox will NOT return an array

contain each result from each field. Instead, it will return only one result based on the composition of force field.

Like the following example, the 3 red vectors are the initial forces from 3 fields. The orange vector is the

composition force of f1 and f2, and the Green vector is the final composition force vector from f1, f2 and f3.

Channel field.ox will return angle between the blue vector (Z-axis of agent) and the green vector (Force

Composition), which is angle ϴ.

Composition of forces f1, f2, f3 => F1+2+3

Maya Fluid

The fluid channels are totally the same as the of Maya field channels, because in fact, fluid is somewhat like the

field, we can read field information from fluid, like the direction and the amplitude.

So the fluid channels including, please refer the field perception contents.

fluid.ox

fluid.oy

fluid.a

Formation Control

Formation control feature is able to make agent feel and perform based on the formation target points. The

points in a mesh or lattice can be set as the targets points of formation.

Formation Object & Formation Node

To use the formation feature, we need firstly flag a formation target object. It can be a mesh or lattice. Select

one mesh (or lattice), and click Miarmy > Knowledge Perception > Mark Formation Flag to make the object to a

formation object.

Page 181: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

181 © 2011-2013 Basefount

Make a mesh to formation object

Make a lattice to formation object

At this time, you can see that digital number in each point shows that this object has been marked as “formation

target” object. The Node control this digital number display is the formation node. The mesh shape connects

into this node, like the picture below:

Formation node, mesh connect to formation node

And some attributes can control the digital number display of formation node

Page 182: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

182 © 2011-2013 Basefount

Formation node attributes

Formation Placement

Then we can place agent from the formation object, Miarmy > Placement > Create Placement Node From >

Mesh (or Lattice)

Create placement node from lattice or mesh

Place notice the created placement node must connect with the same formation control node from mesh or

lattice. (This process will be done by system automatically)

Formation node connect both target object and placement node

IMPORTANT: Mesh > formation node > place node

Page 183: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

183 © 2011-2013 Basefount

Once everything has been setup ok, the agents been placed from the placement node will store the information

of formation object and the target ID of that point.

Each agent stores info in memory.

Formation object

Point ID in formation object

So each agent has a formation target point, and this point is unique one. In each frame and when the channel

call, the agent can find where the target point is and what the relationship with it.

Formation Channels

Since each agent has a “Formation Target Point”, we can use logic channel read it and get the direction and

distance from it. The name “Formation Target Point” is too long, so we abbreviate this name to “ftp”

ftp.x channel

Similar like “sound.x” channel, it can return the horizontal degree relative to the agent, if the target point is in

agent’s left, return 0 ~ 180, otherwise on the right, return -180 ~ 0. The example of following picture: if the

target point is at A, the return value will be 50. And if the target point is at B position, the return value will be -

120.

The ftp.x channel example

ftp.y channel

Similar like “ftp.y” channel, just in vertical space, especially useful control the formation of birds with lattice type

of formation object.

ftp.d channel

Similar like “sound.d” channel, it can return the distance from agent to target point. For example below,

If the target point is in position of A, it will return 1

Page 184: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

184 © 2011-2013 Basefount

If the target point is in position of B, it will return 0.3

If the target point is in position of C, it will return 1.2

ftp.d example

With the formation control channel, you can easy let the agent follow its target point, and keep the formation

changing based on the target mesh/lattice changing.

Delay Effect

Due to the agents are following the target points, the agent usually slower than the target object and follow that.

For getting the best result, when we’re deforming/animating the target object, we’d better make it a little bit

faster than agent moving but not too much.

If the target object is deformed slower than the agent moving, it will make the agents backward.

If the target object is deformed too fast, it will destroy the formation shape.

So, the best way is make the target object move a little bit faster than agents but not too fast. Just like the

following picture. The deforming object is some bit ahead of birds.

Page 185: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

185 © 2011-2013 Basefount

Delay Effect

Multiple Formation Target Objects

If you have many formation target objects, please setup them one by one separately. That is means we need

mark formation and generate placement node for each of formation object. The usage of formation channels is

the same.

Page 186: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

186 © 2011-2013 Basefount

Multiple formation objects driving agents

Formation Accurate Follow

After version 2.5, with output follow logic, our agent can follow the formation target points accurately. Then we

can make our agent changing the shape 100% same as the shape of mesh or lattice, especially in 3D space. That

will be much easier to control. For example, a lattice is deforming by deformer and each birds follow that lattice

smoothly.

ftp.follow.t channel

This channel can make our agent follow the target point. For example in below sample, the agent is that arrow,

and the A is its target point. If this channel fully activated, (namely 1.0), the agent will go to the target point

immediately without any delay:

Agent follow the target immediately and 100%

Page 187: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

187 © 2011-2013 Basefount

Agent follow the target point gradually and 50% each frame, finally catch up, smoothly

fdsf

HP & MP

HP (hit point) and MP (mana point) are 2 custom variables for arbitrary usage, usually be used to simulate the

energy of agent. Each one of agent has some initial HP and MP value after first creating. This value is store in

memory and only can be modified by the related channels.

You can set the initial HP and MP in McdAgentGroup node and randomize them when initializing.

The McdAgentGroup node and the attributes on it

The hp channel for input, it will return the current value of HP inside the agent memory.

The hp and hp.set channel for output, it will set the value of HP to the specific value.

In most of the cases, we are not use using hp channel like that. Usually, we firstly setup the hp channel in default

decision node, make the output type “change rate”.

At this time, the hp for output channel will not set HP value, instead of that, it will change the HP value per

second. For example, when the agents are walking on the radiation zone (zone[1].in channel greater than 1), the

HP will drop some points(5 points) per-second. And if you want to reset the HP value in agent memory, you

need use hp.set channel because at this time the hp channel is in “change rate” mode, you cannot reset hp

value directly by hp channel.

Page 188: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

188 © 2011-2013 Basefount

Setup output type to “change rate”

Agent hp will drop at speed of 5points/second if it in the zone which index is 1

Reset agent hp to 100 if the agent in bound

The MP and the mp channels are totally the same as HP and hp channels

Lean

Lean channel will return the relationship between the agent and the 0 transformation space, using lean channels,

you can test is agent tilt up/down or roll left/right

Mathematically, it will return the Y component of the X, Y or Z unit axis. It’s one of the simplest channels. The

unit axis only have length 1, so the result will be [-1,1]

lean.x: negative means roll left, positive means roll right

lean.z: negative means head down, positive means tilt up

lean.y: (not usually use) negative means agent flip down, positive means agent in positive side

Page 189: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

189 © 2011-2013 Basefount

Example of lean.z

Example of lean.x and lean.y

This can be used to control bird flying, if tilt up, flip faster the wings, if head down, stop flip

Page 190: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

190 © 2011-2013 Basefount

(Left) flying up, wing flapping, (right) head down, stop flapping

Parent channel, transform space

Since version 1.5, Agent can be parent to others transformation space when simulation, and t

Sometimes we want to achieve agents walk on vehicle, and when the vehicle move away, the vehicle will take

away the agents and the agents will move along with them.

The agents are in world space

We make that plane a zone, and when the agents are on that plane, it will perform parent channel:

Page 191: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

191 © 2011-2013 Basefount

Parent channel

After parenting, the agents will go to the pPlane1

And when we click the rest, the agent will come out to original transformation space.

Note: when placement, the agent will record the current parent node to its memory and will return to its parent

when we reset the start frame

Parent Channels:

parent:xxx

parent current agent to object which name is xxx

parent:0

parent to world space

Notice, the parent object cannot contain scale value!!

Some Transform Channels

tx, ty, tz, rx, ry, rz can be filled in input channels now and it will return the value of current tx, ty, tz, tx, ty, tz

respectively from defuzzed output channels.

For example, this can be used to control bird flying. When the birds is turning, the “ry” channel will be reflect the

birds behavior, we can put “ry” in input channel, make them lean to left when turning left and lean to right

when turning to right.

Page 192: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

192 © 2011-2013 Basefount

(Left) turning right (right) turning left

Scene Info

The channel frame will return the current frame number.

The channel goFrame will return the frame number since beginning of simulation start.

Randomize

The noise channels will return a random number from 0 to 1 based on different conditions. You can easily

combine this value with fuzzy logic to make your output randomize.

Channels

The channel noise.id will return a random number based on agent ID. Each agent has a unique ID in scene once

it was placed out.

The channel noise.time will return a random number based on current frame number.

The value range of the returned random number is from 0 to 1, a float point number.

Page 193: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

193 © 2011-2013 Basefount

Usage Example

Randomize speed

The bigger activated, the faster the speed, random by agent id

Random speed

Randomize actions

Page 194: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

194 © 2011-2013 Basefount

Random action

Sine Channels

Sine is a very simple math tool can return value between 0 and 1 and also it’s a periodic value.

sin(x * frequency), the x is hidden and it’s the second unit

Channel with “all” suffix: control all, means all agents have same phase, all the agents will get the same value,

also have same period

sin_all()

sin_all(<frequency>) for example sin_all(2)

Channel with “agents” suffix: randomize phase on each agents, different agent will get the different value due to

the randomized phase. But all of them have the same period

sin_agent()

sin_agent(<frequency>) for example sin_agent(1.5)

Note, the higher frequency the faster change the value

Timer Channels

We can use timer channels to return a value between 0 and 1 from time to time, There are some parameters we can specify into the timer channels:

Seed: assign it for different timer can get different phase results

Freq: make the timer playback faster or slower than others There is a sub channel:

“.bf”: this make the timer result “back and forth” instead of “finish and return” There are some channels we have “_agent” extension:

_agent: make another seed for different agents. Examples:

timer

Page 195: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

195 © 2011-2013 Basefount

Example “timer” channel in sequential 6 time points

timer(seed)

Example “timer(1) and timer(2)” channels in sequential 6 time points

timer(seed, freq)

Example “timer(1,2) and timer(1,0.5)” channels in sequential 6 time points

timer.bf The sub channel “.bf” stands for “back and forth”, it will backward playback the timer and return the value like ping-pong playback in Maya time slider.

Page 196: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

196 © 2011-2013 Basefount

Example “timer and timer.bf” channels in sequential 6 time points

timer.bf(step)

timer.bf(seed, freq)

timer_agent Make another seed for different agents

Example only one “timer_agent” channel for 2 different agents in sequential 6 time points

timer_agent(seed)

timer_agent(seed, freq)

timer_agent.bf

timer_agent.bf(seed, freq)

timer_agent.bf(seed,)

Brain Variable

Brain variable is the same as the HP and MP, except you can define it dynamically with arbitrary name of it. Such

as, you can define a variable called “morale” just use the output channel. After defining it, its value is 0 initially

and it can be changed by output channel values.

Page 197: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

197 © 2011-2013 Basefount

Channels

bv:<var name> (the XXX is the name of the variable) for example bv:morale

In value mode (default)

The value of morale will be: decision node active * output value

The brain variable define

In the brain viewer, the morale is 4.46 = 0.89 * 5

In change rate mode (need specify in default decision)

Firstly we need specify the channel to the “change rate” mode. And specify the change speed in “default else”,

that 0 means “not change” when there is no triggered.

Setup change rate for variable morale

Then we just need specify the change value in the output channel

Page 198: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

198 © 2011-2013 Basefount

The morale will Increase 5 each frame

The input channel bv:XXX will get the variable value of it

Return the value of morale

Agent Variable

Agent variable is a static variable can be assigned to the agent at the beginning of the simulation. And when it

was assigned, it cannot be changed by regular logic channel.

The agent variable can be used for a lot of noise seeds, and use it randomize the behavior of the agents, for

example, different variable values can determine different decisions, some of them choose playback action A,

and some of them choose perform action B or C.

Assign Agent Variable to agent

For assigning the agent variable to the agents, there are 2 methods, by agent types or by variable host.

Assign Agent Variable by Agent Type

We can use Miarmy > Knowledge Perception > Variables > Agent Variable Manager… and then select the Agent

Group node you want to operate, and then add or edit the agent variables. Like the following picture, we add

“aaa” and “bbb” variables to the Agent Type “loco” by Agent Variable Manager

Page 199: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

199 © 2011-2013 Basefount

Add 2 variables to the agent type “loco”

After assigning, at the beginning of simulation, based on the example above, the agents which type is “loco” will

contain 2 variables in their memory, the names are “aaa” and “bbb” and the value of “aaa” is a random number

between 0 and 10 and the value of “bbb” is random number between -5 and 5.

Assign Agent Variable by Variable Host

We can add some variable onto the variable host. And then, with that host node:

We can assign the agent variable to a lot of different type of agents altogether

Also we can assign the variable by place node no matter what type of them

Agent Variable Host

For creating an agent variable host, we just need use Miarmy > Knowledge Perception > Variables > Create

Agent Variable Host, and then we also use Agent Variable manager to add/edit the variable on the host node.

Page 200: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

200 © 2011-2013 Basefount

Create host node and add 2 variables onto it

For assigning the variable to the agent, we need link it to agent group node or place node. We need the too

called Variable Connection Editor which at Miarmy > Knowledge Perception > Variables > Agent Variable Host

Linker.

As the below image shown, the left if the variable host we need select and then edit this link in the Variable Host

Linker. The right-hand side window is the Connection Editor. There are 2 tables, the right one contains the agent

types and the place nodes inside your scene, and we can select them and click the “<<< Add Link(s)” to the left

side. The left side shows the place node or agent type node which already connected to the Host node.

Connect host node to agent group or place node

After setting up, based on the above example, when simulation begin the agent type “snake” and also all the

agents from “McdPlace0Shape” will contain the variables “ccc” and “ddd” and the values are “ccc” between 0

and 10, and “ddd” between -12 and 12.

Variable Proxy

Variable proxy node can change agent variable when simulate, and proxy the variables’ value for

Some specific agent type

Agents from specific place node

Page 201: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

201 © 2011-2013 Basefount

Agents ID in some specific range

Please notice that the regular output channel CANNOT change the agent variables.

Variable Proxy Node

The first thing is create a variable proxy node, this node contains 3 contents

The proxy variable names & values

The agent type need to proxy

Which place node’s agents need to proxy

With the proxy node and its information, our variable proxy can work.

For creating this type of node, we need click Miarmy > Knowledge Perception > Variables > Create Variable

Proxy Node After creating we need link it to specific target and then add / edit the proxy variables name and

values.

Add and edit variable on proxy node

The variable operation need be done in the Variable Connection Editor, it located at Miarmy > Perception

Knowledge > Variables > Variable Proxy Linker

We firstly need add the variable name at the left column, in below sample. We added an “aaa” variable, just by

click the Add button and specify a name. Also you can delete the “aaa” variable by select it and click “delete”

And then we need link this proxy node to “McdPlace1Shape” node and the Agent type “snake”. For doing this,

we just need select the contents in the right column and click the “<<< Add Link(s)” button, then the linked

actual contents are in the middle column.

Page 202: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

202 © 2011-2013 Basefount

(Left) variable names, (middle) link to target, (right) agent type or place node name

After setting those up, the agents which type is “snake” or the agents which placed from “McdPlace1Shape”,

these agents’ variable “aaa” will be proxy, and the value can be setup in the channel box

The variable aaa’s proxy value is 8

Proxy Variable by Agent ID

Also you can specify an agent ID range for this proxy node, that is means you can proxy the agent variable

without the link and just use the ID of agents. Use this Miarmy > Knowledge Perception > Variables > Variable

Proxy Manager

Page 203: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

203 © 2011-2013 Basefount

Agent proxy by global ID and Place ID

We still need add a variable name in the Variable proxy linker and edit its value in the channel box before we use

this tool.

Then we just need specify the agent ID range and the place ID.

Select the place node and open “show digit”, can make the placement node show each one digital number on it

Show digit on the place node

Also, select any one of the agent, you may notice that there are 2 IDs been displayed under the agent, the agent

ID current place and the agent ID in global space. This information can help you decide what number should be

specified in the Variable Proxy Manger.

Page 204: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

204 © 2011-2013 Basefount

Id in place node and in global

In the below image, we specified 2 rules there:

1. The agents which global agent ID from 11 to 12 (include proxy) will be proxy.

2. The agents which from place node 1 and the ID in place is from 5 to 6(include 6) will be proxy

Agent proxy by global ID and Place ID

Channels

av:<agent variable name>

input channel return the value of variable which name is <agent variable name>. such as av:aaa

Agent Bone & terrain Channels

Agent bones can interactive terrain now by bone channel:

Page 205: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

205 © 2011-2013 Basefount

joint1:ground

footL:ground

The return result will be the same as the regular terrain.

If the bone is higher than terrain, it will return positive value

If the bone is lower than the terrain, it will return negative value

This is useful when the joint is controlled by IK system, because sometimes we need put our feed on the ground

if the feet beneath the terrain.

And if there is no terrain detected in vertical space, it will use the default 0 plane.

IK Offset Channels

IK is the data in action node can modify the result of animation when assigning data from action node to agent.

Currently, we support only IK offset channels from the bone name, such as:

footL.ik:yOffset

For more details about IK, please the IK session in Animation Part

MEL/Python source in Logic Channels

We can fill a mel/python command in input or output of Miarmy Channel, this can make your Maya scene

interactive with your agents or your agents trigger Maya do something! This can expanding our works to

another level

The format will be:

maya.mel:<mel command or mel proc name>

maya.python:<python command or python function>

We highly recommend you just use a predefined procedure or functions

For example:

maya.mel:getAttr pSphere1.ty;

maya.mel:onemelproc;

maya.python:onepycommand()

Page 206: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

206 © 2011-2013 Basefount

A MEL command in input (complete command)

Note: the return value of this command should be ONE float value, or otherwise, it will not work properly.

This also can be output, for example something happened we execute a mel/python command.

Python command in output (predefined function)

Simulation Space

World Transformation for physical simulation

If our agent enable dynamics, no matter where the agents and how the structure like, the agent will enable

ragdoll in world transformation space. Including the kinematic primitives, terrains, all of them will join the world

space calculation.

Local Transformation for non-physical simulation

Except physical simulation, in most case and more interesting, we are dealing with the agent which driven by

logic and decisions.

As our design, all of the Miarmy agents (not enable dynamics) and perception contents are calculated in local

transformation. Our engine will fetch the data such as the rotate of agent, the position of spot, all from their

local transformation.

So you can easily parent you agents to different transform nodes such as locator nodes make engine calculate

them separately. With this feature, you can easily simulate different groups of agent on different moving objects

like some battleships.

Page 207: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

207 © 2011-2013 Basefount

Simulation in different transformation space

But only using the simple transform node is not enough at all, because the agents in a transform node can feel

the agents in others transform node. This may cause the calculation error. Take a look at the following example,

we were going to make them moving in different space and not affect each other. However, their local positions

are the same. When the engine calculating, the agent A can feel agent B and try to avoid it, also the agent B will

avoid agent A.

Same local positions in different transform nodes

For entirely avoiding agents in one space feel the agents in another space, you can group them to Solver Space

Node.

Solver Space Node

Technically, the solver space node is the same as locator (without shape node), also a kind of transform node.

But our engine can recognize it and calculate the agents and contents inside of it independently.

Page 208: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

208 © 2011-2013 Basefount

For creating solver space node, you just need simply click Miarmy > Knowledge Perceptions > Create Solver

Space.

(Left:) the solver space node, (right:) solver space attribute flag

Once you putting the agents and perception contents inside of solver space node, they will work independently

in local transform space. The agents in a solver space node will not feel the agents or perception contents in the

others solver space nodes.

If you want to parent you agents to a solver space, please parent the place node to the solver space or using

inverse place for recording parent’s name.

The solver space hierarchy

The contents in solver space can be parented to any other nodes inside of this solver space node, just make sure

the root of them is this solver space. Shown as the following picture, McdSpace1 is a solver space node, you can

put different perception contents in different groups in McdSpace1, some spots in “null1”, and some roads in

“null2”. Our engine can recursively find out the solver space node.

Arbitrary hierarchy under Solver Space node

Join World Attribute

There is a special “joinWorld” attribute on each of solver space.

Once you enable this attribute, the engine will take the world transformations of agents in this solver space

node instead of normal local transformation. And the agents in this solver space can feel others agents and

perception contents in the others solver space nodes which “joinWorld” attribute been also enabled. Calculate

just like they are in world space, but they are actually also the child of each solver space node.

Page 209: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

209 © 2011-2013 Basefount

Output Behavior Channels

Transform Speed

tx: move some units per second in the x-axis of the agent object

tx: move some units per second in the y-axis of the agent object

tx: move some units per second in the z-axis of the agent object

tx: rotate some degrees per second by the x-axis of the agent object

tx: rotate some degrees per second by the y-axis of the agent object

tx: rotate some degrees per second by the z-axis of the agent object

Bone Offset

<boneName>:tx add offset units in translate X of the bone whose name is boneName

<boneName>:ty add offset units in translate Y of the bone whose name is boneName

<boneName>:tz add offset units in translate Z of the bone whose name is boneName

<boneName>:rx add offset degrees in rotate X of the bone whose name is boneName

<boneName>:ry add offset degrees in rotate Y of the bone whose name is boneName

<boneName>:rz add offset degrees in rotate Z of the bone whose name is boneName

Sound

The sound has two channels can be output, they are sound.f and sound.a.

By default the frequency and range of sound are the values from McdAgentGroup node. However, you can use

the sound output channels to modify them.

(Left :) the McdAgentGroup node; (right :) The default sound Frequency and range on node

Note: if the sound range is 0, means the sound range will take the value calculated from bounding box, see Part

4 Agent Infrastructure – Original Agent

The channel sound.f in output channel can modify the sound frequency of the agent, whereas the channel

sound.a in output channel can modify the sound range.

Page 210: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

210 © 2011-2013 Basefount

Vision

There is no vision channel for output directly, but there is a color channel can modify the result of vision

received.

(Left :) the McdAgentGroup node; (right :) setup the color for this type of agent

The channel color in output channel can modify the color of agent, and change the vision.h results.

If the color result is -1 in output, the agent cannot been seen by any other agents.

Aim Constrain

We provide a turn-key aiming feature for the bones of agent, which can drive your agent bone aim to target.

There are some subtle features of it.

Aim channels

Preparation for Bone Axis

Before generating the original agent, we need setup our rig. If we want to one of the bone aim to target, we

need firstly make sure the aiming axis and up vector. In the following pictures show, before generating original

agent, please make sure the X (or Z) axis is the aim axis and the Y axis is the up vector. (Note: the other orient

scheme is not support for current version of Miarmy)

Page 211: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

211 © 2011-2013 Basefount

The X (or Z) should be aim axis and the Y should be up vector

Aim Channel Features

Aim Channels

The channel conventions of aiming:

<Bone Name>:aim<axis><space>-><Target object>

<Bone Name>:aim<axis><space>(<percentage>)-><Target object>

The <Bone Name> should be the segment bone name from agent memory. You can check the real name

in agent memory by Miarmy > Agent Viewer

The <axis> should be the axis of bone which you want to it aim to target

The up vector should be always Y axis (for this current version of plugin)

The <Target Object> name should be the unique name in Maya Scene. The dag nodes with the same

name in different hierarchy many cause problems.

For example:

eyeL:aimX3d->pSphere1

head:aimZ2d->pSphere1

Once the channel is activated, the bone which you specified will turn and aim to the target with a rotation speed

gradually. This speed is determined by channel result which range is 0 to 1.

Note: the aim turning process is interpolated by Quaternion, so there is no Gimbal Lock.

Gradual Aim

Once the bone wants to aim to target, it will aim to target gradually rather than pointing to target directly. Like

the following picture, from default pose, the bone point to the target object gradually, and the speed is

depending on the output value. 0 make the bone still, 1 make the bone instant point, the value between 0 and 1

(such as 0.4) make the bone point to target 40% each frame.

Page 212: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

212 © 2011-2013 Basefount

Gradually aim to target from default to aim pose

Percentage Aim

We can specify percentage in aim channel to make the bone aim to right direction but not fully aim to target.

For example, we can specify a 60% aim channel like this, eyeL:aimX3d(60)->pSphere1, you may notice the bone

will approach to the 100% aim pose but not fully aim to target. Finally, it will stand the pose which performs 60%

aim direction between the default pose and 100% aim pose.

60% aiming make non-full aim result

Self-restitution

Once the sentence is not true (the default output value of each aim channel is -0.2) or the channel result is

negative, the bone will restitute to the default pose gradually and automatically.

Page 213: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

213 © 2011-2013 Basefount

Returns back to default pose automatically

Aim Space

Aim space is simple. In some case, we just want to the bone aim to target in horizontal space, such as our “neck”.

Our head can rotate to any directions but our neck can only rotate in some degree in Y axis:

Use 3d for the head whereas 2d for the neck

Hierarchical Aim Mechanism

This process is entire automatically, and here we just explained what is happen under the hood.

When you have multiple bones in the same hierarchy want to aim to the same (or different) target, the order of

aim bone may cause problem. Imagine that your hand and arm want to point to the some targets. If your hand

Page 214: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

214 © 2011-2013 Basefount

point to the target firstly, and then you rotate your arm secondly, after your arm aligning to its target, maybe

the previously done hand will not point to right direction.

With Miarmy hierarchical aim mechanism, we firstly collect all aim tasks and then execute them hierarchically.

For example in the arm tree, it’s definitely arm will aim to target before the hand performing aim.

Multi Targets Choose

Rather than Maya traditional aim constrain, we can make the agent bone to aim arbitrary number of targets,

just using simple sentence active:

Let’s take a look at the following example directly.

We want to our agents aim to right sphere when they are in blue bound whereas aim to left sphere when they

are in red bound. Just using the bound channels and the indexing technique, we can easily achieve that.

head:aimZ2d->pSphere2 (active in red bounding box)

head:aimZ2d->pSphere1 (active in blue bounding box)

2 different targets can be triggered aim by different conditions

The bone will always aim to the target which makes the output the most activated.

Page 215: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

215 © 2011-2013 Basefount

Arbitrary Aim Axis and Up Vector

Aim channel now extend to arbitrary axis and up vector,

The old version before 1.5, we only support Y for default up vector and the aim axis should be X or Z:

Aiming: X, upvector Y (default)

Aiming: Z, upveotr Y (default)

The previous version no need specify up vector. The up vector is default and must be Y axis.

<Bone Name>:aim<axis><space>-><Target object>

<Bone Name>:aim<axis><space>(<percentage>)-><Target object>

The new version we add the up vector and for arbitrary aiming axis:

The new ones:

<Bone Name>:aim<axis><space>-><Target object>

<Bone Name>:aim<axis><space>(<percentage>)-><Target object>

<Bone Name>:aim<axis><upVector><space>-><Target object>

<Bone Name>:aim<axis><upVector><space>(<percentage>)-><Target object>

For example the following picture, we need specif the z axis aimming axis and the x up vector, so we need fill the

channel head:aimZX->pSphere1 or head:aimZX(60)->pSphere1

Z: aim, X: up vector (not work in previous version before 1.5)

Page 216: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

216 © 2011-2013 Basefount

Of causer, if you use the default one without up vector, it still work but use Y for default up vector, it will not

change the previously setup.

aimX (x for aimming, Y for up vector)

aimZ (z for aiming and Y for up vector)

Particle Follow

If we want to our agents follow particles, firstly we have to know what the particle targets are. Each agent has

one particle target, so that he can follow the correct target.

When the particle node link to place node, then when placement, our system will assign an ID to each agent

sequentially inside the agent, so that each agent will have a particle target in its brain memory.

There are 2 methods we can link the particle to the place node

1. When generate the place node from particle, our system will prompt and ask whether we need to

connect

2. We can directly connect the particle node to the place node by Miarmy > Placement > Attach Particles

(Need firstly select the placement node and then the particle node)

The connect result

The particle connect against with the place node

Dynamic assign the particle target

Sometimes we want our agents follow a particle emitter. Because there is no particles been emit in particle

node, each agent doesn’t have the particle target at the very beginning. The target particle will be dynamically

assigned to the agent when start emitting. We have to place many agents firstly and at when the particle

generated the existed agent can follow it and track it.

The only thing we need to do is also connect the particle node to the place node. Using this Miarmy >

Placement > Attach Particles

Page 217: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

217 © 2011-2013 Basefount

And then with some channel activated, our agents can follow the particles when the particles were generated.

Like the following picture

Agents follow particles

Channels:

follow_p_t

Follow particles translate (location). The value can be 0-1 and our agent can follow the particle location

smoothly (value is 0-1) or directly (value is 1). Please see the below images. In the first image, the agent match

the particle immediately (in a frame), and the second image match the particle location 50% each time and after

10 frames (0.5 second), it will match perfectly.

Follow particle location directly (output value is 1)

Page 218: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

218 © 2011-2013 Basefount

Follow particle location directly (output value is 0.5)

follow_p_r

Follow particle moving direction/orientation. Our system will compare the locations between the agent position

and the particle position and get the difference vector and make our agent follow the vector’s direction, like the

following first picture, if the particle is at blue dot, and the agent is arrow, the difference vector is the blue

vector pointing to the dot. At this time our agent’s orientation will be turned to the direction same as the vector.

And the second picture is similar, only the agent approach the target vector 50% each frame smoothly.

Follow particle target move direction (output is 1)

Follow particle target move direction (output is 0.5)

follow_p_t(2D)

Almost the same as “follow_p_t” but ignore the horizontal translate values

follow_p_r(2D)

Almost the same as “follow_p_r” but ignore the horizontal translate values

Page 219: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

219 © 2011-2013 Basefount

UV Pin

Sometimes we want to simulate a group of bugs crawling on the arm/hand, and the arm/hand are still

deforming. At this time, we can use the UV Pin Tool. We can pin the agents onto the deforming object, and

these agents can still performing their logic behavior and movement, all of their locomotion will be calculated in

the UV space.

UV Pin

Under the hood

Before we execute the UV Pin, the agents may not on the surface of deforming object, like the following picture

shown (blue dot stand for agents, and the red curve stand for a piece of mesh surface). So our system firstly will

find out the shortest distance from agent to the surface, and calculate out the closest point on the surface.

Please notice the surface MUST be polygon mesh, and CANNOT be NURBS or Subdivision Mesh.

In the below image, if we execute the UV Pin, our system will firstly find out the closest points the yellow dots

on the surface, and then pin our agents onto it.

Page 220: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

220 © 2011-2013 Basefount

Find the closest point on the surface and pin to it

In the below image, when our agents were pinning onto the surface, at that moment, we’ll store the UV

coordinate into the memory of each agent, and then always pin them on the surface, so the UV map MUST be

very good!

Pin to the surface

After pinning on the surface, our agent will always onto it even there are movement, the agent will move in

world space and automatically update the UV coordinate and then still perfect pin onto it, each frame in the

McdBrainPost, we will deal with those pin behavior.

Additionally, all the logic perceptions and some output behaviors are still working, such as sound logic, bound

logic and spot, also the action can playback well.

Agents moving on the surface, au

Channels and usage

uvpin:<shape node name>

For pin our agents on the surface of mesh is extremely simple, we just need one output channel. Such as when

our node active, the output “uvpin:pSphereShape2” can pin our agents onto the mesh which name is

“pSphereShape2”

Page 221: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

221 © 2011-2013 Basefount

Scale Entire agent

We can dynamically scale up/down our agent by scale output channel, and also the stride of action will be

automatically changed.

Agents scale up or down

agentScale

This channel can scale our agent up/down by frame

Positive value will scale the agent up (such as 1.2)

Negative value will scale the agent down (such as -0.9)

Automatically change sound range and action stride.

If the agent been scale up or down, the sound range will be changed for adapting the current agent, that is

means it still can work with sound logic and auto avoid (see Chapter 10, auto avoid). Like the following picture,

there are 2 agents selected and the bigger agent has bigger sound range obviously.

Also the action stride will be automatically changed. For example, each walk cycle of bigger agent will move

more far than smaller agent.

Page 222: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

222 © 2011-2013 Basefount

Scale changed the sound range and action stride

How to cache the agent with scale changing

If we want to cache the agent with scale, we have to enable the cache scale option in Miarmy Tool GUI and then

cache and enable cache,

Enable cache scale before creating agent cache

Action

We will talk action related channels in details in Part 6 Action

Ragdoll

We will talk this in details later, see Part 7 Physical Simulation

Traffic System

What is Traffic System?

Miarmy Traffic system tools provide the tool can automatically setup many complex logic and perception stuffs

in the crossroad. With traffic tools, we can build many crossroads and link them together by roads and form an

interesting system.

Page 223: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

223 © 2011-2013 Basefount

Traffic system, crossroads & roads

Features of Traffic crossroad

In this version, our traffic system can only control the cars. We made a crossroad node to provide enough

information to control the car characters.

A crossroad node

Sockets Type

You can choose either 3 or 4 sockets for each crossroad. With the socket type attribute T-Cross or X-Cross.

Socket type attributes

Page 224: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

224 © 2011-2013 Basefount

Left T-Cross and right X-Cross

Socket Angles

Each socket can be set for different angle for many non-standard crossroads. By each socket independent

attribute.

Socket attributes

The right side crossroad has 2 non-0 angles

Entry and Exit

The ports with color are the entries whereas the blank with a white short-line is the exit

Page 225: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

225 © 2011-2013 Basefount

The colorful is 3 entries into the crossroad, where as the

Traffic Lights:

The port with green color is stand for this port is green light and let car to pass. Whereas the port with red color

cannot let car to pass

Different light have different pass

That traffic light can be controlled by the attributes:

Traffic light control attributes

Light Change Frame: each a span of time, the light change

Light Change Offset: offset the start time counter

Road width

The entry and exit can set different width for fitting the different road and scene setup. It controlled by the road

width attribute:

Road width attributes

Page 226: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

226 © 2011-2013 Basefount

Left wider and right more narrow

Left or Right Convention

For different county, people have different traffic convention, so we make the crossroad left right switchable. It

controlled by the attribute,

Right Free

The left entry and right entry of the crossroad

Car Stop & Walk Area

The different area can make the different

The area between red and blue circle: car will stop in this area if meet red light and also inside this area

Page 227: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

227 © 2011-2013 Basefount

The area between yellow and red circle: people will walk in this area for cross the road (not available in

this version)

The 2 important areas

Traffic Quadrants & Lights

Each crossroad has 4 quadrants. And each opposite two quadrants are a pair, each pair are perform the same

red/green light change.

4 quadrants in crossroad

Crossroad Under the hood

When simulation, we’re storing many paths and areas information into the crossroad memory.

Page 228: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

228 © 2011-2013 Basefount

If one agent contains the “traffic” fuzzy logic channels, we will firstly test the agent inside or outside the

crossroad range. If inside, we’ll give the agent some proper information of the crossroad, like the path, entry id,

etc. The information will be stored into agent’s brain.

And the traffic channels will return the correct values based on the crossroad information in agent brain.

Once the agent outside the crossroad, the information of crossroad in agent brain will be cleared, then, these

traffic channels will be disabled automatically and no any return (false).

Next session we’ll talk about the traffic channels.

Traffic Channels and Usages

Priority

Future of Traffic System

In the future, we’ll expanding the traffic system to people control and flyover control

Watch Logic Results

Brain Viewer

Using brain viewer, you can check the agent logic status and easy for debugging your agent brain.

Brain viewer GUI

Page 229: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

229 © 2011-2013 Basefount

Please check out the features demonstration picture below, from brain viewer, you can easily watch the brain

logic structure and sentence active status, and their priorities and defuzz behavior results.

Features details in brain viewer

Channel Result Feedback

Since version 2.0, we added the input result of each channel. Please notice the green texts in the following

picture, it means the value of the input channel before defuzz.

Such as the HP value in the below picture, it means the HP channel’s return value, no matter it active or not, it

just a returned value. It’s easy for user to understand the watch the value of the channel and decide which fuzzy

range should put in decision node.

Please notice that some channels (like sound.x) maybe return “NULL” and also some of them will return “Array”

results, due to that 0 or multiple agent in range. In these cases:

NULL: the green value will be “0.00”

Array: only display the first value

Page 230: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

230 © 2011-2013 Basefount

The green value stand for channel results

Feedback in Essential

Feedback mechanism is an important feature of Miarmy Engine, when simulation, the engine can always

feedback the logic and action status from “marked” agent. For marking the agent, you need just simply select

any one of agents. The latest selected agent will be marked automatically. Our engine will do an extra time of

calculation for this agent and feedback the result to Brain Viewer and Transition Map.

For blocking the feedback, you need disable feedback feature of Engine in Miarmy >Miarmy Global. Once disable

the feedback feature, the simulation will speed up about 20%. So we highly recommend you disable this after

debugging agents and populating huge number of agents.

Page 231: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

231 © 2011-2013 Basefount

Block the feedback from agent

Simulation Extra Tools

Feet Map Generator

We can generate feet map based on some specific bones when they walking on the default plane or terrain.

Preparations

There must be some preparation have to been done before generating the foot map,

For holding the area of foot map, we have to build a polygon plane and naming it to “McdFootMapBase”, and

this map should wrapping all the agents inside, of course this mesh can be scale.

Notice, this mesh should be poly plane and the width and height MUST be 1.

Must be poly plane and width/height 1

The McdFootMapBase Mesh

And also we need put a mesh to the FootMap_<agent name> to the Miarmy contents, if not existed this folder,

please click Miarmy > Miarmy Contents Check

This mesh should be also the polygon plane and height/width MUST be 1

And of course this map can be scale freely

Then assign a Targa(.tga) file to this mesh,

Page 232: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

232 © 2011-2013 Basefount

The texture can be any texture type, but the foot from should be pointing to “down”, because when we make

the map down side, the default UV will make this towards Z direction

Foot map should point down, make default UV point to Z+

Assign a .tga map to the map mesh (must be tga)

After assigning the map, scale it to proper size, same as foot just cool!

Setup foot map and put to FootMap_<agent name>

Page 233: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

233 © 2011-2013 Basefount

Turn on foot man generation flag on the original agent

Foot Map Generation

Then we can generate the foot map, but before that, let’s take look at some attributes need be setup, Miarmy >

Miarmy Tools

Foot map attribute

Foot map folder: Where the foot maps put in

Foot map Name: what name is the foot map

Foot map resolution: X/Y pixel unit of the foot map

Foot map lifespan(frame unit): how much we need inherit previous frame (we will talk about this later)

Foot map height threshold: when the foot less than this value it will generate foot (distance to terrain or

default plane ground)

If the threshold set to 2 and the height greater than 2, it will not generate foot print

The red part greater than 2, will not generate foot print

Page 234: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

234 © 2011-2013 Basefount

Let’s talk about the foot print lifetime. When we generate the footMap(N), we will based on the lifespan and use

the footMap(N-1)’s data to fade some foot map. That is means, once we setup the the lifespan greater than 1, it

will take the previous frame to generate current frame, it will fade out instead of disappear immediately.

If you fill 1: 50% will read from previous frame

If you fill 2: 67% will read from previous frame

If you fill 3: 75% will read from previous frame

If you fill 1000: foot prints from previously map will not disappear at all

Life span result

Use this map generate particle or others effects

Page 235: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

235 © 2011-2013 Basefount

Visualization

Visualize HP, MP Data

When you select any one of agent, you may notice there are HP/MP digital values on the head of agent. They

are HP/MP data. You can use it for visualizing the information of the internal HP/MP data. Like the picture below.

HP/MP data on the head

If you have some logic want to control the HP/MP data, for example, when agent fighting, the HP drop some

points each second, these data can indicate you very clearly how many HPs or MPs remain. And this can improve

your productivity.

You can turn this off at Miarmy > Visualization > HP/MP Bar Switch or

Page 236: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

236 © 2011-2013 Basefount

Some HP dropping when firing

Visualize Action Transition

There are 2 modes for displaying transition status

1. Normal playback: there will be only one bar on the ground

2. Transition in process: there will be 2 bars on the ground

(Left) currently playback (right) in transition

Turn of this at Miarmy > Visualization > Action Info Switch

Visualize Agent ID

There is a little green digit show the unique id of this agent

Page 237: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

237 © 2011-2013 Basefount

The agent ID in yellow circle

Bounding box display Mode and Inverse Placement

Agents can be display as bounding box and this can speed up the graphic card interactive speed, We’re not

means the bounding box from Maya, it is the Miarmy Bounding box display mode,

boundMode attribute on each agent

On each agent, there is an attribute “boundMode”, when turn this on, the agent will become the bounding box

display mode:

(Left) agent display (right) bounding box display

This attribute is support inverse placement. Once you inverse place, all the information will store back to

placement node and it will place out the agents with bounding box mode after next time open your scene.

Page 238: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

238 © 2011-2013 Basefount

Part 6 Action In this part, we will detailed explained how Miarmy Animation and Action system working and under the hood.

Action Infrastructure

Action Node Data

The action node contains

Action length (integer)

The length of this action

Action Data (2D array)

The pose data of each frame, using this data array and a frame number, we can set the agent pose. Note:

the root data in this action data array would be modified after generating of agent transform data.

Original Root Bone Animation Data (array)

Extract the root bone pose data of each frame from Action Data before generating agent transform data

Agent Transform Data (array)

Calculated agent locomotion data for each frame from Original Root Bone Animation Data

In this version of Miarmy, the data of actions are stored according to the bone hierarchy. So, the actions drive

agents by bone hierarchy. The bone structure of rig and original agent should be the same all the time for the

same type of agent. The actions are generated from rig, and these actions can be shared to use among the

different types of agents if the hierarchy of them are the same.

Note: in the next version of Miarmy, action drive agent support “hierarchy + bone

name” combination method and coming in April. At that time, the action drive agent not

only depending on the hierarchy, you can add some extra bones to the Original Agent

and reuse the existed action node

Page 239: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

239 © 2011-2013 Basefount

Action Node Attributes for Playback and Transition

There are many attributes in each action we can setup them in action editor

Action Editor

Rate

The speed of playback for this action

Is Final

If enable, once agent transit to this action, it will never transit to others in any situation. Like the “dead” action.

Is Cycle

If enable, means we dealing with this action a cycle action can be transit to itself.

Cycle Filter

Only work with cyclic action, blending the end self-transition part to the head part of the action by some percent.

As picture above, after playing back green area, the action will perform self-cycle.

Entry Range

When previous action transit to current action, some percent should be smooth blended. This is the entry range

of this current action. Like the picture below, when the previous action transiting to current action, 10% of

action length should be blended from previous end to current start.

When transiting in, blend with previous action

Page 240: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

240 © 2011-2013 Basefount

Exit range

When current action should transit to next action, only when the current action playback after exit range

percent, the current action can transit to next action, otherwise, maintains the self-playback

Only after 80% playing back, the current action can transit to other actions

Agent Transform Data

Agent Transform Data is generated from you “rig root”, and stored independently in action node. It's a kind of

locomotion data can be applied to overall agent

As we all know, we create action from animation, it is a piece of motion in a range. For example a character is

walking in scene and we build action data 24 frames.

In the below picture, it’s a walk cycle, no special:

A walk cycle from A to B, for example 24 frames

The normal animation will be from A to B and get back to A, once again, from A to B, repeatedly.

We want to apply it to the agents and make the agent move forward in any direction and not in one place. We

want to make the agent travel in scene.

Transform “the walk cycle A to B” to “agent locomotion data”

Page 241: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

241 © 2011-2013 Basefount

The red line is repeatedly playback animation

The yellow line is the action with agent transform data. The movement of yellow paths shown is our purpose.

With agent transform data, we can apply the accumulate locomotion to the agent, and our agent can work

independently in our scene

For this purpose, we need separated the animation in 2 parts:

Action data: the animation pose data of each frame

Agent transform data: the root node velocity data can be used to apply to single agent transform.

Usage:

1. The action data part is responsible to pose you agent only.

2. The agent transform data part is responsible to move your agent for each frame.

The agent transform data actually is an array of velocity value for each frame. So, no matter where the agent is

and what direction the agent orient to, we just apply a velocity to it each frame. The result is, the agents can

travel in scene anywhere respectively, and not repeat playback.

Agent transform data can be several types:

The “A” picture above shows the “locomotion” type, and “B” shows the “turning” type.

Static: agent stands without transform change (e.g. stand, sit, cheer)

Locomotion: agent walks in z direction straight (e.g. walk, stand to walk, jog, run)

Turning: agent turning to left or right (turn left, turn right)

Ramp: agent go up or go down (go upstairs, climbing)

Miarmy will automatically generate agent transform data for you when you create action.

Also we provide tools are able to re-build it or fix it

Click auto fill, you can build agent transform data as preset:

Page 242: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

242 © 2011-2013 Basefount

Fix Agent Transform is used for shifting or rotating your agent transform data:

For example1:

The standard agent orientation is “+Z”, but if your animation rig is walking in x direction. After creating action,

you can rotate it back to +Z.

Just fill 90 in action editor, and click “Fix Agent Transform”

Fix the agent transform data

For example2 (sample 29 scene file)

The root of agent moved

Page 243: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

243 © 2011-2013 Basefount

Please notice the above animation, from stand to sit, character’s root (hip) has been moved, from A to B.

However, this action is a static action. When this action transition to sit action, there will be a weird behavior:

The red spot is the “origin”. The left action is “stant_to_sit” and right is “sit” action.

You may notice the

1. In “stand_to_sit” action: the Origin is in the character’s feet.

2. In “sit” action: the origin is in character’s root (hip)

If the agent transit from “stand_to_sit” to “sit”, the action will “shift” forward, because the 2 action have

different origin places. At this time the only thing we need to is move the sit origin to his front, like the picture

below:

Fix the agent transform data

The result will move the action entirely forward. The play back transition will now without “shift” and seamless.

Summary: Although the agent transform data is crucial, this data can be actually automatically generated. So, in

most of time, you no need to care about that, just choose the right type. Everything will be fine.

Page 244: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

244 © 2011-2013 Basefount

Scale Bone in Action

We can make an action contain the bone scale animation and make it can play as stretch and squash agents.

Such as some aliens with tentacles and stretch.

If you confirm your project need the bone scale animation, the only thing you need to do is enable the “Enable

Joint Scale” in the Miarmy Global, and make sure this option ALWAYS enabled.

Enable joint scale in Miarmy Global

We highly recommend you enable this option by our “Miarmy Configuration File”, you can check that out in

Chapter 10 Miarmy Configuration File

Our system will check this option at these moments, so we suggestion always enable this.

1. When creating the action

2. When simulation

3. When make agent cache

Bone scale up

Action Features

Action Trigger

Trigger Action by Name

Logic: if the agent in the zone area of which the id is 0, perform walk

Page 245: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

245 © 2011-2013 Basefount

Trigger action directly by name of action

Action Group Trigger

Action Group Random

Logic: if the agent in the zone area of which the id is 1, perform one of “cheer” actions group

Trigger action by action group name

From action group, system can select one of the actions from the group. And make that selected action trigger

action. The rule of select is randomization.

Randomize select one action from action group

Action Group Channels

After Miarmy 1.5 we provide some new easy to use channels for action group, user can easily use them

randomize your agent behavior

Page 246: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

246 © 2011-2013 Basefount

actionGroup:XXX (for input)

Test is current agent playing action from action group XXX

actionGroupSelect:XXX

Select one of action from action group and continue playback keep no change, such as some of people

run different types but will not change over and over again, some people select runFast, some people

choose runSlow and other choose runNormal. Please distinguish this with actionGroup:XXX

actionGroupRate:XXX

Set playback rate of all actions from XXX action group

*:rate

Change the current playing back action rate

Choice Rate

Action Group Playback Rate

See “Action Playback Rate” Channels

Action Blending

You can modify the playing back action by action blend and action rate which you specified in output channel.

Action to ActionBlending

If the current playback action has blend actions, the blended action will be performed automatically, based on

the defuzzed active result of blend channel. The default blend weight is 0.0. Please notice the following things.

Blend actions should be the same length as the main action. For example, the length of walkHappy and

walkSad should be the same length as the walk action

Blend actions can be different playback rate from main action. For example you can make walkHappy

faster and walkSad slower in action editor. Our action blending engine can blend the rate of them.

Action blend can be more than 1. That is means you can blend walkHappy, walk, walkSad together.

The closer the the spot, the more walkHappy action will blend

Page 247: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

247 © 2011-2013 Basefount

Modify the action by blends

Action Blending Group

Action Partial Blending

Action Playback Rate

Action Rate

Also you can modify the speed of the playing back action by action rate channel, also based on the defuzzed

active result of rate channel. The default rate is the rate in action editor.

Modify the action by rate

You can increase the rate when the agent is walking down fast and decrease the rate when the agent is climbing.

Action Group Rate

Whole Action Rate

*:rate

Page 248: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

248 © 2011-2013 Basefount

Action Channel for Input

Action Playback Check

Action Group Playback Check

Randomize Entry Points

When our agents step in to an action, it will start from first frame, this may cause a bit cloning/twinning or

boring result sometimes. So after version 1.5, we make our agents can step into action from randomized entry

points. We make this very easy to control but the result is pretty much natural. It’s useful when our agent

transition to some rest pose, like “standTalk”, agents can start talk freely instead of all firstly frame.

For example:

Entry points randomization

The following agents entered the “walk” action at the same time but different entry points, make this more

natural.

Result of randomize entry points

Page 249: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

249 © 2011-2013 Basefount

Subjective Objective Action Synchronization

What is SOAS

Subjective Objective Action Synchronization (SOAS) is a technology that pairing and syncing agent action. When

the agents face to face fighting, subjective agent can tell what his doing to the objective agent and the objective

agent will take response precisely and simultaneously based on the subjective action.

SOAS doesn’t need any complex logic setup, and just 2 SOAS Channels are enough.

SOAS channel also have priority control, if another other higher priority action channels activated, the SOAS will

be disable automatically.

SOAS is usually used when 2 people fighting or such pairing behavior. For example, agent A & B, when Agent A is

attacking, the Agent B should defend, whereas the agent A is defending, the agent B should attack. And the

defending and attacking behavior must be synchronized.

2 agents are fighting perfectly

Under the Hood

The SOAS is action node level feature. That is means that no matter what the agent type is, the feature will work

OK. Such as that there are 3 types of agents, each one of them can be both the objective and subjective agent.

Also, the SOAS need the help from sound range. The action information can be only passed to others by the

sound range.

The first step is setup subjective and objective actions mapping relationship, we need specify the relationship for

engine know that before simulation.

Once we fill the “tell” channel into the decision of agents, these agents will tell what it’s playing back to the

other agents in their sound range.

Page 250: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

250 © 2011-2013 Basefount

Some other agent with “hear” channel can hear these information and get the objective action if subjective-

objective relationship established. Then when logic active, it will perform these objective actions, also will try to

synchronize that.

Setup Subjective and Objective Action

We need firstly setup the Subjective and Objective action in Action Synchronization Editor. In Miarmy > Actions >

Action Synchronization Editor

Setup action sync relationship

For example there are 2 types of agents, A & B. The type A is subjective agent, and type B is objective agent.

The agent type A has:

Attack1_action_A

Attack2_action_A

Defense1_action_A

Defense2_action_A

The agent type B has:

Attack1_action_B

Attack2_action_B

Defense1_action_B

Defense2_action_B

So the relationship of them should be:

Attack1_action_A >>>>> Defense1_action_B

Attack2_action_A >>>>> Defense2_action_B

Defense1_action_A >>>>> Attack1_action_B

Page 251: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

251 © 2011-2013 Basefount

Defense2_action_A >>>>> Attack2_action_B

Behind the scene, these actions subjective/objective relationship information are actually the action nodes

connections. The subjective action “.syncTo” attribute link to the “.syncs[<id>]” attribute of objective action.

Of course, one action can be objective action of multiple subjective actions. The “.syncs” attribute is an array

attribute.

SOAS Channels

tell:

This is an output channel and when active, it will tell the other agents what is its playing back action and which

frame

hear:

It’s actually an action channel, also output. It will make agent hear they others tell it. And find out the objective

action if heard one is subjective action. If active, it will try to play back that objective action, and try to

synchronize subjective action

tell:<id>

Sub channel “id” just simulates the frequency of “tell”, letting the agent can tell different type different

information. The function is similar like the “tell” channel. If you don’t specify this sub channel, it will be default -

1

hear:<id>

Same as “hear” channel, but it is only able to hear the agent using the same sub channel “id”.

SOAS Channels Priority

The SOAS channels also have priority. When an objective action is activated by SOAS Channel, but there is

another action activated by any other channels have higher priority. The agent will try to transit to the higher

priority one instead of SOAS controlled one.

Page 252: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

252 © 2011-2013 Basefount

For example, if two channels “hear” and “escape” are activated together, but the “escape” have higher priority.

The agent will try transit and perform “escape” action.

Future of SOAS

The SOAS of Miarmy is not perfect yet, if the agent is too dense, the tell channel will tell many different agent

with the same information, or some agents will hear many information from multiple agents. It only work

perfect with 1 VS 1 scenario, like the picture below.

1 VS 1 scenario

In the future, we’ll make the SOAS more precisely based on sound degree limited or closest one algorithm etc.

Hook up Custom Attributes

Except rotate and translate animation channels, sometimes we want to hook some extra animation to the bones

of agent and let them playback/animate with the action. For example, there is a blend shape animation

happening on a joint/action, we want to hook it to the agent and join the simulation, then after simulation, fetch

the result back for later user. (Such as creating deformer or facial animation)

Enable this Pipeline

By default this feature will be totally disabled, if you want to use it, please firstly enable a hidden attribute in

McdGlobal node of your scene.

Click Miarmy > Miarmy Ready! It will select the McdGlobal Node, and then please manually turn that attribute

on in Maya Attribute Editor.

Manually turn on the “hookCustomData” attribute on in McdGlobal Node

IMPORTANT: Before both 1 creating action and 2 creating original agent, please always enable this attribute.

Page 253: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

253 © 2011-2013 Basefount

Creating Action

Some joints in the animation rig may contain some custom attributes, for example, like the below image, there

are many user defined attributes and animation on “joint1”

Maya custom attribute channels

Please make sure all the Action Nodes will be created from the SAME Rig with exact the SAME custom data

scheme.

Of course also make sure enable “hook custom data” attribute in McdGlobal Node.

At this time, when we creating the action, these attributes and values, including animations, will be

automatically stored inside action node.

Creating Original Agent

Before creating the Original Agent, you need enable “hook custom data” attribute in McdGlobal Node. And after

creating the Original Agent, these custom attributes will be hooked up on Original Agent.

But If you already have original agent and don’t want to re-create original agents, you need firstly active the

editing agent type in Agent Manager, then click Miarmy > Original Agent > Upgrade for upgrading/adding these

custom attributes.

You may notice that if everything all right, the “number of custom data” will be recorded in original agent bone.

And we will use this attribute to allocate memory when building agent. You can double check if these attribute

existed and have correct number

Page 254: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

254 © 2011-2013 Basefount

(Above) without custom data, (below) contain 3 custom data

The number of custom data will be stored. And when “original agent” building “agent”, the data will be used to

allocate exact memory in agent, for example, 3, it can allocate 3 float data in agent memory.

Notice: these data will only be linear interpolated between animations, no quaternion or other interpolated

methods.

Simulation

When simulating, these custom data in action node will be assigned to agent bone just like the “translate” and

“rotate” of the bone. Also transiting and blending normally.

When creating agent cache, these data will be also written into the Agent Cache, Character Cache etc…

After simulation, you can fetch these data to drive the deformer, or anything you like. For fetch these data,

please refer the “Single Character Cache Part” of this document (Press Ctrl + F to search).

Single Character Cache

Introducing a concept called single character cache.

Regular Miarmy Cache: 1 frame 1 file, each file contains data of all agents, use this drive all Agents each

frame

Page 255: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

255 © 2011-2013 Basefount

SC Cache (Single Character Cache): 1 character 1 file, each file contains all frames data for this character.

Use this drive Original Agent or Middle Rig

Note: character cache is not simply rewrite, but convert/transform all the agent data to Maya format

data, that can assign and drive to Maya joint directly. It will improving driving speed tremendously.

Changed: Previously before version 2.0, our system cannot store data for end joint, now we changed many code

for making our system can extend to end joint both in action creating, agent cache or driving etc.

Custom data pipeline is now totally changed in version 2.0, now it is much more stable and will not

causing crash when many aspects.

Main Usage:

This is the fastest way to fetch agent data and you can use this bake the middle rig and export FBX (if

you have your own tools).

We can bind muscle, fur, nCloth, or hair on original agent or middle rig, and simulate this rig several

turns, each one of them and export render data like geometry and creature FX contents like hair, fur,

ncloth, etc…

Make Single Character Cache

The single character Cache will be converted from Miarmy Agent Cache, so we should make agent Cache firstly.

Ensure the agent cache is able to playback OK and confirm the frame range you need, then open Miarmy >

Miarmy Tools, and hit “Convert Agent Cache to Character Bone Cache”, please wait these process need some

time and it will write new single cache like the right picture below, you may notice these cache is based on each

character, each one, contain all the Maya joint and custom attributes animation, use these can drive “original

agent” or “middle rig”

Notice: The agent cache path need writable. Because the converted out SC Cache will be put into the same

directory of agent cache

Page 256: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

256 © 2011-2013 Basefount

Convert Agent Cache into SC Cache

Then let us use these cache drive our character

Drive Original Agent

Need de-place agent, because this time, the agent can be disable,

Enable drive and specify the character ID

Left: original pose, right: driven by character cache

Page 257: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

257 © 2011-2013 Basefount

Driving original agent using cache id 15

Middle Rig

We call it rig because it’s nothing to do with the original agent and agent.

Original agent contains information used to generate agent but useless for baking and exporting FBX etc… also it

contains dynamic joints and shapes, it’s heavy. Otherwise middle rig only contains the bone chain and the

custom data on that, it’s much simpler and lighter. Also if we want to export FBX or something like this it will be

faster and correct.

Just click Build middle rig, our system will build a middle rig based on your original agent.

Note: cannot build in “referencing mode”

Differences between Original Agent and Middle Rig

The bones of Original Agent only contain number of attribute. Whereas the bones of Middle rig contain the

custom attribute entities and the animation.

Original agent contain only the number of custom data

Page 258: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

258 © 2011-2013 Basefount

Middle rig contain all the custom data

Skip Animation Calculation for Some Bones

Sometimes we don’t want to some useless joints calculate because they are not important for final result, such

as some fingers or toes, or some extra deformers on arm or legs.

Calculate the joint will spend time especially when transition, blend or self-cycle, because we need fetch data

from action node for each agent, and them using some algorithm to get the result, finally assign them to agent.

Hands and fingers are small but have many joints on them, need almost the same time as the body parts. In

most cases due to the shot, we don’t need to assigned actions to them, so we can block the animation on them.

For example, let’s disable the animation on arm of following agent:

Skip animation on shoulder and arm

Them when the animation is started:

Page 259: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

259 © 2011-2013 Basefount

(left) skip animation on arms (right) normal situation

Action Drive Agent

Pipeline

The process which we find next action

Recalling the previously part, from output results of logic calculation we can get some action outputs. And finally

we find the biggest activated one, we call this target action. Take a look at the above picture. Then, from the

target action, we will find out the next action by the action search method.

Once we solve out the next action, this is the action we need transit into. If the transition condition meets, the

agent will transit in to it.

Note: the next action might be the currently playing back action itself.

Getting the Target Action

As far as we know, after logic engine calculation, we can get a list of output results. It contains many repeated

channel outputs and output values. Then we need use the defuzz algorithm and the default decision node to get

the behavior result.

For example, after input channel engine calculation, we get some decision results from many decision nodes, as

the following first picture show.

Page 260: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

260 © 2011-2013 Basefount

The process of getting target action

Parsing out the Next Action

From the target action, we need solve out the Next Action firstly. There are several methods to solve out next

action

By Simple Transition

In Simple Transition Mode (Setup in Miarmy Global), if your current playing back action is “stand”, and the

target action solved out from logic engine is “walk”, the next action will be “walk” directly, because our engine

can skip the transition map and transit from current action to the target action simply and directly.

By Transition Map

If the simple transition mode has been disabled, means we are in transition map mode. Suppose the current

playing back action is “stand”, and the target action is “walk”, our system can automatically find the nearest

action in Transition Map if you setup them correctly. The search result action will be “standToWalk” in the

following example.

Page 261: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

261 © 2011-2013 Basefount

Transit from stand to walk with transition map

By Transition Map and Action Exits

There may be several actions in next action results, for example, take a look at the picture below. If our agent is

transiting from walk to stand, our system can find 2 next actions “walkToStandL” and “walkToStandR” from

transition map. By default, the system will choose the first action to transit in.

(Upper) Search engine can find 2 nearest next actions from transition map; (Lower) exits in action editor

Page 262: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

262 © 2011-2013 Basefount

In action editor, if we specified for “walk” action 2 exit actions, then depending on the phase of current playing

back, our system can choose the exact one next action.

Like the above 2 pictures, if current frame in “walk” action is 5 to 10, the next action will be walkToStandL,

whereas if the current frame in “walk” action is 18 to 22, the next action will be walkToStandR.

Action Transition

After action searching, we can find the next action. Then we will determine whether we need our agent transit

to next action or still playback current action continually. If the current playback is before “exit range” (red

cursor), the action will continue playback itself, whereas the current playback is exceed the “exit range” (green

cursor), and also the next action is not itself, the transition will begin.

Transition from current action to next action

After transition, the next action will be the current playback action and store in agent memory.

Please notice this process is automatic, here we just explained what happened under the hood.

Action Transition Visualization Except logic feedback, our engine is able to feedback action playback status to Transition Map. The feedback is

based on the marked agent, for marking an agent, just select this agent, as same as the Brain Viewer. Also see

Part 6 Logic & Perception – Feedback in Essential

The pictures below show the process of transition. The red or orange dots are the phase indicator for the playing

back actions. There are 3 types of status in transition process.

Cyclical playback status:

Page 263: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

263 © 2011-2013 Basefount

Cyclically playback the “run” action

Transition in process status:

Transition in process, from “run” to the “runToWalk” action

Non-Cyclical playback status:

Playing back the “runToWalk” action, non-cyclically

Go into cyclical playback status again after transition:

Transition complete, cyclical playback “walk”

You can also disable this in for Miarmy > Miarmy Global > Stop Feedback. For details, Part 6 Logic & Perception

– Feedback in Essential

Page 264: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

264 © 2011-2013 Basefount

Action Proxy List Action Proxy List is a node contains a list of action names. The action name can be any type of actions, cycle

action, transition action or blend action. This list is able to override brain logic and play actions in itself as your

arrangement.

It means if you create and enable the action proxy, any of logic will be ignored. The agent will perform the

actions in list sequentially just like pre-defined rehearsal.

We usually can use the action proxy list to test action continuity.

Action Proxy Editor

Action Proxy Node always located in ActionProxy_<agentName> group, and only one action proxy node can be

created for each one type of agent.

Action proxy node

And you can edit it by Action Proxy Editor.

If you want to disable the proxy list without delete it, please turn off the “enable” attribute of it.

Page 265: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

265 © 2011-2013 Basefount

Disable without delete action proxy

Story List (Logic Drivable Action Proxy List)

Sometimes users want to achieve more precise control agent actions easily or arrangement a set of actions

happened by plan, for examples:

1. Action Precise control

Example: an army square need precisely controlled. Walk 7 steps forward, hold and turn left, and go ahead 5

steps etc... This sequence of action is not easily controlled by others logic

2. Actions Combination and freely Change

Example: When dancing or exercising, there are lots of separated actions need to be combined together, similar

like example 1.

We introducing “Story List”, it’s a list contains many actions and it can be triggered by logic channel them

playback this list of actions sequentially, more specifically:

There can be many story list nodes for each type of agent, and each one contains a list of actions, when

triggered, the agent will playback the action one by one inside, and ignore the transition map.

Note: in this version of Miarmy, in action proxy list, if the next action is the same as

current one, they will transit by “entry range” and “exit range” mechanism instead of

“cycle range”. We will fix this in next minor upgrade.

Page 266: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

266 © 2011-2013 Basefount

Story list of agent type

We can use logic channel to activate it any time, like the others channels, story list have the active value and we

always choose the greatest value to perform story list.

Story list in decision node, in bound[1], trigger story list: sto1

The story list can be set interruptible or not, if set not interruptible, the agent once entry this story list, it will

play every action inside and not go out until finish all. Ignore any other logic etc…

Default is non-interruptible

Note: the proxy list is higher priority than story list

Page 267: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

267 © 2011-2013 Basefount

Probabilities State Machine Each action in story list can be extended into a “state”, and each “state” contains a sub list of actions.

Like the following picture, the 06 and 07 are 2 states instead of regular actions,

And when we selected the “06 … STATE: walk”, the third tab (“Weight” Story Branch) will display the sub list of

actions of 06 STATE: walk, the “walk” is the state name. That is means the “walk state” contains 3 actions “walk”,

“walkSad” and “walkHappy”. Also each one of the action has its weight. In below sample, the walk’s weight is

999, and the walkSad’s weight is 6, and the walkHappy’s weight is 13.

We using story list, our system will sequentially playback the actions in the Story Main list, and if it encounter

the “state” it will try to find the actions in the “state” and find one of the actions from the state’s branch actions.

The probability is based on the weights of actions.

Like the following picture, suppose our system is using story “sto2”, and it will playback actions from 01 to 05,

and when system step into the 06, it will detect it as a “state” then it will choose one of actions in its actions.

Walk, walkSad or walkHappy, one of them should be chosen. And when our system is choosing the actions, it

will check the “weights” of them, so the walk’s weight is 999 and has the biggest chance to be selected, whereas

the walkSad have smallest chance to be selected.

Story list expanded to “state machine” usage

For adding a state, in Story List Editor, we need select the “……” in the “All Actions” tab and click “Add ->” button,

and then we need specify a state name.

Page 268: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

268 © 2011-2013 Basefount

The process of adding a “state” into the story list

For adding actions into the state, we need firstly select the state. And then we need select one of the actions in

the “All Actions” tab (right) and click “add” of it.

Adding the action(s) into the state

For changing the weight of the action in Story Branch, we need double-click the action name and specify a new

number (greater than 1) into the blank

Changing the weight of the action in state

Channels

State machine’s channel is the same as the story list, please just use “Story:XXX”, please notice the “Story”

should be initial “S”

Use Probability State Machine

Page 269: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

269 © 2011-2013 Basefount

We can use this tool control the rehearsal like animation sequence. For example a lot of agents are dancing or a

crowd of stadium people. We can make them animated like we just planned, but the state machine branch can

make some variation of the actions make your scene more complex and lifelike.

IK System IK system is a part of action node and it can modify the result of action pose for agent when the agent is playing

back this action. Or another words, modify the result of animation when assigning data from action node to

agent.

IK is the information store in action node, it can be multiple IK in single action node and each one of IKs needs

some inner data

1. Name of end effector

2. level of Bones

3. end effector moving target curve (IK data)

4. IK rotation curve (IR data)

These data can be created in action editor, just specify the end effector name and the bone number above that

end effector, then click the “Create” button, the IK data and the IR data will be created

Create IK in action node

Page 270: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

270 © 2011-2013 Basefount

The end effector and 2 level bone

IK data: this data store the end effector position in agent transformation space, when this data exist, we will use

this data to modify the bone change

IR data: this data store the end effector rotation in agent transformation space, when the bone pose modified,

we need keep the

Let’s see the following images to explain the IK and IR data in calculation process:

The first one is the rest pose, and this foot is the end effector, the lower leg and upper leg are 2 level of IK, when

this leg is playing back animation, the leg will controlled by IK system.

Please take a look at the second picture, the IK has some offset to up, notice the blue and orange arrow, the

blue is correct rotation (the same as first picture) of the end effector, and the orange is the incorrect one

because it will keep the local rotation in side its parent (lower leg)

In third picture, the IR data is responsible to fix that rotation to correct “blue” direction

Page 271: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

271 © 2011-2013 Basefount

The IK calculation process

Once we created these data successful, we can control the IK now;

Just by IK offset channel on the leg:

Ik offset channel

<boneName>:ik.<axis>Offset

The following 3 picture is modified by the IK offset which values are: 0, 3, 6

Page 272: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

272 © 2011-2013 Basefount

footL:ik.yOffset = 0 footL:ik.yOffset = 3 footL:ik.yOffset = 6

This is very useful when the agent walk on the uneven terrain or slop, we can make the foot always on top of the

terrain and not penetrated into ground. (If it penetrates into ground, we can use IK offset to move them up)

IK lock

Sometimes we want to lock the end effector to world space for a while in the action playing back, for example

“walk” action. We want to lock the IK end effector to world space when the action frames the foot on ground

avoid its slip.

IK lock is happened in some frames range in the action node, so we need specify it in action node. Each IK maybe

have different range of lock down

The IK lock data specified GUI

You can specify the frame range which you want to lock your IK in the float field,

Page 273: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

273 © 2011-2013 Basefount

The red area means in that frame, the IK will lock there 100%

The yellow area means in that frame, the IK will lock there some percent and blend with the normal IK

positions of IK data

The red 100% lock and the yellow fade out to animation

Or you can fill that by automatically calculate, our tool will collect the height of end effecter for all the frames in

action node and calculate the min and max height of it, we can auto fill that data if the end effect below to some

percent of range:

Automatically

Auto fill result of the left foot IK (when the foot lower than 10% average)

Auto fill result of the left foot IK (when the foot lower than 10% average)

If the IK been locked in world space when playing back, our system will display a locker for it:

Page 274: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

274 © 2011-2013 Basefount

IK locker on the foot (red)

Notice: the action node created before Miarmy 1.5 Alpha 1 cannot add IK info to bone.

Page 275: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

275 © 2011-2013 Basefount

Part 7 Physical Simulation From design, we planned integrate NVIDIA PhysX engine into Miarmy. Miarmy now can easily handle more than

5000 agents and more than 100,000 rigid bodies on a Windows HOME level PC. In our design, all the physical

contents are calculated directly in PhysX engine and we just display them in Maya, so, there is no any bottle

neck between PhysX and Miarmy when simulation in process.

Enable Dynamics

Dynamics Types

You can easily enable agent ragdoll-like dynamics by decision channels. Basically, there are 4 types of dynamics

channels, they are:

1. Full body dynamics: enable dynamics for every part of agent

2. Detach dynamics: break a bone and its sub tree bones from agent, but keep the rest of agent controlled

by animation.

3. Partial dynamics: enable the sub tree dynamics from a bone, but keep the rest of agent controlled by

animation.

4. Body dynamics: enable dynamics for every part of agent except the root bone.

The illustration of each type of dynamics, the blue block are the bones controlled by action whereas the orange

blocks are controlled by dynamics.

Normal status

Page 276: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

276 © 2011-2013 Basefount

(1) Full body dynamics (2) Detach dynamics, (3) Partial dynamics (4) Body dynamics

Dynamics Channels

The channel “dynamics.active” can enable full body dynamics for the agent.

Full body dynamics

Note: in this version of Miarmy, the (3) Partial Dynamics and (4) Body Dynamics have

some problems due to the Bugs from PhysX engine. The NVIDIA is fixing it and we

believe that they can fix it soon, and we will update this part as soon as they fix it. For

details please refer the following link:

http://forums.developer.nvidia.com/devforum/discussion/3191/bug-physx-3-1-joint-

strange-movement-video

Page 277: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

277 © 2011-2013 Basefount

The Channel “<boneName>:dynamics.detach” can enable partial detach dynamics for agent. The dynamics will

be enables from the specific bone and its sub tree, and break from that bone. This is easily simulate the zombie

like character walking and being shot.

Example:

neck1:dynamics.detach

shoulderR:dynamics.detach

Detach dynamics (head, arm, head + arm)

The channel “<boneName>:dynamics.active” can enable partial dynamics from the specific bone and its sub

tree, but not detach from main agent. The main agent will be still controlled by action and Logic

Example:

torse:dynamics.active

shoulderL:dynamics.active (upLegL:dynamics.active)

Enable partial dynamic from torso3 and shoulderL

The channel “bodyDynamics.active” can enable every bone of agent except root bone. And you can control the

root by animation and the rest of bones will perform dynamic simulation. Just like you are waving a Nunchaku,

Page 278: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

278 © 2011-2013 Basefount

the handler of it is controlled by animation and the rest are controlled by dynamics. You can constraint each of

agent to a particle and write some expression to control them.

Body dynamics enable except root bone

Pre-build RBD Objects and Visual Clue

Before us diving into the others dynamics features, we need deeply understand a very important concept. That

is pre-build RBD objects

In many cases (collision detection, cloth enable etc.), we need create some pre-build the RBD objects in agent

memory and let our animation bones drive these internal RBD before really physical simulation. In this time, you

cannot see agent perform physical behavior, but actually the physical contents are there and controlled by

action.

Firstly, let’s take a look at that when these pre-build RBD objects will be created and why we need them, and

how can we know/detect their existence. Then we will introduce you how can you optimize and avoid our

engine create these pre-build RBD objects if our scene doesn’t need them.

When these conditions, these pre-build RBD will be created in agent memory:

collide channel in input

RBD collide check in input

cloth enable

partial dynamics

body dynamics

broken dynamics

We created them because we need these RBD to:

collision detection

Page 279: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

279 © 2011-2013 Basefount

hold cloth attach points or collide with cloth

drive the partial dynamical chain

If there are internal pre-build RBD created, you can simply switch to the wireframe mode to check their

existence. Just like the picture below, the bone with “dot/small point” is exact pre-build RBD inside its memory.

Please notice there also a “cross”, which will be talked about in collision detection session.

If there are internal RBD in agent, system will mark “dot” into the Bone

If collide enable, everyone has their own pre-build RBD internal

The pre-build RBD objects will take memory, so please keep check them if you’re working on the scenes with

physical features. If not nessecery, please make sure they will not going to be created.

Page 280: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

280 © 2011-2013 Basefount

Fully Pre-build RBD Objects for Dynamical

Once we enable partial dynamics or break dynamics. Except the dynamic parts, the rest of agent bones have

pre-build RBD object there in agent memory. For example the following picture, the orange parts have been

enable dynamics but the blue parts are driven by action. However, the blue parts also have RBD object there in

agent memory

The blue parts also have inner RBD objects in memory

Collision Detection

Mark Collide

The first and most important is mark the “collide bone”, only collide bone can generate collision event or receive

collision status. To mark the “collide bone”, please select the bones on the Original Agent, and enable specific

collide feel flag of each bone. If you don’t remember what is bone which marked “feel collide” flag, please refer

Part 3 Agent Infrastructure – bone flags

Page 281: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

281 © 2011-2013 Basefount

Mark collide feel bones

Pre-build RBD Objects for Collision Detection

We are using the PhysX feature for checking collision, so, if there is “collide” related channels in input sentence,

system need create pre-build RBD object in agent memory. These RBD objects are controlled by action and the

user may not notice them. Our system will use these RBD objects for collision checking and returning check

result.

Our system will only create Pre-build RBD for the marked bones and make them check collide. You can visualize

check these RBD objects directly from the wireframe mode, in the previously session, we mentioned that the

bones with “dot” inside is the RBD bone existence. Also, you may notice there is a “cross” sign inside, that is

means, No only this bone contain pre-build RBD, but also this bone can feel collide.

The cross sign means this bone can feel collide

Collide Check Channels

Using collide channels, we can detect the bone collision status of agents. The collide channel including:

collide

collideBy:<Bone Name>

collideAt:<Bone Name>

riCollide

riCollideBy:<Bone Name>

riCollideAt:<Bone Name>

Note: The bone will not check collide with terrain, only interactive with them.

And the bone also can check collide with kinematic primitive objects, which will

be explained in Part 7: Physical Simulation – Kinematic Primitives

Page 282: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

282 © 2011-2013 Basefount

Using collide channel we can check the collision status for the bones which marked “feel collide” from the

current agent.

If the bones which marked “feel collide” are colliding/overlapping the others RBD, the channel will return 1,

otherwise, return 0. Just like the picture below, the “head”, “chest”, “stomach” and “arms” bones have been

marked “feel collide” flag,

Head, chest, stomach, arms have been marked “feel collide” flag

Let’s take a look at an example below, for the agent 1, the “collide” channel will return 1 because the “chest” is

colliding with the hand of agent 2, whereas,

For the agent 2, the “collide” channel will also return 1 because the bones marked “feel collide” is also collide

with the chest of agent 1.

Page 283: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

283 © 2011-2013 Basefount

“collide” channel will return 1 from both agent 1 and agent 2

Using “collideBy:<Bone Name>”, we can check whether a bone which name is <Bone Name> collide with the

bones marked “feel collide” of current agent, for example:

For the agent 1, collideBy:lowerArm will return 1 because the chest bone of current agent is colliding with a

bone which name is “lowerArm”

For the agent 1, collideBy:head will return 0 because no matter “chest”, “stomach” or “head” is not colliding

with the bone which name is head

For the agent 2, collideBy:chest will return 1 because the lowerArm is colliding the chest of agent 1.

Page 284: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

284 © 2011-2013 Basefount

collideBy:lowerArm will return 1 for agent 1 and return 0 for agent 2

collideBy:head will return 0 for both agent 1 and agent 2

collidBy:chest will return 1 for agent 2 and return 0 for agent 1

Using “collideAt:<Bone Name>”, we can check whether the bone name is <Bone Name> from current agent

colliding with any else bone from others agents. No matter the bone <Bone Name> whether or not marked “feel

collide” flag.

Look at the following example:

For the agent 1, the “collideAt:chest” will return 1 because the chest is colliding with a bone

For the agent 1, the “collideAt:head” will return 0 because the foot is colliding with a bone

For the agent 2, the “collideAt:lowerArm” will return 1 because the lower arm is not collide with a bone

Page 285: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

285 © 2011-2013 Basefount

Collide at channels for

The “ri” prefix is use to reserve information of collide. The information will contain the collision direction and

velocity.

riCollide

riCollideBy:XXX

riCollideAt:XXX

The reserved information contain the approximated collision direction and the relative velocity

Page 286: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

286 © 2011-2013 Basefount

The collision info reserved when checking collide

We can apply a pulse force on to it when enable dynamics, with the channel “dynamics.active.force”. The force

direction will along with the reserved vector and the force strength will be the defuzzed value of the channel.

Optimization

The pre-build RBD will take huge memory if you have huge number of agents in scene. See Part 9 Optimization –

Mute Dynamics

Dynamics Features

Physics Global

Miarmy > Physics Global

Page 287: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

287 © 2011-2013 Basefount

Step Time and Sub Step

Step time is the time span of physical simulation in a single Maya frame. By default, in each Maya frame, the

PhysX simulate and increase 0.1 second for updating physical contents.

Sub step is the number of steps in each simulation time span. For example, if sub step is 4, and step time is 0.1,

each time PhysX simulate, it will simulate 4 times and each time takes 0.025 second.

Increase sub step can achieve precise simulation result but take more time to calculate.

Let’s take a look an example, when the agents are pushed by force field, the different sub step lead to different

precise level.

Page 288: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

288 © 2011-2013 Basefount

Sub step from left to right: 1, 2, 4

Disable sub-tree simulation (skip finger and toes etc…)

Sometime we don’t want to our agent simulate the finger dynamics or some subtle parts that because it will

waste much time also cause problems. There is an attribute on original agents can skip these parts. This can

speed up for the dynamic simulation and reduce the problem occurring.

We can now only disable the marked bone and its sub tree, we cannot skip simulate in the middle of dynamics,

because it’s impossible for physics engine.

Upgrade it if not existed (disableDynSubTree)

Page 289: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

289 © 2011-2013 Basefount

Make on the flags on these parts

Under simulation

The agent cache is working no any problem

Gravity VS Mass

You may encounter these situations:

The object from high place falling slow

Explosive effect not much

If the agent from high place falls to ground slowly, it means the gravity not enough. At this time you need

increase the gravity. On the other hand, if you increase the mass of agent body, there will be no any change. You

can just recall the famous story about Galileo’s 2 balls.

Page 290: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

290 © 2011-2013 Basefount

Increase the gravity

If the force field like explosive force effect agent not much, mean the object is too heavy. At this time, you need

crank down the density for decreasing the mass of the agent bones. Mass = volume * density, the volume is the

bone shape itself.

Decrease the mass

(Left) Leaning Tower of Pisa, (right) Galileo

Joint Move Inertia

When agent moving, there is a speed, and when the agent turn to dynamics bodies and start to simulate, it need

inherit this speed. For example a man is running and sudden enable dynamics and jump, it should continue

moving forward when this man is in the sky. Just like cannon.

Galileo, he is probably best known for a story in which he dropped two different size balls

from the Leaning Tower of Pisa at the same time, and the two balls hit the ground at

almost the same time

Page 291: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

291 © 2011-2013 Basefount

After Miarmy 1.5, we add this inertia momentum in agent memory when each frame simulation, and apply this

speed on the rigid body when the dynamics turn on.

Please take a look at the following picture, the agent in bound, it start dynamics simulation, before the turn on

dynamic, the agent is moving, and when it enable dynamics,

Inertia momentum

This feature is automatically performed, so there is no switch on and off.

Terrains and Default Terrain

In the previous Part 5 Logic & Perception, we talked about the terrain interactive with agent by logic channel. In

addition, the marked terrain can interactive with dynamical agents, automatically. Dynamical terrain can be any

shape, even deforming when simulation.

Page 292: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

292 © 2011-2013 Basefount

The only thing need to do is mark your terrain in Terrain Manager. Please notice:

If the terrain is deforming or moving when simulation, please mark the “isAnim” flag in Terrain Manager.

Our system can update the shape of it every frame.

If the terrain is a plane, you can mark the “isPlane” flag for accelerate the calculation.

Dynamical agents interactive with terrain

Please notice the geometrical terrain has edge. If the agent position exceeds the edge range, the agent will fall

down to the abyss.

Fall down to abyss if outside the terrain range

There are some attributes on the terrain:

Dynamic Friction: friction when object moving on terrain

Static Friction: friction want to prevent object move on terrain

Restitution: you can consider it bounce capability

Page 293: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

293 © 2011-2013 Basefount

Terrain attributes

If there is no marked terrain in scene, our system will build a default terrain. The default terrain is actually an

infinite ground plane primitive. And its attributes are located in Physics Global.

Default terrain plane

Attributes of default terrain plane in Physics Global

If you intentionally don’t want any terrain in scene, you need check on “mute terrain” in Terrain Manager, then

you scene will never create any terrain any more. And the existed terrain will be ignored.

Page 294: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

294 © 2011-2013 Basefount

Ignore exist terrain when mute terrain check on

You can use check collision between agents and kinematic primitives using channel “collideBy:_TERRAIN_”.

Maya Field

Miarmy agent can interactive with Maya field not only from logic input channels, but also directly in dynamic

simulation. When the agent dynamics enable, the agents can directly affect by Maya field. But please notice the

field can only affect the bone which marked “fieldFeel”. You need setup the “fieldFeel” flag on the bone shape

of original agent. For reviewing the original agent and agent type, please refer Part 3 Agent Infrastructure

Mark “fieldFeel” on bones of original agent

Page 295: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

295 © 2011-2013 Basefount

Maya vortex field affecting dynamical agents

For fine tuning the dynamical result, you need just change the attributes in Maya field node itself.

Force Field General Rules

Force Composition

No matter currently we are talking about Maya Field, or further we are going to introduce Maya Fluid, and build-

in force field, all of them drive agents by Force Composition. For example there are several Maya fields in scene,

and our agents can feel the composition force result of them.

Speed Threshold

And, no matter Maya fluid, field, build-in force field, they will apply force to the RBD object only when the speed

of this RBD slower than the speed threshold. Another words, once the RBD object exceed the speed threshold,

our system will not apply force onto it any more.

Speed threshold value in Physics Global

Page 296: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

296 © 2011-2013 Basefount

Force Multipliers

Sometimes, maybe your Maya field not only driving Miarmy Agents, but also controlling the particles. At this

time, change the magnitude of Maya field will effect both on agents and particles. However, maybe the particle

result is OK you don’t need change it. At this time we provide the Field Multiplier for exclusively change the

result on the agents. If the magnitude of a field is 100, and the field force multiplier is 6, the force applied to the

agents will be 100 * 6 = 600 from this field.

Field Multiplier in Physical Global

Maya Fluid

Because Maya fluid can be represented by field, the Miarmy agent can interactive with Maya fluid directly also

when the agent dynamics enable. The process is the same as Maya Field.

Maya basic fluid affecting dynamical agents

Build-in Force Field

In the previously chapter, we talked about the spot node, it’s a kind of perception contents. Actually, it can be a

force field as well. When you change the Feel Mode attribute to “onlyField” mode, the spot will become a build-

in force field.

Page 297: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

297 © 2011-2013 Basefount

(left) Feel mode change to “onlyField” (right) the force field specific attributes

If the agent enable dynamics and some of bones marked “fieldFeel” enable, the agent will be affected apply

force inside of the bound.

Push field

Pull field

Page 298: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

298 © 2011-2013 Basefount

Vortex field

Build-in force field attributes:

Field Type: can be push, pull and vortex

Bound Radius: control the radius of bounding sphere or bounding cylinder

Bound Height: (only vortex) control the height of the bounding cylinder

Factor: (only vortex) the force multiplier when the agent far from center of cylinder

Combo

We designed spot and build-in force field together because in many cases we need them work together. Firstly

we need switch the Feel Mode attribute to “both”

Page 299: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

299 © 2011-2013 Basefount

Combination of force field and spot

Suppose we are building an explosive scene. We can use spot logic trigger agent enable dynamics and use force

field push them out form bounding sphere. At this time, the combo of spot and force field is much easy to

operate.

Like the picture shown below, after using “spot.d” channel enable agents dynamics, these agents will be

naturally inside the bounding sphere, and immediately they will be affect by that force field and been pushed

out from the bounding sphere center.

Combo example spot trigger dynamics, force field push agent out

Kinematic Primitives

Kinematic primitive is a kind of static RBD objects can be controlled by user animation or constraint. Our agent

can collide with them automatically if they enable dynamics.

Page 300: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

300 © 2011-2013 Basefount

You can scale, rotate, translate and key frame the kinematic primitive anytime. Or you can parent, constrain

them to anywhere.

In this current version of Miarmy, only 2 types of kinematic primitives supported, they are “Box” and “Sphere”.

For creating them, just simply click Miarmy > Physics > Kinematic Primitives.

Kinematic Primitive example

You can check collision between agents and kinematic primitives using channel “collide” or if you want agents

exclusively check collide with kinematic primitives: “collideBy:_ KINEPRIM_”.

Check collide by “collideBy:_ KINEPRIM_” enable dynamic + keyframe kinematic primitive

The logic in the above example

Cloth simulation

Page 301: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

301 © 2011-2013 Basefount

Cloth simulation

Creating Cloth

1. Put your cloth geometry directly under the Geometry_<Agent Type> group

2. Make sure your cloth do not contain tweak info

3. Select attach points and bone shape box of Original Agent, click Miarmy > Physics > Cloth Setup > Attach

Cloth

4. You can continue add attach points to different bones from the single cloth

Step 1: put you cloth to Geometry_<Agent Type>

Notice: NVIDIA rewrote entire PhysX cloth system, and the latest cloth will be simulated in an

independent solver space and not join the rigid body collision. It’s much faster than previous

version (the more clothes the faster, at least 10 times faster and more).

But the cloth feature is not fully been finished all by NVIDIA, such as collide with ground,

cloth friction and so on. We will provide more features later in next version.

Page 302: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

302 © 2011-2013 Basefount

Step 2: Make sure you clear the tweak info on cloth mesh

Step 3: Attach points to bone shape box of Original Agent

Tip: if your geometry mesh has tweak info, but you don’t want to change the topology (shape) of that mesh, you

can simply “add a cluster deformer” to the mesh and then “delete history” from the mesh, the 2 steps will help

you clear the tweak info on the mesh but will not modify the points position

Once your setup complete, and place your agents from placement node, the clothes will appear.

Cloth Attributes

There are several clothes attribute for uniformly control all clothes in Physics Global. And these attributes

Page 303: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

303 © 2011-2013 Basefount

Cloth attributes in Physics Global

Solver Frequency: Solver frequency specifies how often the simulation step is computed per second

Stiff Damping: damping coefficient for stiffness of cloth

Cloth Density: the mass for each particle on mesh

Vertical Stretch Stiffness: stiffness for holding the length in vertical space

Horizontal Stretch Stiffness: stiffness for holding the width in horizontal space

Shearing Stretch Stiffness: stiffness for holding the shape

Bending Stiffness: stiffness for resisting shape bend

Note: because the cloth feature is under a major rewrite by NVIDIA, some features are not very stable. Please

use it carefully.

Cloth Collision on Bone

If we want to our cloth collide against with the bone, we need set the flag in original agents firstly.

Turn on collide cloth flag on bone shape

The cloth in PhysX 3 can only collide with capsule, so our system will create an approximate capsule based on

the shape of cubic bone.

Each cubic bone has 3 dimensions which are X, Y and Z. Our system will choose the longest dimension for the

capsule length and the second longest for the radius of this capsule. Just like the left example below. Then once

we enable simulation, the cloth will collide against the bone, like the right picture below.

Page 304: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

304 © 2011-2013 Basefount

Approximate collision object from cubic bone

Cloth affected by Wind

Cloth can only affect by wind force field. The wind can be created in Miarmy > Knowledge Perception > Create

Wind.

Cloth affected by wind

The wind will blow to the direction which its arrow pointing. And the magnitude will be the value between

(magnitude + noise) and (magnitude – noise). In the following example, the wind magnitude result will range

from 0 to 100. (50-50, 50+50)

The wind attributes

Page 305: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

305 © 2011-2013 Basefount

More realistic Cloth Simulation and Cloth Collision

After PhysX 3.2, there are many new features in cloth simulation especially points random force. We apply that

force on the wind, so it can make the cloth simulation more realistic:

Particle random set to 300 on attribute “jitterMag”

PhysX 3.1 cloth

PhysX 3.2 with random particle force

Of course if you turn the “jitterMag” off, it will return the result of version 1.5

Page 306: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

306 © 2011-2013 Basefount

Mute Dynamics

There is a “muteDynamic” attribute on each agent. Once we turn this on, the agent will never enable dynamics

and will not join the collision detection, the pre-build RBD object will never been created. In some cases, using

this feature properly, it will save tremendously amount of memory for you as well as speed your simulation up.

See some real example in Part 9 Optimizing.

Additionally, this attribute cannot save with scene, if the agents have been deleted and placed out again, these

attribute will change back. So, you need enable “muteDynamics” first and use “inverse placement” to store

these data to a new place node.

Rigid Body Dynamics Emitter

Miarmy provide an interesting emitter can emit the rigid body dynamics, we call them RBD emitter. The RBD

object emit from this emitter can interactive with agents, terrains, kinematic primitives and Maya field/fluid,

also the Miarmy force field.

RBD emitter example 1

Page 307: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

307 © 2011-2013 Basefount

RBD emitter example 2

This emitter can be created from Miarmy > Physics > Create RBD Emitter, the emit type for current version only

have “Plane”, it consist of a plane and a direction pointer to the emit direction. Like the picture below:

The RBD emitter

The RBD emitter can be freely transformed, translate, rotate or scale is no any problem.

Scaling bigger to emit the rigid bodies scatter. The RBD objects will be always emit from the plane area.

Scale freely

Page 308: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

308 © 2011-2013 Basefount

Rotate freely

The rigid body emitter have some attributes can be adjusted to achieve different emitting result, and most of

the attributes can be keyed frame.

RBD emitter attributes

Emitter ID: control the color of object emit out. (we will extend this feature later)

Emitter ID: 2 (left) 6 (right)

Display mode: control the constant color or diffuse color

Page 309: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

309 © 2011-2013 Basefount

Display Mode: plain (left), normal (right)

Contact event: control the how the rigid body interactive with the scene element, we will talk about this in next

session because there are some concepts need clarify before talking this.

Rate: control the number of emit each frame

Rate: 1(left) and 50(right)

Rotation speed, rx: 0.0 (left) rx -0.2(right)

Box shape attributes XYZ adjust the dimension of XYZ of rigid boxes.

Page 310: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

310 © 2011-2013 Basefount

Box shape attributes: x:1 y:10 z:1 (left) x:5 y:5 z:5 (right)

The sphere and sphere shape is not available in this version, even the attribute still there. We’ll add sphere

shape later;

Rigid Body Contact and Leave to Agent

In the previously session we skip the “contact event” attribute of RBD emitter because we have to talk about

some new concept on collision and collision query.

3 types of contact behavior for RBD emitter’s rigid bodies

Collision Group

There are 2 kinds of rigid bodies in Miarmy:

1. The regular rigid bodies (agent ragdolls, kinematical objects, and terrains)

2. The rigid bodies emit from RBD emitters

There is a concept call “collision group” in PhysX engine. If the objects are put in different groups, we can make

them not collide at all.

If you set the RBD emitters to “dynamics” mode, we will put the 2 kinds of rigid body to

the same group, and they will collide each other and can be normally interactive each other.

If you set the RBD emitter to “ignore”, we will put the 2 kinds of rigid body to the

different groups, and they will not collide.

Page 311: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

311 © 2011-2013 Basefount

Collision Detection Query

PhysX have another concept called Collision Detection Query, when we using “collide” or “collideAt” channels in

decision node, we are actually need query the collision.

As our design, we filtered 2 situations when query collision:

The RBD emitter rigid bodies cannot be detected by the agents

The agents cannot query collision from the terrain.

Inverse perception

Instead of letting the agents query collision with RBD from emitters, we make an inverse perception. We

designed letting the RBD query collision with agents, and if collide, it will tell the agents and automatically hold

there.

We introduce rbdCollide channel, this channel will return value bigger than 1 if the RBD objects from emitter hit

the agent body part. It’s not agent query collision from RBD objects, it’s these contact objects tell the agent, so

we call it inverse perception.

And this channel only work when we set to mode for the RBD emitter.

Firstly, the RBD objects will hold on whatever it contact if set to contact

The RBD objects hold on ground

If you don’t think it reality, you can make 2 RBD emitter and make one dynamics

Page 312: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

312 © 2011-2013 Basefount

Combine 2 emitters

When the RBD hit the agent body, it will leave the agent body when it contact

Agent dynamics hold on body automatically

This time the hold RBD object will tell the agent, “I contact you” and the rbdContact channel will be true, then

you can enable the dynamics for the agent

Page 313: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

313 © 2011-2013 Basefount

RBD object interactive with agents

A simple arrows rain example scene

Render RBD Emitter

Bake to Instance

We provide a simple tool can bake the RBD emitter objects directly into the polygon mesh instance.

Please make sure the RBD emitter has been cached along with the agents.

Then just select one of the RBD Emitter and one polygon mesh then click Miarmy > Physics > RBD Emitter >

Bake RBD Emitter, our system will duplicate and key frame the polygon mesh automatically for you.

Please notice we are duplicating the mesh as instance mode, so if you think the shape is not perfect, you can

tweak one of the duplicated meshes and the others will be modified simultaneously.

Page 314: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

314 © 2011-2013 Basefount

Baking RBD emitter to Polygon Mesh Instances

Read from MEL and Deal With

Please read this from Chapter 9 Development

MEL: McdSimpleCommand -exe 35;

Agent Bone Particle Emitter (Action Phase based)

Agent bone can emit Maya particle since Miarmy 1.5.

Sometimes our agents will emit some bullets, lasers or magic ball when they performing some specific action.

We provide this tool can emit particle to scene, we call this agent particle emitters.

You need first create an empty particle shape for hold the particle

Page 315: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

315 © 2011-2013 Basefount

Empty particle shape without any particle

We can mark this particle associate the action name, bone name and frame range, we can do that assignment in

Miarmy > Particle Emit Manager…

Agent particles emitter manager

Select particle node and click “Mark Emitter”

The emit part

The particle emitting attributes

Emit particles from “head” to particle shape when agents playing “walk” and action frame is “5 to 8”,

Page 316: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

316 © 2011-2013 Basefount

Emit particles result

We can also emit particles from particle, and create weapon like stuffs.

The head emit particleA, and the particleA emit particleB

And user can do any job on that particle also, for example add PP attributes, or anything VFX artiests familiar.

Also can be adjusted by any attributes

Page 317: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

317 © 2011-2013 Basefount

Part 8 Render

Agent Cache Let’s firstly check out the agent cache before rendering. One can easily and fast create Miarmy Agent Cache for

storing the simulation data of agent bones to external files. Then, using the agent cache files, artists are able to

real time drag the time slider back and forth for getting the directly visual feedback.

Agent cache is one file for each frame. It contains the simulation data in this frame. Usually the simulation data

is the bone rotates and translates, also the cloth information if there are clothes on agents.

The extension name (usually called format) of cache file is “.mmc”, and the naming convention is

“<CacheName>.<Frame Number>.mmc”, e.g. “scene001.26.mmc”.

Only with render cache, we can apply motion blur render.

Creating Agent Cache

1. Make sure you fill the right agent info in Miarmy Tools

a. Cache folder: the cache file located

b. Cache name: the name of cache files

2. Click Miarmy > Miarmy Tools

3. Enable Cache in Miarmy Global

Step 1: fill right information

The cache files in d:/abc folder

Page 318: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

318 © 2011-2013 Basefount

Agent Cache for Bone Rotate Only

Default, we only record the bone rotate info to the cache files. It can save lot of time in the process of reading

and writing.

And there is a special usage for cache files. In dynamic simulation, sometimes for some agents, the simulate

result is not very precise. Some joints will not convergence very good. But since our cache is not going to record

the translate data, after writing out the cache and when the agents read cache file back, the joint separate

situation will disappear automatically.

(left) simulation time and separated, (right) read cache from file and convergence

Agent Cache with translate

In some cases (we listed them below) we need record the bone translate info. For storing the translate info on

the bone, the only thing we need to do is enable “isCacheBoneTranslate” feature in Miarmy Tools before

creating cache.

Enable record translate before making cache

The situations we must enable record translate:

Logic channel contains offset translate

Some parts separated from agent when dynamics enable (like drop sword and shield)

Agent Cache with Uniform Scale

If we applied the agent scale feature (the “agentScale” channels) in logic and changed the scale of agents. We

need to enable “Cache Agent Scale” feature in Miarmy Tools before creating cache. So that the agent scale data

can be written into the agent cache file.

Page 319: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

319 © 2011-2013 Basefount

Enable Agent Scale before making cache

The situation we must enable record scale:

Logic channel contains agent scale

Agent Cache with Bone Scale

If we applied the bone scale animation, such as stretch and squash bone, we need always enable Joint Scale

option in Miarmy Global. Please refer the Agent Bone Scale Chapter in Action Part if you don't know this.

Enable Joint Scale Option before making cache

The situation we must enable bone scale record:

Creating Action

Simulation in process

Make agent cache

Agent Cache with cloth

If there are clothes on agents, our system will automatically record them. No extra operation need to do.

Agent Cache Format

Miarmy cache is a binary stream, which contain the format.

<numberOfAgent><numberOfCloth>(<numberOfIndex1><numberOfVertex1><numberOfNormal1>)<Index><V

ertex><normal>…..<numberOfIndexn><numberOfVertexn><numberOfNormaln>< Index >< Vertex ><

normal >)<agent1 scale>, <agent1 root>, <agent 1 bone>(bone’s scale is optional),

<numberOfCustomData1><customData1>…<customDatak>,

Page 320: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

320 © 2011-2013 Basefount

……

(<repeat cloth n>)<agentn root>, <agentn bone><numberOfCustomDatan><customData1>…<customDatak>

Out engine will compare the agent number between the first data in cache file and the number of agent in scene,

and if they are not equal, the cache will not be read and setback pose to agents.

Command Line Caching

Many task of Miarmy can be done in batch mode or command line. That is means we can do our job without

open Maya, and this can save much time and memory of loading Maya editor and drawing OpenGL stuffs etc.

Also these command line task can be assigned to simulation/render farm and let the machines to do that

without human resource.

Command Line (Batch) Simulation

We know that after caching agents, the crowd scene can be the real time. At this time we can summit the agent

caching tasks to our machines instead of waiting on your machine.

Before run command line, we have to do some setup:

1. The scene can be simulated normally

2. Setup the exporting path and file name correctly

3. Pre-test some frames and check is that cache can be generated properly.

Setup the agent cache path and name properly (Miarmy Tools)

Re-direct your start position into the Maya bin and Run command “McdBatchAgentCache”

Platform Command Line

Windows mayabatch “d:/test.ma” –command “McdBatchAgentCache”

Linux maya –batch –file “/usr/test.ma” –command “McdBatchAgentCache”

If everything all right, the cache (.mmc) file will be created in specified folder.

Page 321: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

321 © 2011-2013 Basefount

Render Solutions There are 6 types of render solutions for Miarmy, the renderman plugin and mesh drive.

Mesh Drive: using this solution, you can use arbitrary renderer to render you scene out. This method will

actually duplicate render mesh out in Maya scene.

Renderman Direct Render or DSO

Arnold DSO

Mental Ray Proxy

V-Ray Proxy

Alembic Cache

FBX Export

Since we already introduced the Mesh Drive in above, from here, we will focus on the renderman plugin solution.

Render Engine Pipeline The render pipeline is fairly simple and clear. There is an internal loop based on all the agents in scene, the

original agent will match to the agent in current iteration, and then export the geometries from original agents

to the engine, finally we will send the scene information like the geometries, lights, shaders and so on to the

render engine. The engine will render out the image based on the scene description info.

Internal render pipeline

Page 322: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

322 © 2011-2013 Basefount

Render Preparation No matter what type of renders you’re going to choose, there are some preparation steps have to be done

before rendering, they are:

Skinning

Geometries Random

Texture Random

Skinning

If we want to render our agents, we need put our rendered geometry into the “Geometry_XXX” folder firstly,

then we need skin our character geometry to original agent bones.

Skin the geometries to Original Agent Bones

The skinning method can be any type, the most regular method is “smooth skin”, but it is also support “rigid

bind”.

Also we can bind some deformers onto the geometry through the original agent bones, for example we can set

driven key and deform the muscle stretch and squash.

Notice1: it NOT support geometry direct constrain onto the original agent bones without skinning.

Notice2: DSO render only support smooth skinning.

Page 323: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

323 © 2011-2013 Basefount

Smooth Skin Transfer Tool

If your character original skin method is only smooth skin, we have tool can transfer the smooth skin from your

rig to the original agent, the method please see video tutorial Video 045 Geometry Skinning

Miarmy > Original Agent > Send Active Geo to Original Agent

Agent Match Tool for checking Skinning

There is a tool can check whether geometry skinned original agent correctly.

Please select any agent and then Miarmy > Debug Tools > Agent Match or click

Select the agent and use “agent match” tool, for testing the skinning

After checking, please click “agent return” for put the original agent back Miarmy > Debug Tools > Agent Return

or click

Geometries Randomize

Render engine need fetch the geometries in Original Agents. We can easily re-arrange the structure of these

geometries in Geometry_<agent type> group for achieving randomization.

There are 3 rules for making the geometries random:

1. The geometries directly under the Geometry_<agent type> will be always rendered.

2. And if there are several sub groups, and these sub groups are children of a root group, and this root

group is directly under the Geometry_<agent type>. We will choose all the geometries in one of sub

groups even there still have hierarchy in sub group. Notice, there may be no geometry in sub group.

3. If the geometries under a child group of Geometry_<agent type>, one of these geometries will be

rendered.

Page 324: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

324 © 2011-2013 Basefount

Random rules example. One of the items in green bound will be selected.

Please check out the above picture,

1. The items in the first orange bound will obey rule 1

The system will choose one of the geometries from the green bound. For example, “head_Mesh2”,

“l_arm_Mesh”, “l_shoe_Mesh”, “r_arm_Mesh” and “r_shoe_Mesh” will be all selected.

2. The items in the second and third orange bound will obey rule 2

The system will choose one of the groups in green bound, and then fetch all the geometries out from

that group. If that group doesn’t have geometry, the system will not fetch anything, whereas if that

group has further sub hierarchy, the system will fetch all the geometries from all sub hierarchy, for

example, in “set1” will be chosen, and all the geometries in “set1” and sub hierarchy will be all selected.

3. The items in the fourth orange bound will obey rule 3

The system will choose one of the geometries in green bound. For example, the “shirt_Mesh1” will be

selected.

Notice the cap, pants and t-shirt geometries

Page 325: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

325 © 2011-2013 Basefount

Textures Randomize

We can randomize the textures just by the names of textures. If you make your texture names by the following

rules, system will random texture for your geometry automatically without any further setup.

Correct naming convention for automatic random texture:

<Texture Name>_<padding>.<format>

1. Need at least an underscore before numbering

2. Only single padding number

3. Sequential numbering

If your texture names are correct, you just need fill the first texture name in the Image Name attribute.

Example: if you assign “pants_color_1.tif” in your Image Name attribute, the system can automatically parse out

the Green name in the following example.

Assign image name in texture file node

pants_color_1.tif

pants_color_2.tif

pants_color_3.tif

pants_color_4.tif

pants_color_1.tif

pants_color_2.tif

pants_color_0.tif (cannot read, not sequential)

pants_color_4.tif (cannot read, not sequential)

pants_color_1.tif

pants_color_2.tif

pants_color_03.tif (cannot read, not right numbering)

pants_color_04.tif (cannot read, not right numbering)

Incorrect naming:

Page 326: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

326 © 2011-2013 Basefount

pant_color1.tif (no underscore, cannot reach)

pant_color0001.tif (no underscore, cannot reach)

pant_color_001.tif (non-single padding, cannot reach)

Once we parse out all the possible textures, for example, from “pants_color_1.tif”, we found “pants_color_2.tif”,

“pants_color_3.tif” and “pants_color_4.tif”. Then, the system can automatically random select one of it based

on the agent. For example, “pants_color_2.tif” will be selected. And the “pants_color_2.tif” will be sent to the

render engine.

Random textures

Preview by Miarmy Mesh Drive 1.0 Notice: Mesh Drive 1.0 is NOT design for render, just preview or play blast. We dedicated provided Mesh Drive

2.0 and 3.0 for rendering your scene.

Concept

One can generate geometries for each one of agent directly in Maya, and use Miarmy Agents to drive these

geometries. These geometries are driven by agents rather than the regular ways such as skinCluster joints or

geometry caches, and all the processes are happened in Agent memory layer instead of Maya Script layer, so it is

relatively faster than regular deformation method.

Page 327: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

327 © 2011-2013 Basefount

Driven Mesh Rendered by Mental Ray

Features:

The Driven meshes are actually Maya meshes and can be rendered by any type of renderer or plugins

directly in Maya! Such as Mental Ray®, V-Ray®, Renderman for Maya®

Interactive display geometries, OpenGL or viewport 2.0

Optimizing Mesh Drive before Implementation

As you see, Mesh Drive indeed creates geometries (Maya Mesh Node) in scene, so it can be very slow if your

character is complex or number is too large. It is actually a render feature instead of animation feature so we

provide the following suggestions for optimizing your crowd scene:

Linux is highly recommended

This feature is very memory consuming, please use the machine with big mount of memory (more than

4G, and recommend 8G+)

Make Agent Cache before using mesh drive

Make your mesh simpler if you have large number of agents

Keep down the geometry number for each single agents (each agents may contain several geometries)

Change the start and end agent ID for partial display agent geometries

Warning: this feature would be relatively slow in Maya 2011 Windows version, but faster in Maya

2012 or above, and the fastest on Linux System.

Page 328: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

328 © 2011-2013 Basefount

Generate (Duplicate) Mesh

In this process, our script will duplicate all of the geometries for each type of agent, and optimize them, and

then duplicate for each placed agent with the random geometry rules. All the process is automatically.

Mesh Drive Feature GUI

Steps breakdown:

In the first step, system will duplicate the Geometry_<AgentName> group for each type of agent and rename

them (add MDG_MDG_ prefix), then put them out of Miarmy_Contents. We called them “template groups”. The

structure inside of this group is naturally same as the Geometry_<AgentName>

The geometry group in Miarmy Contents to be duplicated

Page 329: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

329 © 2011-2013 Basefount

Step 1: Duplicate a copy out and rename optimization automatically

In the second step, system will automatically delete the all of the history and intermediate shape nodes for all of

the geometries in the “template groups”.

Step 2: the grey ones, the trash intermediate shape nodes need to be deleted

In the third step, system will use random geometry rule to duplicate geometries for each one of agents, and

group them into a new group MDGGrp_<AgentName>. You may notice the geometries are arranged sparsely

without any hierarchy because they are the already selected ones by the random geometry rules.

Step 3: duplicate meshes for each of agent obey the random rule we talked able in previously

Page 330: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

330 © 2011-2013 Basefount

In the last step, system will pair geometries in agent memory <AgentName> and MDGGrp_<AgentName>, please

check out the Pairing session below

Pairing

In this session, system will pair the geometry pointers in agent node to the mesh nodes in scene. After this

process, system will not have to re-search the geometries from crowded scene for agents again in time iteration.

And the speed will be much faster. Technically, it is a process establishes a map relationship between the

memory of agent and the scene meshes.

Please take a look at the picture below. After this process, the pointers in memory of agent will point to the real

meshes in scene.

Agent -> Maya Geometries Memory Mapping

Enable Mesh Drive

If the mapping relationship has been established, each time the agent pose been updated, the meshes in scene

will be deformed by the Miarmy agent.

Page 331: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

331 © 2011-2013 Basefount

Left: dynamic + force field, Right: viewport 2.0

Render by Mesh Drive 2.0 & 3.0

The Mesh Drive 2.0

Mesh drive 2.0 is a feature slower than Mesh Drive 3.0 and not support batch mode render. In most cases we

use the 3.0, but mesh drive 2.0 can render the geometry with “face assigned shader”. That would be very useful

for render a geometry combined from some different geometries with multiple shaders.

Mesh Drive 3.0

For more fast and stable batch render, we provide a better mesh drive render methods, the new feature of

Mesh Drive 3.0:

1. Put to render farm directly without commands, just like a normal Maya file. (site license needed)

2. With Render layer or re-assigned shader information save-able.

3. Save about than 40~50% memory (need save and reopen file)

4. 3~5 Times Faster than Drive Mesh 2.0 when drive mesh

5. Can export Alembic Cache, Maya Geometry Cache directly & correctly

6. Save scene directly, even with tons thousands of geometries, no hard disk needed (Dynamic loaded

Miarmy Cache)

Compare between Mesh Drive 2.0 and 3.0

Mesh Drive 2.0 Mesh Drive 3.0

Cannot save file Directly Save

Not support Render Layer Support Render Layer

Not support Re-assign shader to geo Freely re-assign shader to any geometry

Slow 3~5x speed improvement

Can render face-assigned shader

Render farm need command call Directly put file to render farm

Cannot correctly export Alembic Correctly export Alembic and Maya Geo Cache

Under the hood

Cache

The new mesh drive 3.0 will export 2 kinds of very small files for storing the scene information and use them to

drive the mesh. Please notice they are automatically generated, they are:

Page 332: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

332 © 2011-2013 Basefount

1. The joint data of each original agent, we call them “Miarmy Bone Cache” (the extension name is “mbc”).

This is different from Miarmy Agent Cache, agent cache is storing the agent bone data whereas the

Miarmy Bone Cache store the Original agent bone data for each agent.

The Miarmy Bone Cache will be one frame one file.

2. A file contain the scene agent types, we call the agent type list file. Only need one file for a scene.

Drive pipeline

1. Before driving, our system will firstly duplicate (or generate) the geometries for each agent base on the

agent type list file.

2. Then we will create a node dedicated for controlling the driving session, this node will store the

information of pairing for accelerate the driving process.

3. When the system driving the meshes, it will read the Miarmy Bone Cache for a specific frame and use

original agent to drive meshes.

Mesh Drive Node

The mesh drive node control everything, the mesh drive node are controlled by time node, it will find and read

the cache, calculate the geometry shape, then plug that shape to “inMesh” of duplicated shape

The DG connection should be the following 2 pictures:

And the whole scene should be like this, there is only one Mesh Drive node in scene:

Page 333: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

333 © 2011-2013 Basefount

One mesh drive node rule them all

Render Usage

Preparing in Maya

1. Place agents

2. Make agent cache and enable cache.

3. Setup Cache files store path in Miarmy > Render Global > Other Renders Tab

Output agent bone cache folder (.mbc)

4. Make bone cache and agent type list file together by Miarmy > RENDER > Mesh Drive 3.0 > Export

Cache

5. Save your scene! Make sure the batch render can run.

At this time you can choose whether render in Maya or directly render in batch mode. (Submit to render farm)

Method 1: Render in Maya

1. Need de-place agent firstly. (delete all agents)

2. Make sure your original agent is there in scene.

3. Duplicate Meshes by Miarmy > RENDER > Mesh Drive 3.0 > Duplicate Meshes and Randomize Texture

4. It will start to duplicating and them automatically random texture, usually, we need select “Duplicate

Random”

Page 334: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

334 © 2011-2013 Basefount

2 method for randomize texture

5. After that, your meshes will be there in origin of scene

Duplicated agents meshes

6. Enable Mesh Drive by Miarmy > Other Renders > Mesh Drive 3.0 > Enable Drive Mesh

7. Open your script editor to watch the progress

Progress will show in script editor

8. At this time when you change the time line, it will update your scene

Driven meshes

Page 335: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

335 © 2011-2013 Basefount

9. Render that use any type of renderer, motion blur all is OK!

Render results

Method 2: Render in Batch Mode

This feature can render scene without open Maya and also you can submit this render job to Render Farm. If you

want to do render farm setup, you need site-license of Miarmy. All renderer support

Since the mesh drive 3.0, we can directly save the scene out and submit your render job to the render farm

without any setup

And then you can render it by command line:

Maya command-line batch render

Render it in Maya interface:

Page 336: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

336 © 2011-2013 Basefount

Maya interface batch render

Export Usage

Except rendering, the Mesh Drive 3.0 is also a good exporting tool.

Due to the internal data transfer method improvement than 2.0, the Mesh Drive 3.0 can export geometry to

Alembic and Maya Geometry Caches directly and correctly, or others.

Export Alembic

Select all geometries and export with Maya exporter

Export V-Ray Mesh

Select all/some geometries and export with V-Ray exporter

User Miarmy > Other Renderers > Mesh Drive Exporter > Export Mesh As V-Ray vrmesh (Single Frames)

/ (All Frames)

Export Mental Ray Proxy

Select all/some geometries and export with Maya exporter

User Miarmy > Other Renderers > Mesh Drive Exporter > Export Mesh As Mental Ray Proxy (Single

Frames) / (All Frames)

Benchmark

Test Machine

8GB DDR3 RAM

Intel i7 Core

Agent bones & Meshes

About 20 bones

7-11 geometries randomly

Page 337: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

337 © 2011-2013 Basefount

1600-1800 points need drive

Result

For 5000 agents:

1 second to build joint cache per frame, 6MB/Frame hard disk space

30 seconds to duplicate meshes, up to 1.9GB Memory (RAM)

10 second to drive mesh, up to 3.5GB Memory (RAM)

1.5 minutes to render (production quality 1280* 720)

Memory spend is about 5GB

batch mode is faster and save about 330 MB memory

save and re-open your scene can save about 30% memory

For 8000 agents:

3 second to build joint cache per frame, 10MB/Frame hard disk space

1 minute to duplicate meshes, up to 2.9GB Memory (RAM)

30 seconds to drive mesh, up to 4.5GB Memory (RAM)

3 minutes to render (production quality 1280* 720)

Memory spend is about 6.8GB

batch mode is faster and save about 350 MB memory

save and re-open your scene can save about 30% memory

Memory Usage:

The 8GB can hold at most 8000 agents in one Maya scene which contains about 64000 geometries.

Fortunately, the RAM is very cheap, 16GB RAM need about 100USD only.

Conclusion & Suggestions

Mesh drive is memory depending feature, the more memory you have, you got faster to render, so

increase memory if you want to use this method to render

The speed of Mesh drive is depending on the number of points, so if your scene contains a lot of agents,

please make your geometries simpler, it will be much faster.

Page 338: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

338 © 2011-2013 Basefount

Render by Renderman For rendering image, we dedicated provide a render plugin for previewing image, rendering image sequence or

exporting RIB file. This plugin is based on 3delight API, so you need install “3Delight Studio Pro” before using

these features.

Download from the following link and only 64bit:

http://www.3delight.com/en/index.php?page=3DSP_download

3Delight Configuration

Before using Renderman plugin, you need install 3delight correctly. You can easily check whether your 3delight

correct by click Miarmy > 3delight Setup > Check Renderer Status. If the result is not fine, please reinstall

3delight and reinstall Miarmy can solve this

Result is fine

The check render status script will check the following things:

1. Whether The 3Delight.dll in Maya bin is correct version

2. Whether install 3Deligth

3. Whether install correct version of 3Delight

4. Check shader path

5. Check whether shaders has been compiled

6. Check setup DL_DISPLAYS_PATH

Manually Setup Renderer (Windows)

If you are familiar with the windows system, you can please setup your render by following steps, it should be

make your image can be rendered out.

Close Maya

Re install 3delight 10 64bit firstly

Copy the 3Delight.dll from 3delight bin folder (e.g. F:\Program Files\3Delight\bin) to the Maya bin folder

(e.g. F:\Program Files\Autodesk\Maya2012\bin)

Open Maya and load Miarmy

Click Miarmy > 3delight Setup > Compile Shaders

Page 339: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

339 © 2011-2013 Basefount

How to Render

If the renderer setup correctly, you can create something and light them up then click Miarmy > Render Preview

(i-display). Once the stuff rendered out, it proof that your renderer is ready for duty.

The simple render test

Render Global

Once you know how to render the image out, you can adjust the attributes in Render Global for fine-tune the

image quality.

Page 340: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

340 © 2011-2013 Basefount

Render global

Texture generate and path accessible

Due to that the Renderman need generate the .tex file for each of texture, please make sure the directory you

put your textures is writeable. Or you need pre-compile the “.tex” file and put these file on sever. Please notice

the following figure. You may notice each texture file has a “.tex” file counterpart.

Page 341: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

341 © 2011-2013 Basefount

The .tex file in the same folder of texture

Multi cam render

Our system will automatically render image from all renderable cameras, if you want to render stereo multi can,

please just setup in Maya Render settings.

If you have several renderer cams, the Renderable Camera in Miarmy Render Global will change to “All Render

Cams (Stereo & Multi) automatically. And you don’t need to setup them again here.

Render multi cam

Preset shaders

You can directly use Maya shader and its instinct features to render the scene, our render plugin will

automatically translate the Maya shader to Renderman shader parameters, then render image out. Just like

3Delight for Maya or Pixar’s Renderman for Maya.

We only support 3 types of preset shader of Maya. They are Lamber, Blinn and Phong. You can use Miarmy >

Rendr Preview (i-display) for directly rendering image out.

Lamber / Blinn / Phong rendered by 3delight preset shader

Preset shader supports the following feature, and all of them don’t need you setup, just give them Maya Shader:

Only need setup Maya shader

Page 342: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

342 © 2011-2013 Basefount

Note: If you render image by Miarmy > Render Preview (i-display), the preview image will be the first pass in

Miarmy Render Global. Whereas if you render images by batch Miarmy > Render Extra > Render batch to Image

Files, the render plugin will render all the images in each pass.

For example like the following picture, if you check Shadow and Occlusion passes, and when you preview render,

only shadow pass will be rendered out for current frame. And if you render image batch to files, all the images

for every frames and every passes will be rendered to specified path.

Render passes in Miarmy Render Global

Beauty Pass

Our system directly support these shader features:

Page 343: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

343 © 2011-2013 Basefount

The preset shader feature

Displacement Map

Miarmy render plugin doesn’t support bump map. Instead, it supports displacement map. The only thing need

to do is link a Maya displacement material to the shading group node. Because Renderman based on micro

polygon, the displacement map is faster and better then bump.

Creating displacement material

Page 344: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

344 © 2011-2013 Basefount

Fill the displacement map

Displacement map

Displacement Map Intensity

You can directly change the alpha gain parameters for tweaking displacement intensity:

Page 345: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

345 © 2011-2013 Basefount

Displacement Bound

If you are using high intensive displacement, there may be some render error on it like the following left picture.

For solving this, you need add a displacement bound attribute to the geometry. Miarmy > Render Extra > Add

Displacement Bound Attribute

Shadow Pass

You need enable depth shadow map in light attributes

(left) maya viewport (right) Shadow pass

Render Ambient Occlusion:

The occlusion quality can be setup in Render Global OCC samples

Page 346: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

346 © 2011-2013 Basefount

Occlusion pass

Depth Pass

Controlled by near and far clips

Depth shader controlled by camera near and far clip. (Left) frustum (right) render result

The shader located in 3delight shader path. They are:

McdBumpy.sdl

McdDOF.sdl

McdGatherAO.sdl

McdSpotlightInv.sdl

McdTxtPlastic.sdl

And the source codes are located in Miarmy installation place.

Page 347: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

347 © 2011-2013 Basefount

Self-defined Renderman Shader

You can create Renderman shader shell and link them to external renderman shader. In current version, we only

support

RM shader shell

Click “Browse” to select shader,

Expand “Extra Attributes” for displaying the attribute of the shader

Click “Update RIB” for updating the “Shader String”.

Click “Reload” for clear all attributes and set to default.

The emboss shader example

Page 348: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

348 © 2011-2013 Basefount

The render result from “brick” shader with different parameters

Displacement Map is the same as surface map, but it need connect to “Displacement mat.” attribute.

Connect a McdRMDispMat shader to node

Displacement map and render result

Page 349: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

349 © 2011-2013 Basefount

Prman Rib Export, support .slo for custom Shader

Since version 1.5, the rib exporting can directly support prman’s “.slo” shader,

Fill .slo and our system can hook them for you

Know Issue

Sometimes in some platforms, the node attribute editor for displaying shaders attributes is not updating

correctly, we still cannot find out why but there is 2 solutions can bypass it:

This attribute may disappear, so you cannot modify the data in shader

We found these attributes are existed but just not display correctly,

Solution 1 is duplicate the attribute tab by clicking “Copy Tab”

Click copy tab and clone a new tab the new tab

Solution 2 is adjust the attribute in channel box (but cannot change the string type of attributes)

Page 350: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

350 © 2011-2013 Basefount

Adjust the attributes in channel box

Light Usage & Shadow

Lights

Miarmy support 4 types of lights for lighting.

But only support Spot light for shadowing.

Available lights

Shadow

Need enable shadow Map and resolution should be 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, and

8192.

Page 351: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

351 © 2011-2013 Basefount

Need enable shadow Map and resolution should be some specific value

Ray trace shadow

Since version 1.5, our build-in render plugin support Ray trace render, this method can save time and hard disk

spaces for exporting shadow map, and much easier to setting up.

Currently, we are only support “directional light” of ray-trace shadow . And you have to enable the “Use

Ray Trace Shadows” to turn the shadow on, while the “Shadow Rays” can control the sampling value of render

man light shader.

And the final result is much better;

3 types of ray trace method

Ray Trace Shadow All: render all diffuse and shadows

Page 352: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

352 © 2011-2013 Basefount

Ray Trace Shadow Agent: only render the shadow on agents

Ray Trance Shadow Terrain (render only terrain shadows)

Page 353: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

353 © 2011-2013 Basefount

Motion Blur

There are 3 types of motion blur in Miarmy renderman plugin

Camera motion blur: blur when camera moving

Transform motion blur: blur entire agent by its root movement

Deformation motion blur: blur based on the deformation of the geometries

Deformation motion blur have more accurate and better result whereas transform motion blur is faster, usually

you need choose one of them but don’t enable them both.

The first is a camera attribute and you can enable it in render setting page:

Notice: motion blur only can work with agent has cache

Page 354: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

354 © 2011-2013 Basefount

3 types of motion blur in Miarmy Render Global

Camera motion blur (camera is rotating)

Transform motion blur (blur entire agent)

Deformation motion blur (blur only deforming parts)

Page 355: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

355 © 2011-2013 Basefount

You can change the motion blur quality by Pixel Sample attributes in render global

Pixel Sample results

Renderman Extra Rib Attribute (internal or custom)

We provided 2 extra types of render attributes:

1. Arbitrary string attribute

2. Build-in attribute

Arbitrary String Attributes:

Select any geometry and click Miarmy > Render Extra > Add/Del Custom Attributes > Add Custom String

Attribute,

There will be a new attribute (string type) added on your selected object

Fill whatever you want and split the string by “ ” (blank Sign)

Then, the output rib will hook the attribute you specified (notice the blue font)

------------------------ rib example --------------------------

AttributeBegin # {

Attribute "identifier" "name" [ "|pSphereShape1" ]

Attribute "user" "uniform string creatureType" [ "lion" ]

Attribute "user" "uniform string creaturePart" [ "head" ]

Attribute "displacementbound" "sphere" [ 1 ]

ShadingInterpolation "smooth"

Surface "McdTxtPlastic"

"Ks" [ 0 ]

"Kd" [ 0.8 ]

"Ka" [ 1 ]

---------------------------------------------------------------

Page 356: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

356 © 2011-2013 Basefount

Build-in Attribute

There are also some attribute will write to rib if user nee them:

Build-in Renderman attributes

Agent Index: the index of agent, (0, 1, 2, 3…<Number of Agents>)

Body Index: the index of body in each agent

Agent ID: an unique id between 0~1 randomly assigned to agent, each frame is stable

Body ID: an unique id between 0~1 randomly assigned to body, each frame is stable

Points Velocity: write each point velocity to primitive attributes (only motion blur)

Rib preview for build-in attributes

Rib preview for points’ velocity

Hierarchical Subdivision Mesh

We can export hierarchical subdivision mesh after version 1.5, when we add the subd flag to polygon mesh.

There will be an extra attribute “asHiSubd” for turn this subd to hierarchical subdivision mesh.

This kind of subd can solve some problems when the edge has shrunk:

Page 357: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

357 © 2011-2013 Basefount

Hierarchical subdivision mesh

Command Line (Batch) Exporting RIBs

With the similar operations we can export Rib file to hard disk by the command:

1. The scene can be export RIB normally

2. Setup the exporting path and file name correctly

3. Pre-test some frames and check is that RIB file can be generated properly.

Setup the rib exporting path and name properly (Render Global)

Page 358: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

358 © 2011-2013 Basefount

Re-direct your start position into the Maya bin and Run command “McdBatchExportRib”

Platform Command Line

Windows Mayabatch “d:/test.ma” –command “McdBatchExportRib”

Linux Maya –batch –file “/usr/test.ma” –command “McdBatchExportRib”

If everything all right, the RIB (.rib) file will be created in specified folder.

Misc New Layers

Color pass

Page 359: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

359 © 2011-2013 Basefount

RGB Light Pass (can re-light)

Normal pass render (can re-light)

Subdivision Mesh

Subdivision mesh is an powerful feature of Renderman, our render plugin support it!

Page 360: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

360 © 2011-2013 Basefount

Once you mark a subd flag on geometry, our renderer will take this geometry subdivision mesh instead of

polygon mesh. For adding subd flag to geometry, you need simply click Miarmy > Render Extra > Add Subd

Attributes. You may notice the hard edge on mesh will disappear and the antialiasing is perfect.

(left) Maya viewport (mid) polygon mesh (righ) subd mesh

Extra attributes

As Subd On

The object will be rendered as subdivision mesh instead of polygon mesh

Interpolate Boundary On

If enable, the subdivision mesh should interpolate all boundary faces to their edges

(left) Maya viewport (mid) disable interpolate boundary (righ) enable interpolate boundary

Page 361: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

361 © 2011-2013 Basefount

Matte

You can add background color matte to some objects for skip there render but still leave the alpha channel there.

You can simply click Miarmy > Render Extra > Add Matte Attribute.

(left) maya viewport (mid) render result (right) alpha channel

Split render

Reason

When the scene contains several thousand agents and each agent contains several geometries, our machine

may meet the bottleneck. At this time, we need separate the render job to several parts and finish each part one

by one and finally combine the results. We do this using split render.

Under the hood

Split render is actually going to split screen to different parts and render each parts one by one, and each part

will output a picture. Then, we need combine them in post-production software. The splitX and splitY attributes

are used to specify how you need split the render screen.

The calculation is based on bounding box of the agent, in original agent.

The agent with break dynamic bones (such like the solider dropped the sword ) will be rendered in

every split part

For example in following 2 pictures, we split the screen 3 by 3 to 9 parts, and our renderer will render each part

of them.

Page 362: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

362 © 2011-2013 Basefount

Split the render screen 3 by 3 to 9 parts

Split screen and separate the agents

Render Result

The render result naming convention will be:

<Frame Name>_<pass>__<part X>_<part Y>_.<Frame Number>

The image can be rendered out fast also without any bottle neck:

Page 363: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

363 © 2011-2013 Basefount

The result of split render

Procedural Primitives

Reason

The reason of using procedural primitives is pretty simple: save space of hard disk.

Under the hood

Traditional Renderman RIB file contains the all geometry details in file for rendering the scene, each single

geometry will be included in each frame of RIB, sometime this will using huge amount of hard disk, for example

you have 10000 agents with 100000 piece of geometry it’s almost impossible store them in hard disk directly.

Procedural primitive is a feature can insert these geometries information before rendering in memory and

discard them automatically after rendering. So it will save your hard disk, but not accelerate your render.

The Pipeline

1. We firstly export some information on hard drive, we call them agent assets. The agent assets actually

are some information of “Pre Bind” pose and geometries.

2. Then export RIB file with special block instead of geometry block (means, the RIB will not contain

geometry information any more)

3. When rendering, system will call a McdRunProgram to read that special block in RIB and generate right

geometry info and replace it with the geometry block.

Left: transitional rib approach, Right: procedural primitive approach

Page 364: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

364 © 2011-2013 Basefount

Agent Assets Content

The agent assets will be automatically export to hard disk when export RIB and its location will be the same as

the RIB

They are 3 types of files

1. Agent Main File:

a. Agent bone number

b. Bone names and structure

c. World inverse matrices of each bone

2. Original Geometry Files:

a. The rib file of original geometry

3. Weight List files:

a. Each line contains current point weight list (bone id and bone weight)

b. (the number of lines equals to point number)

Agent Assets Structure

Each scene contains several agent types, each type have severl geometries.

The colorful words mean folder and white names mean files

Page 365: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

365 © 2011-2013 Basefount

Rib Tags

Format:

Procedural "RunProgram" [ "<RunProgram Folder>/McdRunProgram" "MiarmySession: <agent assets

folder>/ProcPrimAssets <agent type id> <geometry type id> <motion blur> <shutter open> <shutter close>

<pose data[12] * number of bone> ] [<xmin>, <xmax>, <ymin>, <ymax>,<zmin>,<zmax>(bounding box info)]

Example (with motion blur and 2 pose):

Procedural "RunProgram" [ "D:/Users/Yeah YANG/Documents/Visual Studio

2008/Projects/McdRunProgram/x64/Release/McdRunProgram" "MiarmySession: d:/pp/abc/ProcPrimAssets/ 0 0 1

0.000 0.500 0.83873 0.00000 -0.54454 0.00000 1.00000 0.00000 0.54454 0.00000 0.83873 0.34956 0.00000 4.77319 -

0.54429 0.00000 -0.83889 0.00000 1.00000 0.00000 0.83889 0.00000 -0.54429 1.18829 0.00000 4.22864 0.83873 0.00000 -

0.54454 0.00000 1.00000 0.00000 0.54454 0.00000 0.83873 0.69913 0.00000 4.54638 -0.54429 0.00000 -0.83889 0.00000

1.00000 0.00000 0.83889 0.00000 -0.54429 1.53786 0.00000 4.00183 " ] [ -1.0337217 2.0822851 -2.220446e-16

2.220446e-16 3.163023 6.1564216 ]

The McdRunProgram

The “McdRunProgram” is a Renderman plugin can read the agent assets and rig tags, then generate the

geometry, and put the result in memory in render runtime.

This program actually implements a very simple skinning algorithm to bind the agent geometry and calculate the

right position of each point and right direction of each normal (Note: if using sub-division mesh, no normal need

to be calculated). Then put the results to stream (in memory)

Source Code

The “McdRunProgram” is an open source program written by Basefount Team and exclusively open for our

formal testers and customers. If you need, please write contact us.

Note:

The preview render is using procedural primitive automatically and will not generate agent assets

Page 366: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

366 © 2011-2013 Basefount

If you render image from Maya directly, it will automatically use procedural primitive and will not

generate agent assets files.

The DSO

The procedural primitive also has DSO (dynamic shared object) mode, after Miarmy version 2.5, we provided

McdRMDSO.so (or dll) for that usage. With this method, the render speed might be faster

Enable DSO mode for procedural primitive

The Render Archive

See video tutorial 054 Renderman Archive

Command Line (Batch) Exporting RIBs

With the similar operations we can export Rib file to hard disk by the command:

4. The scene can be export RIB normally

5. Setup the exporting path and file name correctly

6. Pre-test some frames and check is that RIB file can be generated properly.

Setup the rib exporting path and name properly (Render Global)

Re-direct your start position into the Maya bin and Run command “McdBatchExportRib”

Platform Command Line

Windows Mayabatch “d:/test.ma” –command “McdBatchExportRib”

Linux Maya –batch –file “/usr/test.ma” –command “McdBatchExportRib”

If everything all right, the RIB (.rib) file will be created in specified folder.

Page 367: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

367 © 2011-2013 Basefount

Render By Arnold

Since Miarmy version 1.5, Miarmy support Solid Angle® Arnold Render™ (http://www.solidangle.com) with

Procedural Primitive DSO approach. The McdArnoldDSO (written by Basefount) is Open Source to our customers

and the confirmed beta users.

General Introduction

Our tool can export all the agents render information out to an Arnold “.ass” file to the disk you specified. Then,

we can create one Arnold StandIn object in Maya and link that “ass” file against with this StandIn object. After

setup some parameters, we can directly use Arnold for Maya (mtoa.mll) render plugin to render them out.

Arnold Procedural Primitive

Notice: this part is the explanation of Procedural Primitive under the hood. It can make users understand

better. You can skip this part and directly go to part “the tools” and “the pipeline” if you just want to render

image.

Reason

The reason of using procedural primitives is pretty simple: save hard disk space.

Under the hood

Regular Arnold ASS file contains the all geometries detail (points, normal etc…) in file for rendering the scene,

each single geometry will be included in each frame of RIB, sometime this will using huge amount of hard disk,

for example you have 10000 agents with 100000 piece of geometry with 200 frames, it’s almost impossible store

them in hard disk directly.

Procedural primitive DSO is a feature can insert these geometries information in render time and discard them

automatically after rendering. So it will save your hard disk, but in some case, it will not accelerate your render.

The Pipeline

4. We firstly export some information to hard drive, we call them agent assets. The agent assets actually

are some information of “Pre Bind” pose and original geometries etc...

5. Then export ASS file with special block instead of geometry block (means, the ASS files will not contain

geometry information any more)

6. When rendering, system will call a McdArnoldDSO to read that special block in ASS and generate right

geometry info and replace it with the geometry block.

Page 368: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

368 © 2011-2013 Basefount

Left: traditional ass approach, Right: procedural primitive approach

Agent Assets Content

The agent assets will be automatically export to hard disk when export ASS and its location will be the same as

the ASS files. You can setup it at Miarmy > Render Global > Other Renderers Tab

Setup paths in Render Global

They are 3 types of assets files:

4. Agent Main File:

a. Agent bone number

b. Bone names and structure

c. World inverse matrices of each bone

5. Original Geometry Files:

a. The element of original geometry (nsides, vidxs, nidxs, uvidxs, vlist, nlist, uvlist)

Page 369: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

369 © 2011-2013 Basefount

6. Weight List files:

a. Each line contains current point weight list (bone id and bone weight)

b. (the number of lines equals to point number)

Agent Assets Structure

Each scene contains several agent types, each type have severl geometries.

The colorful words mean folder and white names mean files

Accelerate Middle Data

The DSO program will read the text file, get each string line and parse them into data based on every piece of

mesh. But the process of string parsing in C++ is very slow, for accelerating them, we store some binary data file

intermediately to the middle file folder, this can save huge amount of time when rendering. It can bypass the

string reading and parsing process.

If your middle file path is not writable in render time, the render cannot be accelerated.

And if your middle file is correct and writable, you can see some files generated in the middle file folder

Middle Data Format

The middle data is named as “miarmy_arnold_mid_data_<agent type id>_<geom id>, and in each one of middle

data file, it contain one type of geometry of agent.

For example: miarmy_arnold_mid_data_1_3

This middle data is no extension name and it is the binary format data,

Page 370: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

370 © 2011-2013 Basefount

Arnold render intermediate accelerate data

The format inside Middle Data is ordered as the following sequence:

<Number of bones> (size: 1)

<Bone Original Poses> (size: bone number * 12)

ASS Tags

Format:

procedural

{

name <object name>

min <xmin>, <xmax>, <ymin> (bounding box info)

max <ymax>,<zmin>,<zmax>

dso "<DSO Folder>/McdArnoldDSO.dll"

declare G_assetsPath constant STRING

declare G_middlePath constant STRING

declare G_agentID constant INT

declare G_geoID constant INT

declare G_poly0_subd1 constant INT

declare G_motionBlur constant INT

declare G_motionShutter constant FLOAT

declare G_poseData constant STRING

G_assetsPath "<assets path>"

Page 371: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

371 © 2011-2013 Basefount

G_middlePath "<render acceleration middle file path>"

G_agentID <agent id>

G_geoID <geometry id>

G_poly0_subd1 <0 is polygon, 1 is subdivision mesh>

G_motionBlur <0: not motion blur, 1: with motion blur>

G_motionShutter <motion shutter, default 1>

G_poseData "<pose data[12] * number of bone> "

shader <shading group name>.dagSetMembers

}

Example:

procedural

{

name pSphereShape10

min -4.552 -0.237 -4.552

max 4.552 9.314 4.552

dso "D:/Users/Yeah YANG/Documents/Visual Studio 2008/Projects/McdArnoldDSO/x64/Release/McdArnoldDSO.dll"

declare G_assetsPath constant STRING

declare G_middlePath constant STRING

declare G_agentID constant INT

declare G_geoID constant INT

declare G_poly0_subd1 constant INT

declare G_motionBlur constant INT

declare G_motionShutter constant FLOAT

declare G_poseData constant STRING

G_assetsPath "d:/abc/arnold/ProcPrimAssets/"

G_middlePath "d:/abc/arnold/TempMiddleFiles/"

G_agentID 1

G_geoID 0

G_poly0_subd1 0

G_motionBlur 0

G_motionShutter 1.000

G_poseData "0.00020 0.68235 -0.73102 -0.00008 0.73102 0.68235 1.00000 -0.00008 0.00020 0.00000 0.00000 0.00000 -

0.00002 0.88383 0.46780 0.00080 0.46780 -0.88383 -1.00000 0.00035 -0.00072 0.00130 4.41827 -4.73345 -0.00079 -

0.30211 0.95327 0.00012 0.95327 0.30211 -1.00000 0.00035 -0.00072 0.00120 8.24556 -2.70769 0.99999 -0.00044

0.00100 0.00044 1.00000 -0.00029 -0.00100 0.00029 0.99999 -0.00370 6.39036 3.14616 "

shader initialShadingGroup.dagSetMembers

Page 372: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

372 © 2011-2013 Basefount

}

The “McdArnoldDSO” under the Hood

The “McdArnoldDSO” is an Arnold plugin (.dll in Windows) can read the agent assets and rig tags, then generate

the geometry, and put the result in memory in render runtime.

This program actually implements a very simple skinning algorithm to bind the agent geometry and calculate the

right position of each point and right direction of each normal (Note: if using sub-division mesh, no normal need

to be calculated). Then put the results to (in memory)

Source Code

The “McdArnoldDSO” is an open source program written by Basefount Team and exclusively open for our formal

testers and customers. If you need, please write contact us.

Note:

The preview render is using procedural primitive automatically and will not generate agent assets

If you render image from Maya directly, it will automatically use procedural primitive and will not

generate agent assets files.

The tools

Page 373: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

373 © 2011-2013 Basefount

The mental ray features

We provide some tools for achieve this MR proxy render:

Setup Current Frame: export only current frame render info out

Setup Scene Sequence: export every frame in time line

Export Shader Ass Files: only export shader information on all geometries of Original Agents

The Workflow

Export ASS

Before render we need export agent geometry to ASS file by the “Setup Current Frame” or “Setup Scene

sequence” tool, please notice that if we want to export all frames sequence, the agent cache should be made

before exporting.

After exporting, you should be able to see some files been exported to the folder specified in Render Global.

Exporting assets and render contents

Motion Blur

For render motion blur, you just need enable the motion blur in Arnold Native Settings, and make sure the

Shutter Size is 1 (because we cannot support float point frame motion blur)

Page 374: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

374 © 2011-2013 Basefount

Setup Motion Blur directly in Arnold Global

Create Standin & Setup

After exporting, you need create an Arnold standin object and do some setup, please notice, only 1 standin

object need to be created. For different frame, you can animate the “frame” attribute on that standin object

whereas the frame sequence will be changed to “#”sign in Path field.

The .ass files in export directory

Standin setup

Render By Mental Ray

General Introduction

Our tool can export all the agents render information out to a Mental Ray “.mi” file to the disk you specified.

Then, we can create one Mental Ray proxy objects in Maya and link that “.mi” file against with this Mental Ray

Proxy object.

Page 375: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

375 © 2011-2013 Basefount

Know the Limits at this time:

Cannot using namespace referencing pipeline

Cannot randomize texture

Cannot Render Motion Blur

The tools

The mental ray features

We provide some tools for achieve this MR proxy render:

Setup Current Frame: export only current frame render info out and port the proxy in maya

Setup Scene Sequence: export every frame in time line

Export Shader MI Files: only export shader information on all geometries of Original Agents

Replace MI Shader to Current Setup: replace shader only but not export geometries again

Link existed MI Sequence: create proxy planes in Maya and port the render into Maya

Clear MI Files: delete all the exported stuff in the target folder

Enable Update Render View: register a render pre MEL to export current frame before click the render

button

Disable Update Render View: unregister the render pre MEL command

What is Mental Ray Proxy Object, Please Refer:

http://download.autodesk.com/global/docs/maya2013/en_us/index.html?url=files/GUID-BA0141FB-

972F-4DA4-AEAC-20B82048D52F.htm,topicNumber=d30e654067

Page 376: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

376 © 2011-2013 Basefount

Render Pipeline and Assets Organization:

Preparing

Before exporting MR proxy, we need specify which place will put the assets, and this folder should be existed in

your hard disk / server, please setup this in Render Global

Specify the MR exporting path in Render Global

Our system export the geometry and material data to disk firstly then using proxy object porting them back to

Maya for render.

1. Export material on all original geometries (check the following picture)

2. Iterate frame and export geometries data (in this process, system will rename the geometries)

3. Combine all the geometries data from step 2 and to a single file (check the following picture)

4. Generate a dedicated proxy file

5. Import MR Proxy based on the file created from step 4, and we host the proxy file on a piece of plane.

6. We will key frame the visibility of the plane from step 5. (check the following picture)

Page 377: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

377 © 2011-2013 Basefount

Exporting results

Then our MEL will port the proxy file in miProxy folder and hook each of them to different polygonal plane. For

example there are 7 frames, and there will be 7 planes. Also our MEL will automatically key frame these planes

on their visibility channels make them only show up in right frame,

Proxy file need port to Maya

Page 378: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

378 © 2011-2013 Basefount

The plane object hide/unhide each frame

At this time, when you click render button, the render will be automatically done in Maya:

Render preview

Replace Shader without Exporting Geometries Again

Once we export proxy, the material will be export and hook up the geometry also, so if we want to render our

geometries with others shaders (such as Occlusion or normal), we need export the materials and replace these

information in MI files.

Notice: replacing is only available for sequence exporting.

Replace Principle, Miarmy now only support:

multi materials to single material replacing (Lamber1, phone1, lamber3 etc => occlusion shader)

Page 379: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

379 © 2011-2013 Basefount

single material to single material replacing (Occlusion shader => normal shader)

So we suggestion exporting the color/beauty pass out and save as the file to different version for replacing

shader and render others passes

Replace Shader Pipeline and Assets

1. Export all Shaders of all geometries to another shader file

2. Re-generate a bunch of small proxy file hook new generated material MI files

3. Replace that files in Maya proxy host plane

New exported materials and proxy files

Page 380: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

380 © 2011-2013 Basefount

Render result

Render By V-Ray

V-Ray archive Support

Miarmy can export V-Ray Mesh file (.vrmesh) and port them back to maya for V-Ray Rendering. The whole

process is based on the build-in MEL command from V-Ray itself.

Preparation

Firstly, you have to install V-Ray for Maya correctly “vrayformaya.mll”

Secondly, the agent cache should be created and drive agent correctly.

Then, the export folder and file name should be specified in Render Global

Specify the V-Ray Mesh folder and file name

Page 381: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

381 © 2011-2013 Basefount

Pipeline & Assets

We export V-Ray mesh by each agent for a time range. More specifically, each agent will exported to one V-Ray

Mesh file contains frame in timeline.

1. Drive agent by “single cache system” which use agent cache but drive only one agent

2. For each agent, we export selected objects for a range of time

The assets of V-Ray proxy is very simple, just a vrmesh file in target folder (specified in Render Global)

V-Ray Proxy assets

Under the hood

The proxy file will be automatically porting scene after creating, the MEL provided by V-Ray itself can

automatically link the shader for you.

V-Ray proxy shape nodes

Page 382: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

382 © 2011-2013 Basefount

One proxy shape is linking to a single vrmesh file, but it can hold more than one meshes. Each mesh can link

against a shader, like the picture show below, it controlled by V-Ray material node

The structure of V-Ray mesh file

V-Ray proxy material node

Page 383: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

383 © 2011-2013 Basefount

The render result

Replace Shader

We can replace shader for the V-Ray proxy without re exporting geometry again. Just select any shader and click

Miarmy > Other Renderers > V-Ray > Replace Shader

Replace Principle, Miarmy now only support:

multi materials to single material replacing (Lamber1, phone1, lamber3 etc -> occlusion shader)

single material to single material replacing (Occlusion shader -> normal shader)

So we suggestion exporting the color/beauty pass out and save as the file to different version for replacing

shader and render others passes

(Left) select shader (right) replace result

Page 384: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

384 © 2011-2013 Basefount

Alembic Cache (Geometry Cache)

Alembic Cache Export

Alembic cache is a new and small geometry cache file format developed by Locus Film and Sony Imageworks.

Maya 2012 SAP and Later version of Maya support this directly. The extension name of this kind of cache is

“.abc”. In addition, this kind of cache can be read by Houdini and others 3D package in future.

For more information, please refer http://www.alembic.io/updates.html

Miarmy can export alembic cache for each agent in a range of time, more specifically, we export cache for:

One agent one “.abc” file,

Each “.abc” file contains many geometries

Each “.abc” file is a range of time, so the result “.abc” file will be the same number of agents

Before making Alembic Cache, we MUST create “agent cache” firstly. Because the system will read some

information from agent cache when creating Alembic Cache

Then we need specify where the .abc cache we want to put in. We need specify this in “Miarmy > Render

Global > Other Renderers Tab > Alembic Cache Setup”

Setup Alembic Cache Path and Name

Export cache

Page 385: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

385 © 2011-2013 Basefount

Usage:

Create Alembic Cache: create alembic cache for all agents in scene (auto pass hidden one)

Import Alembic Cache: auto import all alembic cache based on the name exporting and the frame of

timeline

After exporting

Then, import the cache in scene, it can playback well:

Importing Alembic cache

Export FBX (See Character Cache)

Page 386: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

386 © 2011-2013 Basefount

Bake Bone + Geometry

Bake to Bone Animation

User can easily bake agent to Maya joint characters using Miarmy Bake tool, this bake tool will firstly duplicate

the joints structure for each agent and them bake each one of them based on the agent animation.

Note: this tool need do the agent cache firstly.

This tool is useful when: sometimes we need refine the animation or geometry for specific actor in shot, and

want to bake them back to “real” character in Maya, and add some deformers or rigs or even fur/hair.

Bake tool GUI

Usage:

Bake Agents to Maya Actor (All): bake all agents in scene

Bake Agents to Maya Actor (Select): bake only selected agents

Baking result

Directly Get Simulation Data Using MEL/Python

Before Miarmy 1.5, you need read agent joint data through “agent match” and read data from original agent.

It’s really slow for production, now we provide a new approach which can read the data directly from agent:

Page 387: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

387 © 2011-2013 Basefount

Please select the agent you want to read, then:

Run a Maya command “McdAgentMatchCmd -mm 3;” And this MEL will return an array,

For the returned array, the first and second element are <Agent ID> and <Agent TypeID>, with the agent type id

you can use it to find which agent group

Then the following data for each joint:

<tx> <ty><tz><rx><ry><rz><sx><st><sz><Custom Data Number><1st Custom Data>…<Nth Custom Data>

<tx> <ty><tz><rx><ry><rz><sx><st><sz><Custom Data Number><1st Custom Data>…<Nth Custom Data>

……

<tx> <ty><tz><rx><ry><rz><sx><st><sz><Custom Data Number><1st Custom Data>…<Nth Custom Data>

The “red” element is dynamically, means its number is based on “Custom Data Number”

The joint order is based on maya order:

The order of data in returned array is the same as Maya hierarchy

Page 388: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

388 © 2011-2013 Basefount

Know the limitation:

Please notice, all the fetched data are represented in rotation order “XYZ” because our original agent is built in all XYZ order, if you want to change, please refer the following c++ code, it can help get the rotation value of others orders.

void McdSimpleCommand::rotOrderTest(){ // execute: 22 // for example: // we set 60, 60, 60 in XYZ order // we want to get rotate of XZY order: MTransformationMatrix::RotationOrder rotOrder = MTransformationMatrix::kXZY; double rotBuild[3] = { 60.0 * TO_RAD,

60.0 * TO_RAD, 60.0 * TO_RAD};

MTransformationMatrix testTMat; // we set 60 60 60 in XYZ order testTMat.setRotation(rotBuild, MTransformationMatrix::kXYZ); testTMat.reorderRotation(rotOrder); // reorder it to XZY double rotFetch[3]; testTMat.getRotation(rotFetch, rotOrder); // fetch out result in XZY // the result should be: // 3.694 // 73.886 // 25.665

}

Fetch Agent Render Information from Miarmy to Your Own Pipeline

Fetch Joint Information

By menu Item

Select any agent, and click Debug Tools > Agent Match, you original agent will align/match to the agent, no

matter cloth or broken joint part, animation or dynamical, the result should be perfect matched.

Click Debug Tools > Agent Return for put your Original Agent to initial pose.

Page 389: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

389 © 2011-2013 Basefount

Match “Original Agent” to “agent”, then you can fetch joints info from Original Agent

By MEL/Python Command

The agent match process can be done by script,

1. Select any one of agents

2. Run “McdAgentMatchCmd -mm 1;” MEL script for matching Original Agent to selected agent

Put the Original Agent back to origin:

1. Run “McdAgentMatchCmd -mm 0;” MEL script for putting all Original Agent to origin and T-Pose

Fetch geometry information

By MEL/Python command

Run “McdGetRenderGeoCmd -rec 0;” MEL command.

The system will return an array which contents are:

<agent name1><geo1><geo2>…<geoN><’#’><agent name2><geo1><geo1><geo2>…<geoN><’#’>…

For example:

# Result: [u'McdAgent1', u'head_Mesh2Shape', u'l_arm_MeshShape', u'l_shoe_MeshShape',

u'r_arm_MeshShape', u'r_shoe_MeshShape', u'l_leg_MeshShape', u'r_leg_MeshShape', u'shorts_Mesh5Shape',

u'shirt_Mesh1Shape', u'#', u'McdAgent2', u'head_Mesh2Shape', u'l_arm_MeshShape', u'l_shoe_MeshShape',

u'r_arm_MeshShape', u'r_shoe_MeshShape', u'capShape', u'l_leg_MeshShape', u'r_leg_MeshShape',

u'shorts_Mesh5Shape', u'tshirt_MeshShape', u'#', u'McdAgent3', u'head_Mesh2Shape', u'l_arm_MeshShape',

u'l_shoe_MeshShape', u'r_arm_MeshShape', u'r_shoe_MeshShape', u'pantsShape', u'tshirt_MeshShape', u'#',

u'McdAgent4', u'head_Mesh2Shape', u'l_arm_MeshShape', u'l_shoe_MeshShape', u'r_arm_MeshShape',

Page 390: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

390 © 2011-2013 Basefount

u'r_shoe_MeshShape', u'capShape', u'pantsShape', u'shirt_Mesh1Shape', u'#', u'McdAgent5',

u'head_Mesh2Shape'

Part 9 Optimization This part is a guide for optimizing and speeding up Miarmy in production.

Crowd simulation sometime is a heavy job, brings much uncomfortable frustration. So, the optimization is very

crucial for ease your job. In this guide, we are going to explain which part is low efficiency and introduce how to

avoid them or take alternative approaches. Also, we provide many useful methods may be faster or better to

achieve your same result. We hope this guild can help you to save a lot of your precious time.

Low Efficiency Channels Optimization

Vision

The vision channels have to parse out which agents in its range firstly and this process is exponential type of

calculation, therefore, in current version of Miarmy, vision channels are not very high efficiency.

There have some situation you may need vision:

2 armies facing together, seek enemies and fight when near

Follow a target agent or object. Avoid an agent or object.

In the first situation, when 2 armies are involved in a battle, there are 2 phases. They are “Rush” and “Fight”

In the rush phase, 2 armies will rush each other, but only the front lines need higher AI for seeking enemies and

fight or collide, the rest of agents just need avoid each other. Checking out the following picture, the agents in

red bound need higher AI for seeking enemies and fight, whereas the agents in blue bound even don’t have

opportunity to fight. So we can use DDIM (Dynamic Decrease Intelligence Mechanism) to block the vision for the

agents in blue bound. It can tremendously accelerate your simulation speed.

Page 391: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

391 © 2011-2013 Basefount

Rush time, disable vision in blue bound

Or we can choose another solution. As the following picture shows, the pink and orange agents in frontlines will

have precise collide and fight logic, and the green and yellow agents just need using sound channels avoid each

other. This solution is better because you we can even simply the actions and Transition Map for lower AI agents.

And simply transition map can save your time.

Rush time, pink and orange is higher AI agents whereas green and yellow agents has lower AI

In “Fight” Phase, the agents are near each other we can just use sound channels for detecting and aiming to

enemy and controlling fight. Here you can bypass the vision channel directly.

Page 392: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

392 © 2011-2013 Basefount

Battle in progressing, can totally disable vision

In the second situation, when the agents are following or avoiding something, we highly recommend make

agents to follow/avoid target using spot or zone. Following/avoiding spot or zone will be much faster than the

solutions with vision channel.

Follow spot by spot channels

Future Solution: We are trying to use CUDA to make the calculation parallel in future, and we are still trying to

using more robust agent filter feature to speed up the vision calculation.

Collide Family Channel & Pre-build RBD Object

All the collide-family channels (like “collide”, “collideAny” and so on) will make the system create pre-build RBD

objects in agent memory because the collide-family channels are based on the PhysX RBD object.

Page 393: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

393 © 2011-2013 Basefount

5000 Agents in Maya by default (1.5 sec per frame calculate, sound + spot follow)

5000 Agents in maya with collide-family channels (about 3 extra seconds for updating kinematic RBD in agent memory);

Yellow boxes are the pre-build RBD display by PhysX Debug Node

Collide Any Channel

The “collideAny” channel will check every bone of current agent, whereas the “collide” channel will only check

the flagged bones. So, if the agent contains 100 bones and 10 of them are flagged, “collideAny” channel will

spend 10 times of time than “collide” channel to calculate result.

Page 394: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

394 © 2011-2013 Basefount

“collideAt” channel has the fastest speed, because it only check one bone.“collideBy” channel has the same

efficiency with the “collide” channel.

Bounding Box Display Sometimes when there are too many agents your scene and the viewport is difficult to orbit, you can switch to

bounding box display.

(Left) bounding box display (right) agent segment display

Solver Space If you make sure the agents in different area or floors will not interactive each other forever, you’d better

separate them in different solver space, it can save lot of time to calculate and easier to management.

If your agents are in different vehicles and the vehicles are moving each other, such like several battleships, you

should group them in different solver space.

Create solver space and put place node inside

Easy Transition Sometimes, using easy transition can same lot time for you.

Pre-vis

Simple shot, agents have each solo action, factory operator, walking crowd, etc…

Agents are far from camera will not been noticed by audience

Optimizing Crowd Dynamics With properly setup, Miarmy is able to support more than 5000 agents enable dynamics at the same time.

Page 395: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

395 © 2011-2013 Basefount

Using Spot or Zone Trigger Dynamic

Sometimes we need use a kinematic object like some cars/rocks to collide crowd agents. We suggest that you

use the zone/spot channels for activating dynamics instead of collide channels. Like the picture below, in the

“car” scenario. The green kinematic primitive is a child of that blue zone geometry plane. We use the “zone.in”

channel trigger dynamics active then the dynamics agents will naturally collide with the moving kinematic

primitive.

Use “zone.in” channel to trigger dynamics

With the same theory, in the “rock” scenario, you need use “spot.d” or “bound.in” for triggering enable

dynamics, and there is a sphere kinematic primitive been a child of bound node.

Use “bound.in” channel to trigger dynamics

Mute Dynamics

On each agent, there is a “muteDynamic” attribute on it. Once we turn this on, the agent will never enable

dynamics and will not join the collision detection, the pre-build RBD object will never been created. In some

cases, using this feature properly, it will save tremendously amount of memory for you as well as speed your

simulation up.

Page 396: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

396 © 2011-2013 Basefount

Mute dynamics for the agent din blue bound and inverse placement

For example, in the above picture, the car (green kinematic primitive) is hitting into the crowd agents. Some

agents (in the yellow bound range) will be enable dynamics and hit away. For improving the reality, we need

check collision for the nearby agents (in the blue bound range) hitting by the coming dynamic agents. If the

agents (in blue bound) hit by dynamic agents, the dynamics will be enabled. As we know, the agents will collide-

family channels will created pre-build RBD Object in memory. However, there are still lots of agent we don’t

want them to become dynamic ones, because they are far from the accident. We want to disable dynamic them

totally forever for saving memory and time. We need select them and enable “mute dynamic” attribute.

However, the attribute changes cannot be saved with scene, if the agents have been deleted and placed out

again, these attribute will change back. So, you need enable “muteDynamics” for these agents first and use

“inverse placement” to store these data to a new place node.

Aggregate Optimization

Aggregate is the latest feature of PhysX, it’s a mechanism can speed up the collision detection tremendously.

The More agents in scene, the more times you save.

In physical simulation, the rag dolls are consisted of a group of rigid bodies and dynamic constrains. The collision

detection in regular circumstance is based on each one of rigid body. Let’s make a very simple example:

There are 2 agents, each one contains 10 bones. If PhysX engine checks collide for them, they will check each

bone whether have collide others bone, so there should be 10 by 10 (divide 2) possible pair of collide need to

Page 397: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

397 © 2011-2013 Basefount

(10 * 10 / 2 = 50 times) check. But sometimes if there are several hundreds of agents, this process needs to be

simplified.

PhysX offer an aggregate mechanism:

Aggregate have 2 main features can speed up for above process:

Grouping for agent level: group all bones of one agent to an aggregate and assign it a bounding box, the

agent is the first level, and the bodies inside are second level. When checking collision, the rigid objects

will test that bounding box in first level, if collide against bounding box, it will go into for checking inner

bodies in second level.

Disable self-collision: all rigid bodies in one aggregate can disable collide each other and just leave the

dynamic constrains control the dynamics

In Miarmy since version 1.5, the aggregate will be default and automatically created when agents enable

dynamics (Notice: only available for the agents have less than 128 bones)

Let’s take a look at the following example:

When then rigid body check collide, it will firstly test the red bounding box then test the inner rigid bodies, the

bounding box is able to fit the size automatically.

The arm in yellow circle will check bounding box and it collide one bonding box, then only check collide with the

bodies in bounding box.

The arm in green circle will only check collide with the bounding box, no further possible collide, just ignore it

Page 398: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

398 © 2011-2013 Basefount

The red bounding boxes are aggregates; it can dynamically fit the size

By default we disable the self-collide in aggregate. You need turn that on if you need it, in Physics Global

Part 10 Expanding Guide This part is Undergoing, to be continued…

Page 399: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

399 © 2011-2013 Basefount

Scripts

Build your own logic Preset

Build your own channel Preset

Build your own automatic original agent setup pipeline

Build your own automatic action creation pipeline

Particle Express for Hybrid Dynamics Effects

Command Line Tasks

Many task of Miarmy can be done in batch mode or command line. That is means we can do our job without

open Maya, and this can save much time and memory of loading Maya editor and drawing OpenGL stuffs etc.

Also these command line task can be assigned to simulation/render farm and let the machines to do that

without human resource.

Command Line (Batch) for Developer

The users know MEL and Python can easily modify/create command line operations for any task run in batch

mode and extend the Miarmy capabilities.

Let us introduce how it works:

1. It need a MEL command which name is the same as the procedure name

The MEL file start the command, the proc name same as file name

2. The McdBatchAgentCache is a wrapper will call McdBatchAgentCacheDoIt python command.

Page 400: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

400 © 2011-2013 Basefount

Initialize the python command in McdInitMiarmy.mel

3. In McdBatchAgentCacheDoIt() python command, we do what we need:

a. Place agent

b. Set to start frame

c. Playback everyframe

d. Do the task (exporting cache, rib, etc…)

4. Please check the script: “McdBatchAgentCacheDoIt.py”

At <Miarmy Directory>\Basefount\Miarmy1.5\maya\scripts

Miarmy Configuration File

In some pipelines, we want some parameters can be setup automatically, such as “cache scale” or some physical

parameter setup. We can use Miarmy Configuration File,

When we click “Miarmy Ready!” at any time, our system will find configuration file and parse it and setup it. The

configuration file should be:

The name must be “McdConfig.txt”

Located at <Miarmy Install Place>/Basefount/Miarmy/maya/plug-ins

The Contents

<node type> <attribute name> < value>

Or you can add some comments at last

<node type> <attribute name> < value> // comment

Please notice there must be BLANK among each part

Page 401: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

401 © 2011-2013 Basefount

Example

McdGlobal hookCustomData 1

McdGlobal enableScale 1

McdGlobal boolMaster[1] 1 // setup abs mode

Auto setup parameter

Include Other Files

We also can include other configure file with “include” keywords, like the following example and the contents

inside is the same as the “McdConfig.txt”

include /opt/miarmyConfig/local_McdGlobal.txt

API

Write your own Field Node

Render Fur

Use Miarmy Engine Drive Maya Character

Get Agent Data

Get brain variable data

Page 402: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

402 © 2011-2013 Basefount

Miarmy Reference

Callback Functions

After Load Miarmy

After loading Miarmy, system will run a script jot which name is “McdInitMiarmy”. If you don’t want to

automatically run this script, you need delete the contents from this file in you Miarmy installation place.

Before Save

Before saving, system will unhide original agent group nodes and all place nodes.

After Save

After saving, if agents have been placed out, system will hide original agent group nodes and all place

nodes.

Selection Change

Update python window for selected relative nodes, for example you are editing decision, and once the

selected object changed, and if new select one is decision node ,the python GUI will be updated.

If your new selected object is agent, system will mark feedback agent to engine and recalculate, then

results will be put to Brain Viewer and Transition Map.

Before Duplicate

If there is any agent, place and road node in your duplicate list, they will be unselected before

duplicating and system will prompt out.

Reserved MEL Command There are some MEL commands which reserved:

Page 403: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

403 © 2011-2013 Basefount

Cloth The cloth feature of the NVIDIA PhysX SDK allows for simulation of items made from cloth, such as flags, clothing,

etc. This is accomplished by providing a mesh that is used to define a set of particles (vertices). The topology of

the mesh allows the SDK to construct constraints between the particles that mimic how cloth can bend and

stretch. In addition, cloth particles can be pinned to shapes and global positions, such as attaching a flag to a

pole.

There are two main types of cloth constraints:

Stretching - applied to maintain distance between each particle that is connected by an edge in a cloth

mesh. The strength of this constraint is assigned using the SDK; specifying a small stretching constraint

Page 404: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

404 © 2011-2013 Basefount

factor allows the particles to move apart more easily and gives the impression of more stretchy cloth,

such as lycra. Specifying a larger constraint factor makes the cloth stiffer, like denim.

Bending - applied to maintain the angle along an edge in a cloth mesh, either by constraining the angle

directly or by constraining the distance between the pair of particles on either side of the edge (see the

diagram below). An example of a material that would use a low bending constraint for simulation is

cotton, while a substance such as paper or cardboard would use a high bending constraint.

Channel Reference List

Input Channels

Sound: see details in Part 5 sound session

sound.x

relative directions to others agent in horizontal

[-180, 180]

sound.y relative directions to others agent in vertical [-180, 180]

sound.d distances between others agent [0, sound]

sound.ox relative orientations to others agents in horizontal

[-180, 180]

sound.oy relative orientations to others agents in vertical

[-180, 180]

sound.f frequencies of agents in sound range [0, inf)

sound.spx Relative speed in x direction of agents in sound range

[0, inf)

sound.spy Relative speed in y direction of agents in sound range

[0, inf)

sound.spz Relative speed in z direction of agents in sound range

[0, inf)

Vision: see details in Part 5 vision session

vision.x

relative directions to others agent in horizontal

[-180, 180]

vision.y relative directions to others agent in vertical [-180, 180]

vision.z distances between other agents (maya unit) [0, inf)

vision.h color ids of agents in vision range [-1, inf)

Road (indexing enable) See details in Part 5 Road

Page 405: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

405 © 2011-2013 Basefount

road.flow angle between agent Z-axis and the flow field [-180, 180]

road.x agent position in the road [-1, 1]

road.ox angle between agent Z-axis and the road [-180, 180]

road[id].flow angle between agent Z-axis and the flow field <id>

[-180, 180]

road[id].x agent position in the road of which index is <id>

[-1, 1]

road[id].ox angle between Z-axis and the road whose index is <id>

[-180, 180]

lean Channels

lean.x

the projection of agent x axis to y axis of agent space

[-1, 1]

lean.y the projection of agent y axis to y axis of agent space

[-1, 1]

lean.z the projection of agent z axis to y axis of agent space

[-1, 1]

Terrain Channel

ground

test the distance to the terrain beanth the agent

(-inf, inf)

ground.dx test the degree between agent's x axis and terrain (tilt left/right)

[-90, 90]

ground.dz test the degree between agent's z axis and terrain (uphill or downhill)

[-90, 90]

<bone>:ground test the distance to the terrain beanth the agent bone which name is <bone>

(-inf, inf)

Geometry Channels

geo.hi:<mesh>

similar as "ground" channel but test polygon mesh

(-inf, inf)

geo.dx:<mesh> similar as "ground.dx" but test polygon mesh [-90, 90]

geo.dz:<mesh> similar as "ground.dz" but test polygon mesh [-90, 90]

Move or Rotate Speed

tx move speed of translate x, per second (-inf, inf)

ty move speed of translate y, per second (-inf, inf)

tz move speed of translate z, per second (-inf, inf)

rx change rate of roate x in degree, per second (-inf, inf)

ry change rate of roate y in degree, per second (-inf, inf)

Page 406: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

406 © 2011-2013 Basefount

rz change rate of roate z in degree, per second (-inf, inf)

Moving speed

speed return the moving speed of agent [0, inf)

bound channels

bound.in whether in bound (-inf, 1]

bound[<id>].in whether in bound which id is <id> (-inf, 1]

Spot channels

spot.d the distances to the all spots [0, +inf)

spot.x the horizongtal degree related to all spots (-180, 180)

spot.y the verticle degree related to all spots (-180, 180)

spot[<id>].d the distances to the all spots which id are <id> (-inf, inf)

spot[<id>].x the horizongtal degree related to all spots which id are <id>

(-inf, inf)

spot[<id>].y the verticle degree related to all spots which id are <id>

(-inf, inf)

Zone (indexing enable)

zone.x

relative positions represented by angle in horizontal

[-180, 180]

zone.y relative positions represented by angle in vertical

[-180, 180]

zone.in whether in area of zone 0 or 1

zone.hi height relative with zone (-inf, inf)

zone.d3d distances from agent to closest points [0, inf)

zone.d (or .d2d) distances from agent to closest points in XZ plane

[0, inf)

zone[id].x same as zone.x, only can feel zone whose index is <id>

[-180, 180]

zone[id].y same as zone.y, only can feel zone whose index is <id>

[-180, 180]

zone[id].in same as zone.in, only can feel zone whose index is <id>

0 or 1

zone[id].hi same as zong.hi, only can feel zone whose index is <id>

(-inf, inf)

zone[id].d3d same as zone.d3d, only can feel zone whose index is <id>

[0, inf)

Page 407: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

407 © 2011-2013 Basefount

zone[id].d (or .d2d) same as zone.d, only can feel zone whose index is <id>

[0, inf)

Follow Master

master.d the distance to the target point [0, +inf)

master.x the horizontal degree related to target point [-180, 180]

master.y the vertical degree related to target point [-180, 180]

Formation Target Point

ftp.d the distance to the master [0, +inf)

ftp.x the horizontal degree related to master

[-180, 180]

ftp.y the vertical degree related to master

[-180, 180]

Wind (work with composition of force field)

wind.ox

orientaion relative with composition of wind in horizontal space

[-180, 180]

wind.oy orientaion relative with composition of wind in vertical space

[-180, 180]

wind.a amplitude of composition of wind [0, inf)

Maya Field (work with composition of force field)

field.ox

orientaion relative with composition of fluid field in horizontal space

[-180, 180]

field.oy orientaion relative with composition of fluid field in vertical space

[-180, 180]

field.a amplitude of composition of fluid field [0, inf)

Maya fluid (work with composition of force field)

fluid.a amplitude of composition of fluid field

fluid.ox orientaion relative with composition of fluid field in horizontal space

[-180, 180]

fluid.oy orientaion relative with composition of fluid field in vertical space

[-180, 180]

MEL/Python Script

maya.mel:<mel cmd> run and test result of MEL command (-inf, +inf)

Page 408: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

408 © 2011-2013 Basefount

maya.py:<python cmd> run and test result of Python command (-inf, +inf)

Collision Detection

riCollide

check collide for flagged bone (reserve info if collide)

0 or 1

riCollideAt:<bone> check collide for bone whose name is <bone> (reserve info if collide)

0 or 1

riCollideBy:<bone> check whether the flagged bones collide by bone whose name is <bone> (reserve info if collide)

0 or 1

collide check collide for flagged bone 0 or 1

collideAt:<bone> check collide for bone whose name is <bone> 0 or 1

collideBy:<bone> check whether the flagged bones collide by bone whose name is <bone>

0 or 1

RBD Emitter

rbdCollide check RBD emitter emited object contact agent body

0 or 1

Noise

noise.id

return a random number based on the id of agent

(0, 1)

noise.id(<seed>) return a random number based on the id of agent, random again by seed

(0, 1)

noise.g gradiently change a noise value (0, 1)

noise.g(<seed>) gradiently change a noise value (0, 1)

noise.time return a random number based on the time (0, 1)

noise.time(<seed>) return a random number based on the time and random again by seed

(0, 1)

noise.time(<seed>, <frequence>) return a random number based on the time and random again by seed and frequency

(0, 1)

noise_agent.time return a random number based on the time and agent id

(0, 1)

noise_agent.time(<seed>) return a random number based on the time and agent id , then random again by seed

(0, 1)

noise_agent.time(<seed>, <frequence>) return a random number based on the time and agent id , then random again by seed and frequency

(0, 1)

Sine Function

sin_all() return sine result based on time range [-1, 1]

Page 409: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

409 © 2011-2013 Basefount

sin_all(<freq>)

return sine result based on time range, use <freq> control the cycle period

[-1, 1]

sin_agent()

return sine result based on time range, offset random sine phase by agent id

[-1, 1]

sin_agent(<freq>)

return sine result based on time range, offset random sine phase by agent id, <freq> change period

[-1, 1]

Timer Channels

timer from 0 increase by second, and return 0 if reach 1

(0, 1)

timer(<sd>) from 0.x increase by second, and return 0 if reach 1

(0, 1)

timer(<sd>, <freq>) from 0.x increase by <freq> * second, and return 0 if reach 1

(0, 1)

timer.bf from 0 increase by second, when reach to 1, decrease by second. Back and forth

(0, 1)

timer.bf(<sd>) from 0.x increase by second, when reach to 1, decrease by second. Back and forth

(0, 1)

timer.bf(<sd>, <freq>) from 0.x increase by second * <freq>, when reach to 1, decrease by second. Back and forth

(0, 1)

timer_agent same as timer, random start value by agent id (0, 1)

timer_agent(<sd>) same as timer(<sd>), random start value by agent id

(0, 1)

timer_agent(<sd>, <freq>) same as timer(<sd>, <freq>), random start value by agent id

(0, 1)

timer_agent.bf same as timer.bf, random start value by agent id

(0, 1)

timer_agent.bf(<sd>) same as timer.bf(<sd>), random start value by agent id

(0, 1)

timer_agent.bf(<sd>, <freq>) same as timer.bf(<sd>, <freq>), random start value by agent id

(0, 1)

id

id.agent return agent id [0, +inf)

id.type return agent type id [0, +inf)

id.place return place node id which place this agent [0, +inf)

id.inPlace return agent id in place node [0, +inf)

Self-Variable

hp get hp value from agent memory (-inf, inf)

Page 410: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

410 © 2011-2013 Basefount

mp get hp value from agent memory (-inf, inf)

Scene Info

frame get current frame [0, inf)

goFrame get frame number since simulation start [0, inf)

Action

<actionName>

return true if the current playback action is <actionName>

0 or 1

actionGroup:<Group> return true if the current playback action belongs to action group <Group>

0 or 1

Traffic Channels

traffic.x

the distance from the internal path of crossroad

[0, +inf)

traffic.ox the degree ralated to internal path of crossroad

(-180, 180)

traffic.green whether meet green light in crossroad light zone

0 or 1

traffic.enter whether enter of exit the crossroad 0 or 1

Output Channels

Sound sound.f set the frequency of agent sound

sound.a set the range of agent sound

Vision color set color of agent (if -1, others cannnot see it)

Move or Rotate Speed

tx move speed of translate x, per second (-inf, inf)

ty move speed of translate y, per second (-inf, inf)

tz move speed of translate z, per second (-inf, inf)

rx change rate of roate x in degree, per second (-inf, inf)

ry change rate of roate y in degree, per second (-inf, inf)

rz change rate of roate z in degree, per second (-inf, inf)

Aiming

Page 411: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

411 © 2011-2013 Basefount

<bone>:aim<axis><upVector><space>(<percent>)-><target>

percent aim to target, see aiming session (0, 1)

<bone>:aim<axis><upVector><space>-><target> 100% aim to target, see aiming session (0, 1)

Self-Variable

hp

set hp value or hp change rate (in change rate mode)

(-inf, inf)

mp set mp value or mp change rate (in change rate mode)

(-inf, inf)

hp.set set hp value (in both mode) (-inf, inf)

mp.set set mp value (in both mode) (-inf, inf)

DDIM 1.0 (Dynamically Decrease Intelligence Mechanism 1.0)

vision.mute

disable vision for itself and also let others cannot see this agent

[1]

sound.mute disable sound for itself and also let others cannot feel this agent by sound

[1]

Ragdoll

dynamics.active enable full body ragdoll [1]

dynamics.active.force enable full body ragdoll and apply a pulse force from collide reserved info

[0, inf)

bodyDynamics.active enable body dynamics with root bone kinematic control

[1]

<boneName>:dynamics.active enable dynamic from boneName [1]

<boneName>:dynamics.detach enable dynamic from boneName and break joint

[1]

Action

<actionName> trigger actioin [0, inf)

<actionName>:rate modify action rate if this action playing back [0, inf)

*:rate modify all action rate in scene playback speed rate

[0, 1]

actionGroup:<group> trigger one of action in action group <grou> randomly

[0, 1]

actionGroupSelect:<group> select one in action group <group>, and playback selected one all the time, play cycle

[0, 1]

Page 412: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

412 © 2011-2013 Basefount

actionGroupRate:<group> change the playback speed rate for all actions in action group <group>

[0, inf)

actionBlend

blend-><actionName>

Blend <actionName> to the linked actioin in Transition Map

[0, inf)

blend->blendGroup:<group> Blend each action which belongs to <group> to each linked action in Transition Map

[0, inf)

Bone Offset

<boneName>:tx set the translate X in bone offset (-inf, inf)

<boneName>:ty set the translate Y in bone offset (-inf, inf)

<boneName>:tz set the translate Z in bone offset (-inf, inf)

<boneName>:rx set the rotate X in bone offset (-inf, inf)

<boneName>:ry set the rotate Y in bone offset (-inf, inf)

<boneName>:rz set the rotate Z in bone offset (-inf, inf)

MEL/Python Script

maya.mel:<mel cmd> run MEL command [0, +inf)

maya.py:<python cmd> run Python command [0, +inf)

Action Pair Sync

tell tell other what action this agent perform [0, +inf)

hear hear and perform the sync action [0, +inf)

tell:<channel> tell other what action this agent perform, channle is X

[0, +inf)

hear:<channel> hear and perform the sync action, only can hear agent channel is X

[0, +inf)

parenting

parent:<object>

parent agent to the object which name is <object>

0 or 1

parent:0 parent agent to the world space 0 or 1

IK Channels

<boneName>:ik.xOffset move the ik end effector <boneName> along x axis by offset

(-inf, inf)

<boneName>:ik.yOffset move the ik end effector <boneName> along y axis by offset

(-inf, inf)

Page 413: Miarmy Manual 2.5.v1

Miarmy 2.5 Manual

413 © 2011-2013 Basefount

<boneName>:ik.zOffset move the ik end effector <boneName> along z axis by offset

(-inf, inf)

<boneName>:ik.tx set the ik end effector on <boneName> translate X to a value

(-inf, inf)

<boneName>:ik.ty set the ik end effector on <boneName> translate Y to a value

(-inf, inf)

<boneName>:ik.tz set the ik end effector on <boneName> translate Z to a value

(-inf, inf)