FTH 3 · Corpo inteiro|INEMA.CLUB-PRO

Aula 2 · 15 min

Movimento humano como dado

As políticas de corpo inteiro de 2026 aprendem com horas de movimento humano. Antes de usar esse dado, você precisa saber lê-lo e saber se pode usá-lo. Nesta aula você abre um clipe BVH, conta quadros, fps e juntas, escreve um clipe seu e entende por que o curso não redistribui nenhuma base pública.

Começar a aula
Pessoa com roupa preta de captura de movimento e marcadores reflexivos em pose de boxe, cercada de câmeras num estúdio escuro.

Nesta aula você vai

  1. 1De onde vem movimento humano: mocap, vídeo e VR
  2. 2O formato BVH por dentro: esqueleto e uma linha por quadro
  3. 3AMASS, LAFAN1 e a pergunta da licença
  4. 4Como pegar um clipe truncado antes de ele estragar o retargeting

Objetivo: ler um clipe de captura de movimento (BVH) e dizer quadros, fps e juntas, sabendo de onde o dado vem e sob que licença.

01Do movimento de uma pessoa a um arquivo

Clique em cada bloco.

Clique em cada bloco do diagrama para ver o que ele faz.

Dado de movimento é insumo de treino: licença e integridade vêm antes da quantidade.

02As bases que você vai encontrar

Clique em cada uma.

1. AMASS

Coleção de muitas capturas convertidas para o mesmo corpo paramétrico (SMPL-X). É a entrada mais comum do GMR e de vários trabalhos de rastreio.

Exige cadastro no site. Os termos para um curso aberto não foram conferidos: leia antes de usar e de publicar qualquer coisa derivada.

03Baixar só o clipe de teste do GMR e lê-lo

O repositório do GMR tem 1,2 GB na pasta assets, por causa das malhas dos robôs. O sparse-checkout baixa só a pasta do clipe, 2,9 MB (medidos em 19/10/2026, commit bb1bbe4). O ler_clipe.py não usa biblioteca extra: lê o texto do BVH.

Terminal · clipe do GMR
F=${FTH:-$HOME/fth}; cd $F
[ -d GMR ] || git clone -q --filter=blob:none --sparse https://github.com/YanjieZe/GMR
cd GMR && git sparse-checkout set assets/xsens_bvh_test
git checkout -q bb1bbe4 && git log -1 --format='GMR %h (%ad)' --date=short
cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/ler_clipe.py $F/GMR/assets/xsens_bvh_test/251021_04_boxing_120Hz_cm_3DsMax.bvh; echo "saída: $?"
Trecho do BVH (cabeçalho do clipe de teste do GMR)
HIERARCHY
ROOT Hips
{
 OFFSET 0.000000 0.000000 0.000000
 CHANNELS 6 Xposition Yposition Zposition Yrotation Xrotation Zrotation
 JOINT Chest
 {
  OFFSET 0.000000 10.149404 -1.127712
  CHANNELS 3 Yrotation Xrotation Zrotation
(…)
MOTION
Frames: 4249
Frame Time: 0.008333
Exemplo do repositório
GMR bb1bbe4 (2026-04-02)
arquivo: 251021_04_boxing_120Hz_cm_3DsMax.bvh
raiz: Hips · juntas: 23 · pontas (End Site): 5 · canais por quadro: 72
ordem de rotação: Yrotation Xrotation Zrotation · unidade provável: cm (maior OFFSET 43.3)
quadros: 4249 · fps: 120 · duração: 35.4 s
linhas de movimento conferidas: 4249/4249
saída: 0

23 juntas com 3 canais de rotação e a raiz com 3 de posição a mais: 72 números por quadro. Frame Time de 0,008333 s = 120 quadros por segundo.

04Um BVH seu, feito do zero

Cinco juntas (quadril, coluna, cabeça, braço e antebraço direitos), 60 quadros a 30 Hz: o braço sobe em 0,5 s e o antebraço acena.

Terminal · gerar e ler aceno.bvh
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/bvh_minimo.py && python3 kit/ler_clipe.py $F/movimentos/aceno.bvh; echo "saída: $?"
Exemplo do repositório
gravado: ~/fth/movimentos/aceno.bvh (60 quadros a 30 Hz)
arquivo: aceno.bvh
raiz: Hips · juntas: 5 · pontas (End Site): 2 · canais por quadro: 18
ordem de rotação: Zrotation Xrotation Yrotation · unidade provável: cm (maior OFFSET 30.0)
quadros: 60 · fps: 30 · duração: 2.0 s
linhas de movimento conferidas: 60/60
saída: 0

3 canais por junta + 3 de posição da raiz = 18. A mesma leitura serve para qualquer BVH.

05Prática

Ler, conferir e decidir se pode usar.

E1 · Ler o clipe do GMR

5 min

Rode o bloco do clipe e anote quadros, fps e duração.

Pronto quando: python3 kit/ler_clipe.py ~/fth/GMR/assets/xsens_bvh_test/251021_04_boxing_120Hz_cm_3DsMax.bvh | tail -1 → linhas de movimento conferidas: 4249/4249.

E2 · O seu aceno mais lento

5 min

Gere o aceno com 90 quadros a 30 Hz e leia de novo.

Pronto quando: python3 kit/bvh_minimo.py --quadros 90 && python3 kit/ler_clipe.py ~/fth/movimentos/aceno.bvh | grep quadros → quadros: 90 · fps: 30 · duração: 3.0 s.

E3 · Ficha de licença

10 min

Para um clipe que você queira usar (AMASS, LAFAN1 ou outro), escreva em ~/fth/movimentos/licenca.md três linhas: Fonte, Licença (com o link) e Pode redistribuir.

Pronto quando: grep -c -E "^(Fonte|Licença|Pode redistribuir):" ~/fth/movimentos/licenca.md → 3.

06Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 3

O cabeçalho diz Frames: 4249 e Frame Time: 0.008333. Quanto dura o clipe?competência

07Em três frases

FormatoBVH = esqueleto + um quadro por linha; quadros, fps e canais saem do texto.
LicençaSem termos claros, não redistribua: use dado seu ou o que vem com licença.
IntegridadeConfira quadros × linhas antes de qualquer retargeting.

Para ir além

Aula anteriorPróxima aula