Overview
Theparc_2_kin_gen.py script generates new terrain-traversal motions using the trained Motion Diffusion Model. It creates procedural terrains, plans paths, generates candidate motions, applies kinematic selection heuristics, and optimizes the results.
Purpose
This is Stage 2 of the PARC pipeline. It:- Generates procedural terrains (boxes, paths, stairs, or from files)
- Plans traversal paths using A* pathfinding
- Generates motion candidates autoregressively along paths
- Filters motions based on contact and penetration losses
- Applies kinematic optimization to refine motions
- Removes hesitation frames
- Saves both original and mirrored versions of motions
Usage
Basic Command
Default Configuration
Command-Line Arguments
| Argument | Required | Description |
|---|---|---|
--config | No | Path to the kinematic generation configuration YAML file |
Key Configuration Parameters
Generation Settings
mdm_model_path: Path to trained MDM model checkpoint directorynum_new_motions: Total number of motions to generatemotion_id_offset: Starting ID for numbering generated motionssave_name: Base name for saved motion filesoutput_dir: Directory for saving raw generated motions
Procedural Terrain Settings
procgen_mode: Terrain generation mode: “BOXES”, “PATHS”, “STAIRS”, or “FILE”new_terrain_dim_x: Terrain width in grid cellsnew_terrain_dim_y: Terrain length in grid cellsdx: Grid cell size in x-direction (meters)dy: Grid cell size in y-direction (meters)simplify_terrain: Boolean flag to apply terrain simplificationfirst_heading_mode: Character start heading: “auto” or “random”
Terrain Type Configurations
BOXES Mode
PATHS Mode
STAIRS Mode
FILE Mode
input_terrain_path: Path to pickle or YAML file containing pre-made terrains
Motion Quality Filters
max_contact_loss: Maximum allowed contact loss for valid motionsmax_pen_loss: Maximum allowed penetration lossmax_total_loss: Maximum allowed total loss
Path Planning (A* Settings)
MDM Path Generation Settings
Optimization Settings
use_opt: Boolean flag to enable kinematic optimizationremove_hesitation: Boolean flag to remove hesitation framesonly_gen: Boolean flag to only generate terrains without motions (for debugging)
Optimization Parameters (when use_opt: true)
Generation Pipeline
For each motion to generate:- Generate Terrain: Create procedural terrain based on
procgen_mode - Plan Path: Use A* to find traversal path on terrain
- Generate Candidates: Use MDM to generate
mdm_batch_sizecandidate motions - Filter by Quality: Keep motions below loss thresholds
- Select Top K: Choose the
top_kbest motions - Optimize: Apply kinematic optimization (if enabled)
- Post-process: Remove hesitation frames (if enabled)
- Save: Save optimized motion and flipped version with terrain data
Example Configuration
Output Files
For each generated motion batch:.pkl file contains:
- Motion frames (root position, rotation, joint rotations, contacts)
- Terrain heightfield data
- Path nodes
- Heightfield mask indices
- Loss values and metadata
Parallel Batch Execution
Theparc_0_setup_iter.py script generates multiple config files for parallel execution:
Implementation Details
Key Modules
parc/motion_synthesis/procgen/astar.py: A* pathfinding on terrain graphsparc/motion_synthesis/procgen/mdm_path.py: Autoregressive motion generation along pathsparc/motion_synthesis/motion_opt/motion_optimization.py: Kinematic optimizationparc/util/terrain_util.py: Terrain generation and manipulationparc/util/motion_edit_lib.py: Motion editing utilities (hesitation removal, flipping)
Usage in PARC Pipeline
Location
scripts/parc_2_kin_gen.py