Crowds
General
-
Foot locking set-up should be done in the agent prep node. For the terrain adaptation to work. Also when you want to isolate some ragdoll to only some parts
-
Crowd agents are packed primitivs
-
Crowd source have an initial velocity. that's why they are moving even at rest state.
-
Clip on SOP level. State on DOP level.
-
Terrain adaption can be within the Crowd Solver or through the Adapt To Terrain
-
Agent Clip
can contain several motion fbx files -
Agent > Agent Clip > Agent Layer > Agent Prep > Collission Layer > Agent Cache > Configure Joints > Crowd Source
-
Agent Prep
is for the foot plant set-up -
Houdini includes several useful POP forces created to work with crowds. Nodes of this types have names starting with “POP Steer”.
-
Crowd Source Node: Randomzie Initial Velocity is better than Ranomize Initial Heading
-
Agent Clip Properties: To make in place animation.
-
Change State
-
Don't ever use initial velocity. Just use the locomation to translate the character.
-
Grouping of States doesn't seem to work.
-
Gait Speed Paramter is only useful if you are not using locomotion
-
Agent Transform Group
-
Agent Edit
helps on previewing the current agent clip and agent layer. -
Agent Clip Properties
edits general parameters of the clip like loop range. -
Agent Clip Transitions
-
Adding Metadata
-
building an automatic ball control.
- inherent in agent terrain.
-
Need to Set the Start and End of the Clip. Otherwise it won't loop. So much for locomotion!
-
intrinsic: pointinstance transfrom set to 1 by default on agent primitives,.
Rag Doll
- can add pop forces in the ragdoll solver. ragdoll also has motor options to have art direct rag doll
Terrain Obstacle
Workflow
- Building Character
- Creating Crowd
- Set Your Blendshapes
- Setting Transitions
- Corrective Shapes
using crowd system to blend the agent mocap transition.
// setting i@trigger to 1 will enable
// setting i@trigger to 0 will disable
i@trigger = -1;
string handle_path = "op:/obj/geo1/dopnet1:crowdobject1/Geometry";
float clip_len = agentcliplength(handle_path, @id, "standing_up_01");
if ((f[]@cliptimes[0]/clip_len) > 0.65) i@trigger = 1;