What is PARC?
PARC is a self-consuming self-correcting generative model framework that trains both a kinematic motion generation model and a physics-based tracking controller while generating spatial, temporal, and functional variations of motions in the initial dataset. The framework was introduced in SIGGRAPH 2025 for terrain-traversal motions, but the architecture is designed to be applicable to different motion synthesis tasks.Core Architecture
PARC combines three key components that work in an iterative loop:1. Motion Diffusion Model (MDM)
A transformer-based diffusion model that generates kinematic motion sequences conditioned on:- Local heightmap observations - terrain geometry around the character
- Target direction - desired movement direction
- Previous motion states - for temporal coherence
- Transformer encoder architecture with self-attention
- Denoising diffusion probabilistic model (DDPM)
- DDIM sampling for faster inference
- Heightfield conditioning via CNN encoder
The MDM uses a predict-x0 formulation, predicting the clean motion directly rather than predicting noise.
2. Motion Tracking Controller
A PPO-based reinforcement learning agent that learns to track reference motions in physics simulation:- Environment: Isaac Gym GPU-accelerated physics
- Algorithm: Proximal Policy Optimization (PPO)
- Architecture: DeepMimic-based tracking rewards
- Observation space: Character state + reference motion + terrain heightmap
- Parallel training across thousands of environments
- Adaptive motion weighting based on tracking difficulty
- Early termination on tracking failure
3. Procedural Motion Generation
Connects the MDM and controller by generating diverse motion variations:- Terrain generation - random boxes, stairs, paths
- Path planning - A* pathfinding on terrain graphs
- Autoregressive generation - MDM generates motions along paths
- Kinematic optimization - refines motions for trackability
- Heuristic filtering - selects high-quality candidates
Data Flow
Motions in PARC are represented with:- Root position (3D) and root rotation (quaternion)
- Joint rotations (quaternions per joint)
- Contact labels (binary per body part)
- Terrain heightfields (2D grids)
All motion data uses quaternions internally for rotations, which are converted to other representations (exp map, 6D rotation) for specific model inputs.
Training Paradigm
PARC follows a self-improving loop:- Bootstrap - Start with a small dataset of reference motions
- Generate - MDM creates diverse kinematic variations
- Track - Controller learns to track generated motions
- Record - Successfully tracked motions are physically validated
- Augment - Physical motions added back to training dataset
- Repeat - Next iteration with expanded dataset
- Expands motion diversity (spatial/temporal variations)
- Improves motion quality (physics-validated)
- Increases dataset size (more training data)
Key Implementation Details
Motion Library (PARC/anim/motion_lib.py)
- Frame-based motion representation
- Efficient batched sampling
- Support for looping and non-looping motions
- Forward kinematics computation
PARC/anim/kin_char_model.py)
- XML-based character definition
- Forward kinematics (FK) for pose computation
- DOF to quaternion conversion
- Body part hierarchy
- Weights & Biases integration for logging
- Checkpoint saving at configurable intervals
- EMA (Exponential Moving Average) for model weights
- Adaptive learning rate schedules
Configuration System
PARC uses YAML configuration files for all components:- Motion diffusion model config
- Tracking controller config
- Procedural generation config
- Dataset creation config
parc_0_setup_iter.py script automatically generates all required configs for a PARC iteration.
Next Steps
PARC Loop
Learn about the 4-stage iterative training process
Motion Diffusion
Deep dive into the MDM architecture
Motion Tracking
Understand the physics-based controller
Data Format
Learn the motion file format specification