MotionPersona: Real-Time Locomotion Control across Personas, Bodies, and Styles
Organizations: The University of Hong Kong, Hong Kong · Shandong University, China · Hong Kong University of Science and Technology, Hong Kong · Adobe Research, UK · TransGP, Hong Kong
Abstract
We present MotionPersona, a generative framework for character-aware locomotion control, in which the motion for a command depends on the captured persona, the body shape, and the character's style. Unlike style, which one performer can vary at will, persona and body shape are coupled in capture: each performer is observed in only one body. The captured data therefore cannot uniquely determine which motion characteristics should follow the persona and which should change with the body, leaving unseen persona-body combinations unconstrained. We capture 48 performers, aged 5 to 68, under the same nine styles and seven commands, 44 of them with persona annotation. From this repeated-measures design, we identify two robust associations between body shape and gait. These measurements guide a cross-body specification of which characteristics should change and which should be preserved. We implement this specification through a physically informed retargeting pipeline, producing cross-body training data while penalizing penetration and foot skating. On this data we train a single generative controller. A shape-aware VAE compresses each motion block into a few latent tokens and renders them on a conditioned target body under explicit geometric supervision; over these tokens, a latent flow-matching prior generates persona- and style-conditioned motion in two sampling steps. The controller covers all captured personas, a wide family of SMPL-X target bodies, and nine styles in one model, and runs at 27 ms per block on two threads of a laptop CPU. We verify the framework at every stage, following the same gait descriptors from captured to retargeted to generated motion and sweeping each axis in isolation. To our knowledge, this is the first real-time locomotion controller that carries part of a captured persona's performer-specific variation across independently selected body shapes and styles.
Figures & tables
| Capture | Assigned | MotionBuilder | Ours | Sign | |
| Forward lean, ∘ | 2.0 | 1.4 | 0.0 | 1.9 | 0.92 |
| Side lean, ∘ | 0.4 | 0.6 | 0.0 | 0.6 | 0.79 |
| Hand distance | 0.23 | – | 0.00 | 0.03 | 0.54 |
| Cadence (preservation target), Hz | 0.23 | – | 0.00 | 0.02 | 0.54 |
| Penetration, % of frames | 8.9 | 0 | 8.2 | 0.0 | – |
| Lowest toe, cm | – |
| Condition | Form | Enters | Drop |
|---|---|---|---|
| History | last 5 frames | decoder | – |
| 1 token, codec encoder | prior | 15% | |
| Trajectory | 45 positions, 45 facings | prior | – |
| Persona ID | 44-way learned embedding | prior | – |
| Attributes | three typed embeddings | prior | – |
| Style | label embedding | prior | – |
| Step | ms |
|---|---|
| Featurization of the history and the trajectory | 0.3 |
| History encoder, one token | 1.1 |
| Prior, two Euler steps | 13.7 |
| Decoder, per-frame queries and temporal head | 5.6 |
| Block, M3 Max CPU, two threads | 26.5 |
| Block, RTX 5080 GPU | 9.9 |
| Quality | Control | Spread kept | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Test set | FPD pose | FPD contact | Jerk | Skate | IoU | Pen. % | Seam | Rec. | Style | Dyn. | Amp. | |
| MotionPersona-X (data) | own body | – | 0.83 | 0.51 | 0.34 | 0.57 | 0.5 | – | 0.889 | 0.80 | 1.00 | 1.00 |
| CAMDM ( Chen et al., 2024 ) | own body | 0.30 | 1.90 | 0.65 | 0.60 | 0.49 | 49.0 | 3.52 | 0.323 | 0.32 | 0.43 | 0.55 |
| cross-body, seen | 0.28 | 3.28 | 0.51 | 0.53 | 0.50 | 21.8 | 3.10 | 0.257 | 0.51 | |||
| cross-body, withheld | 0.27 | 3.25 | 0.51 | 0.53 | 0.51 | 21.8 | 3.10 | 0.255 | 0.42 | |||
| held-out bodies | 0.28 | 3.42 | 0.51 | 0.53 | 0.50 | 23.9 | 3.11 | 0.256 | 0.40 | |||
| Lean slope | Preserved slope | Other bodies | |||||
| fwd | side | cadence | step | Pen. % | Pres. | Rec. | |
| target | 150 | 65 | 0 | 0 | 0 | 0 | |
| MotionPersona-X (data) | 150 | 65 | 0.3 | – | – | ||
| Codec reconstruction | 155 | 55 | 0.5 | – | – | ||
| Captured grid | 22 | 60.9 | 0.25 | 0.235 | |||
| Geometric copies | 6 | 0.0 | 0.97 | 0.341 | |||
| FPD | ms | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Backbone | pose | contact | Pen. % | Skate | IoU | Style | Spread | GPU | CPU |
| Data | – | 0.83 | 0.5 | 0.34 | 0.57 | 0.80 | 1.00 | – | – |
| FM pose, 2 steps | 1.74 | 288 | 2.2 | – | 0.00 | 0.52 | – | 6.2 | 44 |
| DDPM pose, 4 steps | 0.28 | 1.90 | 18.9 | 0.57 | 0.49 | 0.37 | 0.61 | 9.9 | 87 |
| FM token, 2 steps | 0.32 | 1.70 | 1.0 | 0.49 | 0.54 | 0.74 | 0.70 | 9.9 | 27 |
| Criterion | Ours | CAMDM |
|---|---|---|
| Realism of the motion | 3.97 | 3.22 |
| Match to the persona | 4.17 | 2.59 |
| Match to the style | 3.91 | 3.82 |
| Body-shape artifacts | 1.26 | 2.17 |
| Responsiveness | 3.71 | 3.31 |
| Follows the command | 4.12 | 3.79 |
| Reconstruction | Rollout | ||||||
|---|---|---|---|---|---|---|---|
| Codec | IoU | Lean 1 | Skate | IoU | Seam | Pen. % | Lean 1 |
| Reference | 1.00 | 1.03 | 0.49 | 0.54 | 3.45 | 1.0 | 0.70 |
| No in the decoder | 1.00 | 0.99 | 0.55 | 0.35 | 3.46 | 42.0 | 0.61 |
| No boundary frames | 1.00 | 1.02 | 0.62 | 0.53 | 3.81 | 0.9 | 1.17 |
| FPD | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Prior | pose | contact | Skate | IoU | Track. | Rec. | Style | Spread | Lean 1 |
| Reference | 0.32 | 1.70 | 0.49 | 0.54 | 5.5 | 0.632 | 0.74 | 0.70 | 0.70 |
| Dropout 0 | 0.29 | 2.23 | 0.53 | 0.48 | 2.9 | 0.494 | 0.73 | 0.66 | 1.28 |
| No shape token | 0.33 | 1.90 | 0.65 | 0.48 | 7.8 | 0.629 | 0.73 | 0.76 | 0.61 |
| No persona | 0.48 | 2.24 | 0.52 | 0.51 | 5.9 | 0.318 | 0.53 | 0.19 | 1.00 |
| ID only | 0.32 | 1.70 | 0.49 | 0.54 | 5.4 | 0.644 | 0.66 | 0.69 | 0.82 |
Appendix figures & tables20 assets
Supplementary material from the paper’s appendix.
Appendix
| Performer profile and source body | Style | Command | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Take name | Age | Gender | Height (cm) | Weight (kg) | Beta | Role | Affiliation | Dominance | Label | Group | Base movement |
| s001_angry_fw | 5 | M | 112 | 17 | [-5.68, 1.26, …] | Child | Reserved | Compliant | Angry | Affective | forward walking |
| s015_neutral_bw | 22 | F | 165 | 47 | [0.96, 0.27, …] | Student | Sociable | Assertive | Neutral | Affective | backward walking |
| s032_twofootjump_fr | 23 | M | 189 | 80 | [1.44, -1.35, …] | Athlete | Gregarious | Dominant | Two-foot jump | Locomotion variant | forward running |
| Locomotion coverage | Performers | Scale and annotation | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Dataset | Accessible | Forward | Backward | Sideways | Fingers | #Perf. | Age | Height | Weight | Text | #Seq | Hours | SMPL |
| Edinburgh ( 2017 ) | ✓ | ✓ | ✓ | ✓ | ✗ | – | ✗ | ✗ | ✗ | ✗ | 80 | 1 | ✗ |
| LAFAN1 ( 2020 ) | ✓ | ✓ | ✓ | ✓ | ✗ | 5 | ✗ | ✗ | ✗ | ✗ | 77 | 4.6 | ✗ |
| BFA ( 2020b ) | ✓ | ✓ | ✗ | ✗ | ✗ | 1 | ✗ | ✗ | ✗ | ✗ | 33 | 1.5 | ✗ |
| 100STYLE ( 2022 ) | ✓ | ✓ | ✓ | ✓ | ✗ | 1 | ✗ | ✗ | ✗ | ✗ | 810 | 18.75 | ✗ |
| Multi-sub ( 2024 ) | ✗ | ✓ | ✓ | ✗ | ✗ | 12 | ✗ | 154–195 | ✗ | ✗ | – | 4 | ✗ |
| Performer | Ang | Big | Dep | Dru | Fea | Hap | Neu | Swi | Jmp | Sum | Performer | Ang | Big | Dep | Dru | Fea | Hap | Neu | Swi | Jmp | Sum |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| P01 | 6 | 6 | 6 | 7 | 6 | 6 | 6 | 6 | 6 | 55 | P23 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 0 | 48 |
| P02 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 63 | P24 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 63 |
| P03 | 6 | 4 | 5 | 3 | 3 | 1 | 7 | 1 | 5 | 35 | P25 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 63 |
| P04 | 7 | 7 | 7 | 7 | 7 | 7 | 6 | 7 | 7 | 62 | P26 | 7 | 7 | 7 | 7 | 7 | 7 | 6 | 7 | 7 | 62 |
| P05 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 63 | P27 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 63 |
| P06 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 63 | P28 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 63 |
| Group | Descriptor | Definition and estimator | Unit |
| Timing | Cadence | Steps per second, , where the stride period is the first autocorrelation peak of each ankle’s height; the median over 10-second sliding windows | steps/s |
| Cadence (events) † | Number of contact onsets of both feet divided by the duration; kept only as a check, since it undercounts steps | steps/s | |
| Contact ratio | Fraction of frames in which a foot is in contact; contact starts when the ankle or toe is lower than and ends when both are higher than | fraction | |
| Contact ratio (labels) † | The same from the stored contact labels (foot speed below a threshold and height at most 3 cm), which miss most stance frames in running | fraction | |
| Double support | Fraction of frames with both feet in contact | fraction | |
| Step regularity | Coefficient of variation of the step intervals (higher is less regular) | – |
| Descriptor | Style | Command | Performer | Interaction | Residual | Noise | Reliability |
|---|---|---|---|---|---|---|---|
| Speed | 0.02 | 0.21 | 0.52 | 0.10 | 0.16 | 0.09 | 0.86–0.93 |
| Jerk | 0.03 | 0.13 | 0.51 | 0.20 | 0.14 | 0.02 | 0.76–0.96 |
| Sway | 0.02 | 0.21 | 0.47 | 0.11 | 0.20 | 0.09 | 0.86–0.87 |
| Contact ratio | 0.10 | 0.28 | 0.33 | 0.09 | 0.20 | 0.09 | 0.87–0.92 |
| Forward lean | 0.25 | 0.02 | 0.25 | 0.36 | 0.13 | 0.04 | 0.73–0.94 |
| Cadence | 0.04 | 0.16 | 0.21 | 0.18 | 0.42 | 0.02 | 0.73–0.74 |
| Order A: style first | Order B: performer first | Noise floor | Split-half reliability | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Descriptor | Style | Command | Performer | Interaction | Residual | Performer | Command | Style | Raw | Robust | Styles | Walk/run |
| Cadence | 0.04 | 0.16 | 0.21 | 0.18 | 0.42 | 0.21 | 0.16 | 0.04 | 0.65 | 0.02 | 0.73 | 0.74 |
| Cadence (events) † | 0.04 | 0.27 | 0.30 | 0.12 | 0.27 | 0.30 | 0.27 | 0.04 | 0.22 | 0.11 | 0.81 | 0.88 |
| Speed | 0.02 | 0.21 | 0.52 | 0.10 | 0.16 | 0.52 | 0.20 | 0.03 | 0.24 | 0.09 | 0.86 | 0.93 |
| Step length | 0.16 | 0.15 | 0.27 | 0.12 | 0.30 | 0.27 | 0.14 | 0.17 | 0.54 | 0.12 | 0.90 | 0.87 |
| Contact ratio | 0.10 | 0.28 | 0.33 | 0.09 | 0.20 | 0.33 | 0.28 | 0.09 | 0.24 | 0.09 | 0.92 | 0.87 |
| Body, all 44 | Body, 39 adults | Body, nested | Attributes | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Descriptor | Full | Compact | Full | Compact | All | Adults | Strongest adult correlate ( ) | All | Adults | Body residual |
| Cadence | 0.03 | 0.17 | 0.00 | 0.08 | 0.12 | 0.03 | arm/leg ( 0.20) | 0.01 | 0.02 | 0.12 |
| Cadence (events) † | 0.08 | 0.11 | 0.04 | 0.02 | – | – | BMI ( 0.32) | 0.08 | 0.09 | 0.07 |
| Speed | 0.30 | 0.23 | 0.06 | 0.04 | 0.13 | 0.07 | arm/leg ( 0.25) | 0.02 | 0.07 | 0.06 |
| Step length | 0.29 | 0.27 | 0.24 | 0.20 | 0.32 | 0.22 | BMI ( 0.33) | 0.00 | 0.09 | 0.11 |
| Contact ratio | 0.07 | 0.07 | 0.12 | 0.08 | 0.16 | 0.07 | arm/leg ( 0.33) | 0.22 | 0.23 | 0.21 |
| Leave-one-out | Correlation of the pair | ||||||
|---|---|---|---|---|---|---|---|
| Descriptor | Body pair | Pair | Age | Pair + age | Pair, under 53 | Raw | after age |
| Speed | height, BMI | 0.07 | 0.30 | 0.27 | 0.10 | 0.24, 0.21 | 0.05, 0.02 |
| Step length | height, BMI | 0.26 | 0.37 | 0.38 | 0.07 | 0.32, 0.33 | 0.14, 0.12 |
| Foot clearance | height, weight | 0.16 | 0.20 | 0.20 | 0.03 | 0.21, 0.14 | 0.05, 0.12 |
| Pelvis bob | height, arm/leg | 0.13 | 0.23 | 0.29 | 0.02 | 0.29, 0.50 | 0.12, 0.43 |
| Pelvis sway | height, BMI | 0.06 | 0.19 | 0.15 | 0.09 | 0.24, 0.19 | 0.08, 0.00 |
| Role / affiliation / dominance | Performers | Pairs |
|---|---|---|
| Athlete/sociable/assertive | P12 (189/0.88), P22 (180/0.85), P38 (168/0.74) | 3 |
| Professional/moderate/dominant | P34 (160/0.79), P39 (160/0.72) | 1 |
| Retiree/moderate/compliant | P01 (159/0.74), P33 (173/0.73) | 1 |
| Student/gregarious/assertive | P15 (182/0.85), P32 (175/0.75) | 1 |
| Student/reserved/moderate | P28 (160/0.69), P29 (163/0.73), P36 (171/0.80) | 3 |
| Student/withdrawn/submissive | P03 (165/0.73), P16 (179/0.80), P31 (164/0.72) | 3 |
| Descriptor | Body measure | Pairs | Adult slope | Paired slope | 95% interval | Agree | ||
|---|---|---|---|---|---|---|---|---|
| Forward lean | hip w. | 12 | 226 | 131 | [ 41.3, 249] | 0.67 | 0.71 | 0.01 |
| Forward lean | BMI | 12 | 0.48 | 0.177 | [ 0.0592, 0.612] | 0.58 | 0.59 | 0.04 |
| Forward lean | weight | 12 | 0.0966 | 0.0721 | [ 0.00871, 0.193] | 0.67 | 0.72 | 0.01 |
| Step length | BMI | 12 | 0.00855 | 0.00161 | [ 0.00598, 0.00883] | 0.50 | 0.06 | 0.85 |
| Step length | weight | 12 | 0.000453 | 0.000497 | [ 0.00114, 0.002] | 0.58 | 0.13 | 0.68 |
| Knee range | BMI | 12 | 0.679 | 0.117 | [ 1.52, 0.686] | 0.50 | 0.29 | 0.35 |
| Age, 39 adults | 53 and over | |||||||
|---|---|---|---|---|---|---|---|---|
| Descriptor | +20 years | Flag | Under 53 | |||||
| Cadence | 0.20 | 0.07 | 0.34 | 0.102 | 0.41 | 0.27 | 0.07 | 0.08 |
| Speed | 0.61 | 0.30 | 0.00 | 0.192 | 1.54 | 0.00 | 0.23 | 0.00 |
| Step length | 0.65 | 0.37 | 0.00 | 0.0687 | 1.78 | 0.00 | 0.30 | 0.03 |
| Contact ratio | 0.22 | 0.10 | 0.62 | 0.0235 | 0.57 | 0.46 | – | – |
| Double support | 0.35 | 0.00 | 0.05 | 0.0576 | 0.98 | 0.13 | – | – |
| P43 | P37 | P13 | P04 | P26 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Difference | % of mean | 105 cm, 6 y | 110 cm, 5 y | 112 cm, 5 y | 118 cm, 8 y | Small | 142 cm, 9 y | P26 / small | ||
| Cadence | 0.548 | 22% | 1.15 | 0.3 | 0.5 | 0.3 | 1.1 | 0.42 | 5.1 | 12.24 |
| Speed | 0.248 | 25% | 0.90 | 2.2 | 2.5 | 0.7 | 1.2 | 1.48 | 1.8 | 1.20 |
| Step length | 0.0743 | 17% | 0.77 | 2.3 | 3.0 | 0.9 | 0.6 | 1.48 | 2.3 | 1.59 |
| Contact ratio | 0.0308 | 4% | 0.36 | 0.4 | 1.8 | 0.8 | 0.1 | – | 0.3 | – |
| Double support | 0.0303 | 5% | 0.24 | 0.4 | 1.2 | 0.8 | 0.1 | – | 0.4 | – |
| Forward lean | Side lean | |||
| Subset | Slope [95% interval] | Slope [95% interval] | ||
| Angry | 3.06 [ 0.18, 6.21] | 0.00 | 0.43 [ 0.05, 1.12] | 0.06 |
| Big step | 5.11 [ 1.80, 9.34] | 0.10 | 0.77 [ 0.29, 1.27] | 0.07 |
| Depressed | 9.18 [ 3.69, 15.29] | 0.10 | 1.21 [ 0.43, 1.99] | 0.08 |
| Drunk | 6.51 [ 1.05, 13.45] | 0.04 | 1.57 [ 0.54, 2.59] | 0.14 |
| Fear | 10.75 [ 4.90, 18.97] | 0.12 | 1.01 [ 0.18, 2.18] | 0.01 |
| True | Median | 5% | 95% | ||||
|---|---|---|---|---|---|---|---|
| 39 | 1 | 0.00 | 0.09 | 0.14 | 0.02 | 0.00 | 0.07 |
| 39 | 1 | 0.05 | 0.04 | 0.12 | 0.14 | 0.05 | 0.32 |
| 39 | 1 | 0.10 | 0.01 | 0.11 | 0.20 | 0.11 | 0.54 |
| 39 | 1 | 0.15 | 0.06 | 0.10 | 0.28 | 0.24 | 0.68 |
| 39 | 1 | 0.20 | 0.10 | 0.06 | 0.31 | 0.40 | 0.84 |
| 39 | 1 | 0.30 | 0.22 | 0.02 | 0.44 | 0.74 | 0.96 |
| 39 adults | All 44 | ||||||
| Descriptor | Share | Reliability | Shape | + age | Shape | + age | Child |
| Cadence | 0.21 | 0.84 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
| Speed | 0.52 | 0.92 | 0.00 | 0.30 | 0.01 | 0.29 | 0.00 |
| Step length | 0.27 | 0.93 | 0.22 | 0.37 | 0.03 | 0.28 | 0.00 |
| Contact ratio | 0.33 | 0.93 | 0.07 | 0.07 | 0.04 | 0.04 | 0.00 |
| Double support | 0.28 | 0.93 | 0.00 | 0.00 | 0.03 | 0.03 | 0.00 |
| Term | What it asks | Depends on | |
|---|---|---|---|
| Fidelity (rotation, root) | stay close to the kinematic copy | – | 1, 0.01 |
| Penetration | penalize block overlap beyond an allowance | block distance fields | 1 |
| Ground | penalize sole corners below the floor | foot geometry | 1 |
| Stance | penalize contact height away from the floor | foot geometry | 1 |
| Slide | penalize corner velocity during contact | foot geometry | 5 |
| Anchor | penalize drift from the copy’s contact-run anchors | foot geometry | 10 |
| Shape-aware VAE | Latent FM prior | Raw-space baseline | |
| Input | 45 frames | 9 tokens 48 | 55 frames |
| Token span | 5 frames | – | – |
| Decoder read-out | 5 frame queries per token; temporal head depthwise conv, kernel 5, residual | – | – |
| Layers width | 6 + 6 384 | 8 384 (DiT) | 8 256 |
| Feed-forward, heads | 1024, 4 | 1024, 4 | 1024, 4 |
| Dropout | 0.1 | 0.2 | 0.2 |