@pose_flow/babylon 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +129 -105
  2. package/dist/AI_USAGE.md +386 -0
  3. package/dist/PUBLISHING.md +110 -0
  4. package/dist/babylon-inertialization.d.ts +29 -0
  5. package/dist/babylon-inertialization.js +88 -0
  6. package/dist/babylon.d.ts +27 -5
  7. package/dist/babylon.js +181 -26
  8. package/dist/core/controller.d.ts +26 -0
  9. package/dist/core/controller.js +78 -8
  10. package/dist/core/database.d.ts +8 -2
  11. package/dist/core/database.js +62 -24
  12. package/dist/core/features.d.ts +1 -1
  13. package/dist/core/features.js +9 -11
  14. package/dist/core/inertialization.d.ts +3 -0
  15. package/dist/core/inertialization.js +15 -0
  16. package/dist/core/profile.d.ts +34 -8
  17. package/dist/core/profile.js +49 -10
  18. package/dist/core/root-motion.d.ts +5 -3
  19. package/dist/core/root-motion.js +43 -7
  20. package/dist/core/scenario.d.ts +29 -0
  21. package/dist/core/scenario.js +57 -0
  22. package/dist/core/schema.d.ts +56 -0
  23. package/dist/core/schema.js +123 -0
  24. package/dist/core/search.d.ts +40 -2
  25. package/dist/core/search.js +147 -16
  26. package/dist/core/selection.d.ts +24 -0
  27. package/dist/core/selection.js +41 -0
  28. package/dist/core/types.d.ts +24 -4
  29. package/dist/core/types.js +1 -0
  30. package/dist/index.d.ts +4 -0
  31. package/dist/index.js +4 -0
  32. package/dist/offline/src/babylon-inertialization.js +88 -0
  33. package/dist/offline/src/babylon.js +281 -0
  34. package/dist/offline/src/core/controller.js +162 -0
  35. package/dist/offline/src/core/database.js +97 -0
  36. package/dist/offline/src/core/features.js +41 -0
  37. package/dist/offline/src/core/inertialization.js +15 -0
  38. package/dist/offline/src/core/profile.js +103 -0
  39. package/dist/offline/src/core/root-motion.js +78 -0
  40. package/dist/offline/src/core/scenario.js +57 -0
  41. package/dist/offline/src/core/schema.js +123 -0
  42. package/dist/offline/src/core/search.js +181 -0
  43. package/dist/offline/src/core/selection.js +41 -0
  44. package/dist/offline/src/core/types.js +3 -0
  45. package/dist/offline/src/index.js +11 -0
  46. package/dist/offline/tools/bake.js +88 -0
  47. package/dist/offline/tools/cli.js +30 -0
  48. package/dist/offline/tools/glb.js +54 -0
  49. package/dist/offline/tools/prepare.js +165 -0
  50. package/dist/offline/tools/profile-assets.js +90 -0
  51. package/dist/offline/tools/rig.js +47 -0
  52. package/dist/offline/tools/validate-assets.js +43 -0
  53. package/package.json +48 -39
package/README.md CHANGED
@@ -1,105 +1,129 @@
1
- # Motion Match · Babylon.js
2
-
3
- O código original desta biblioteca é distribuído sob a [licença MIT](LICENSE), com aviso de copyright “2026 Motion Match contributors”. Dependências, modelos, texturas e animações de terceiros mantêm suas próprias licenças; este aviso não os relicencia. Consulte a [proveniência dos assets](docs/ASSETS.md).
4
-
5
- Biblioteca TypeScript de Motion Matching clássico com Pose Search e laboratório 3D. Inspiração conceitual no Unreal Engine; implementação própria e inicial, sem paridade com o plugin da Epic.
6
-
7
- O banco compara **pose visível + velocidade + trajetória desejada** e seleciona clipe/tempo. O controlador do jogo continua responsável por posição, colisões, orientação e combate.
8
-
9
- **Prioridade atual: biblioteca reutilizável para diferentes personagens e jogos.** Modelo, rig, escala, clipes e banco são definidos por perfis JSON, compartilhados pelo bake e laboratório. Veja [como adicionar um personagem](docs/PROFILES.md). Há também o exemplo Barbarian com escala e sample rate próprios.
10
-
11
- ## Executar
12
-
13
- ```powershell
14
- npm ci
15
- npm run dev
16
- ```
17
-
18
- Abrir http://127.0.0.1:5173. WASD movimenta, Shift corre, arraste orbita e scroll aproxima. O seletor alterna Knight/KayKit e Paladin/Mixamo. “Teste de locomoção” mantém um movimento ativo para inspeção, sem segurar teclas; voltar a “Manual” devolve o controle ao WASD. “Manter orientação” permite testar deslocamento lateral e para trás no modo manual. O painel mostra candidato, custo, tempo, transições e velocidade. O valor “Atualização MM” inclui o controlador e só inclui busca quando o intervalo vence.
19
-
20
- Os GLB e bancos já foram gerados neste workspace. Para regenerar:
21
-
22
- ```powershell
23
- npm run bake
24
- npm run bake -- --paladin
25
- npm run validate:assets -- --profile public/profiles/barbarian.json
26
- npm run bake -- --profile public/profiles/barbarian.json
27
- npm run typecheck
28
- npm test
29
- npm run build
30
- npm run benchmark
31
- ```
32
-
33
- O build produz `dist/` (biblioteca ESM + declarações) e `demo-dist/` (laboratório). O pacote npm inclui apenas a biblioteca, não os personagens. Não foi publicado.
34
-
35
- ## Implementado
36
-
37
- - Núcleo sem engine: esquema fixo de 27 características, normalização compartilhada, busca exata ponderada em `Float32Array`, filtros de gait e banco versionado JSON + float32 little endian.
38
- - Continuidade: avanço natural, loops, fim de clipe, intervalo de busca, tempo mínimo entre trocas e margem de melhora. Defaults de tuning, não parâmetros oficiais do Unreal.
39
- - Predição com aceleração, frenagem e velocidade angular; horizontes 0,2 / 0,4 / 0,6 s.
40
- - Adaptador Babylon.js 7.54.3: leitura dos pés visíveis e reprodução com crossfade, incluindo saltos entre dois tempos do mesmo clipe.
41
- - Bake offline via o mesmo carregador/interpolador Babylon usado na demonstração.
42
- - Três bancos separados: **Knight, 174 poses / 6 clipes**; **Paladin, 610 poses / 9 clipes**; **Barbarian, 138 poses / 6 clipes**. Todos têm idle, walk, run, backward, left, right; o Paladin inclui stop, turn-left e turn-right sem loop.
43
- - Trajetória medida dos hips para os três novos clipes: posição, yaw contínuo, velocidade, interpolação e término sem repetir o início. Os dados extraídos alimentam apenas o bake; deslocamento e heading em runtime continuam definidos pelo controlador.
44
- - Pipeline Blender 5.2 para inspecionar e converter os FBX locais do Paladin.
45
-
46
- ## Features e coordenadas
47
-
48
- | Índices | Característica |
49
- | --- | --- |
50
- | 0–5 | Posição local dos dois pés, XYZ |
51
- | 6–11 | Velocidade dos pés no mundo, expressa nos eixos locais, XYZ |
52
- | 12–14 | Velocidade do controlador nos eixos locais, XYZ |
53
- | 15–20 | Posições futuras locais, XZ, em três horizontes |
54
- | 21–26 | Direções futuras locais, XZ, em três horizontes |
55
-
56
- Metros, segundos, Y acima e Z frente. A demo e o bake usam `scene.useRightHandedSystem = true`. Nesse referencial, o lado anatômico esquerdo dos modelos olhando +Z aponta para +X; yaw positivo gira +Z em direção a +X. A direita da câmera é calculada por sua projeção, não por assumir +X. Query e banco precisam usar exatamente a mesma convenção e escala. Não mudar a convenção do MMORPG para importar a lib; adaptar seu referencial ou gerar banco compatível.
57
-
58
- Peso inicial por dimensão: pose/velocidade 1, trajetória/direção 3. Dimensões com desvio abaixo de 0,0001 usam escala 1, evitando amplificar canais constantes em bancos sem giros. Filtros são opcionais; a demonstração pesquisa todos os clipes.
59
-
60
- **Os dois conjuntos são reproduzidos in-place.** Nos seis loops básicos, velocidades em `tools/bake.ts` são parâmetros de autoria: frente 1,8/4,5 m/s; costas −1,5 m/s; strafe KayKit ±3,2 m/s; strafe Paladin ±1,8 m/s. São valores iniciais, não medidas. Esquerda usa +X e direita −X. O bake KayKit remove as mesmas trilhas de root que o player, inclusive o heading presente nos strafes.
61
-
62
- Para **stop e giros do Paladin**, Blender registra posição planar e yaw dos hips antes de remover esses movimentos da animação. Os arquivos `.motion.json` são amostrados em relação ao heading atual; futuros além do fim ficam no último estado. A velocidade dos pés inclui a contribuição da rotação do referencial. O movimento vertical do esqueleto é preservado. A orientação é um proxy extraído da pelvis e inclui oscilação natural; não equivale a root motion limpo de produção. Foot sliding ainda pode acontecer.
63
-
64
- O laboratório tem ciclos de parada e giros no seletor do Paladin. Filtros por estado disponibilizam parada durante frenagem e giro durante mudança de heading com baixa velocidade. A busca decide o clipe/tempo dentro dos candidatos permitidos. Clips concluídos ficam inelegíveis por 0,6 s (configurável em `reselectDelay`). `Query.excludedClips` permite outras exclusões explícitas. O painel exibe a origem da trajetória e as três últimas trocas.
65
-
66
- ## API
67
-
68
- ```ts
69
- import { decodeDatabase, MotionMatcher, featureVector, predictTrajectory } from '@motion-match/babylon';
70
- import { BabylonMotionPlayer, BabylonPoseReader } from '@motion-match/babylon/babylon';
71
-
72
- // manifest e bytes são carregados uma vez; sem bake durante o jogo.
73
- const database = decodeDatabase(manifest, bytes);
74
- const matcher = new MotionMatcher(database);
75
- // sources: Map<clip.id, AnimationGroup>; nodes: Map<nome original do osso, TransformNode>.
76
- const player = new BabylonMotionPlayer(scene, manifest.clips, sources, nodes);
77
- const reader = new BabylonPoseReader(controllerRoot, leftFoot, rightFoot);
78
-
79
- // A cada frame, usando a pose medida após a renderização anterior:
80
- const future = predictTrajectory(trajectoryInput);
81
- const query = { features: featureVector(lastVisiblePose, future) };
82
- const playback = matcher.update(dt, query);
83
- player.update(playback, dt); // antes de scene.render()
84
- scene.render();
85
- lastVisiblePose = reader.read(dt); // depois da avaliação de animações
86
-
87
- // Em teleporte/reconciliação descontínua: reader.reset(); matcher.reset().
88
- // Na remoção do personagem: player.dispose().
89
- ```
90
-
91
- Instalar localmente no jogo, quando integrar: `npm install D:/motion_match`. Copiar os assets/banco necessários para a pasta pública do jogo é uma etapa separada. Ver contrato e restrições em [docs/INTEGRATION.md](docs/INTEGRATION.md).
92
-
93
- ## Limites atuais
94
-
95
- Ainda não há IK, foot locking, contato dos pés, inertialization, motion warping, root-motion-driven movement, worker, KD-tree ou PCA. Starts e giros em movimento ainda não foram preparados. Os três clipes medidos são sem loop; não há extração com composição de root motion através de ciclos. A busca linear é apropriada para medir esta base pequena; não há garantia de orçamento em bancos grandes ou com muitos jogadores.
96
-
97
- A biblioteca tem esquema fixo, não um editor visual de schemas como o Unreal. Não há retargeting automático entre esqueletos diferentes. KayKit e Mixamo possuem bancos e mapas de ossos independentes. Crossfade de clips com trilhas ausentes exige preparação de cobertura dos ossos.
98
-
99
- O laboratório tem um bundle de demonstração grande pelo carregamento amplo de Babylon; o build avisa sobre isso. O núcleo da lib não depende de Babylon, e sua entrada pública separada permite usá-lo sem importar o adaptador.
100
-
101
- ## Referências e proveniência
102
-
103
- - [Epic: Motion Matching](https://dev.epicgames.com/documentation/en-us/unreal-engine/motion-matching-in-unreal-engine): banco, pose, trajetória e busca.
104
- - [Babylon: Advanced Animations](https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations): grupos de animação e pesos. A implementação foi validada contra o código instalado da versão 7.54.3.
105
- - [Assets locais](docs/ASSETS.md), [evidências e pendências](docs/VALIDATION.md), [referência fornecida pelo usuário](MOTION_MATCHING_POSE_SEARCH_WEB_BASE_REFERENCIAS.md).
1
+ # Motion Match · Babylon.js
2
+
3
+ O código original desta biblioteca é distribuído sob a [licença MIT](LICENSE), com aviso de copyright “2026 Motion Match contributors”. Dependências, modelos, texturas e animações de terceiros mantêm suas próprias licenças; este aviso não os relicencia. Consulte a [proveniência dos assets](docs/ASSETS.md).
4
+
5
+ Biblioteca TypeScript de Motion Matching clássico com Pose Search e laboratório 3D. Inspiração conceitual no Unreal Engine; implementação própria e inicial, sem paridade com o plugin da Epic.
6
+
7
+ O banco compara **pose visível + velocidade + trajetória desejada** e seleciona clipe/tempo. O controlador do jogo continua responsável por posição, colisões, orientação e combate.
8
+
9
+ **Prioridade atual: biblioteca reutilizável para diferentes personagens e jogos.** Modelo/rig/escala são definidos por perfis JSON v2, que referenciam schemas v1 e conjuntos de animações v1 separados, compartilhados pelo bake e laboratório. Veja [como adicionar um personagem](docs/PROFILES.md). Há também o exemplo Barbarian com escala e sample rate próprios.
10
+
11
+ O [roadmap revisado de Motion Matching + Pose Search](docs/ROADMAP.md) prioriza schemas configuráveis, preparação genérica de rigs/animações e conjuntos por contexto para chegar à versão estável. A Fase 1 está implementada: [schemas configuráveis e migração](docs/SCHEMAS.md). A Fase 2 está concluída no escopo documentado e inclui preparação GLB seletiva, recorte temporal, composição de loops medidos, hashes de assets, conferência de bind e CLI offline; retargeting automático continua futuro.
12
+
13
+ Animação de combate também faz parte do escopo obrigatório planejado da 1.0.0 (etapa 4.1): seleção de ataques/combos, esquivas, defesa e reações, com entradas controladas, sequência temporal protegida, eventos de apresentação e camadas. Ainda não implementado; regras de combate permanecem no jogo/servidor. Motion warping é uma expansão posterior.
14
+
15
+ Fase 3 em andamento: filtros por contexto, intervalos elegíveis, política de variantes de idle e roteamento de bancos. Exemplo local `?profile=/profiles/kaykit-context.json`, com dois subconjuntos e variantes no mesmo bake. Cobertura de olhar lateral/camadas permanece pendente; contrato em [PROFILES.md](docs/PROFILES.md) e [AI_USAGE.md](docs/AI_USAGE.md).
16
+
17
+ Fase 4 em andamento: painel de candidatos/custos por canal/rejeições, trajetórias, gravação/replay de queries, máscaras disjuntas e inertialization opcional. Exemplo `?profile=/profiles/kaykit-transitions.json&debug=1`. Confirmar os limites e o aceite pendente em [task-14](task/task-14/task.md); gesto de tronco é somente prévia de apresentação, sem contratos de combate.
18
+
19
+ O MMORPG será usado como consumidor de teste durante o desenvolvimento, em paralelo ao laboratório. Ajustes e problemas com prints, código, logs e erros são acompanhados em [task/summary.md](task/summary.md); veja o [modelo e instruções](task/README.md). A integração prática não precisa aguardar o término do roadmap.
20
+
21
+ ## Guias distribuídos com o pacote
22
+
23
+ - [Tutorial para IA integrar a biblioteca](dist/AI_USAGE.md) — fonte em docs/AI_USAGE.md.
24
+ - [Comandos de publicação](dist/PUBLISHING.md) — fonte em docs/PUBLISHING.md.
25
+
26
+ O build copia os guias para dist/ e prepack executa o build antes de empacotar. Implementações e correções devem atualizar o tutorial na mesma alteração, conforme AGENTS.md.
27
+
28
+ ## Executar
29
+
30
+ ```powershell
31
+ npm ci
32
+ npm run dev
33
+ ```
34
+
35
+ Abrir http://127.0.0.1:5173. WASD movimenta, Shift corre, arraste orbita e scroll aproxima. O seletor oferece Knight, Paladin, Barbarian e Knight com schema de mãos (33 dimensões). “Teste de locomoção” mantém um movimento ativo para inspeção, sem segurar teclas; voltar a “Manual” devolve o controle ao WASD. “Manter orientação” permite testar deslocamento lateral e para trás no modo manual. O painel mostra candidato, custo, tempo, transições e velocidade. O valor “Atualização MM” inclui o controlador e só inclui busca quando o intervalo vence.
36
+
37
+ Os GLB e bancos já foram gerados neste workspace. Para regenerar:
38
+
39
+ ```powershell
40
+ npm run bake
41
+ npm run bake -- --paladin
42
+ npm run validate:assets -- --profile public/profiles/barbarian.json
43
+ npm run bake -- --profile public/profiles/barbarian.json
44
+ npm run bake -- --profile public/profiles/kaykit-hands.json
45
+ npm run typecheck
46
+ npm test
47
+ npm run build
48
+ npm run benchmark
49
+ ```
50
+
51
+ O build produz `dist/` (biblioteca ESM + declarações) e `demo-dist/` (laboratório). O pacote npm inclui a biblioteca e os guias de integração/publicação, sem personagens. A publicação inicial 0.1.0 foi informada pelo mantenedor; os novos guias estarão disponíveis após a próxima publicação.
52
+
53
+ ## Implementado
54
+
55
+ - Núcleo sem engine: schemas configuráveis de características (preset original de 27 dimensões e exemplo de 33), normalização compartilhada, busca exata ponderada em `Float32Array`, filtros de gait e banco versionado JSON + float32 little endian.
56
+ - Continuidade: avanço natural, loops, fim de clipe, intervalo de busca, tempo mínimo entre trocas e margem de melhora. Defaults de tuning, não parâmetros oficiais do Unreal.
57
+ - Predição com aceleração, frenagem e velocidade angular; horizontes configuráveis (preset: 0,2 / 0,4 / 0,6 s).
58
+ - Adaptador Babylon.js 9.32.1: leitura dos pés visíveis e reprodução com crossfade, incluindo saltos entre dois tempos do mesmo clipe.
59
+ - Bake offline via o mesmo carregador/interpolador Babylon usado na demonstração.
60
+ - Quatro bancos separados: **Knight com mãos, 174 poses / 6 clipes / 33 dimensões**; **Knight, 174 poses / 6 clipes**; **Paladin, 610 poses / 9 clipes**; **Barbarian, 138 poses / 6 clipes**. Todos têm idle, walk, run, backward, left, right; o Paladin inclui stop, turn-left e turn-right sem loop.
61
+ - Trajetória medida dos hips para os três novos clipes: posição, yaw contínuo, velocidade, interpolação e término sem repetir o início. Os dados extraídos alimentam apenas o bake; deslocamento e heading em runtime continuam definidos pelo controlador.
62
+ - Pipeline Blender 5.2 para inspecionar e converter os FBX locais do Paladin.
63
+
64
+ Banco/perfil agora são v2. decodeDatabase rejeita banco v1; usar migração explícita ou novo bake conforme [SCHEMAS.md](docs/SCHEMAS.md). API local ainda sem publicação; conferir os tipos e o guia da versão instalada.
65
+
66
+ ## Features e coordenadas
67
+
68
+ A tabela abaixo descreve somente o preset original `LOCOMOTION_SCHEMA`. Para outros schemas, usar os offsets de `compileSchema`.
69
+
70
+ | Índices | Característica |
71
+ | --- | --- |
72
+ | 0–5 | Posição local dos dois pés, XYZ |
73
+ | 6–11 | Velocidade dos pés no mundo, expressa nos eixos locais, XYZ |
74
+ | 12–14 | Velocidade do controlador nos eixos locais, XYZ |
75
+ | 15–20 | Posições futuras locais, XZ, em três horizontes |
76
+ | 21–26 | Direções futuras locais, XZ, em três horizontes |
77
+
78
+ Metros, segundos, Y acima e Z frente. A demo e o bake usam `scene.useRightHandedSystem = true`. Nesse referencial, o lado anatômico esquerdo dos modelos olhando +Z aponta para +X; yaw positivo gira +Z em direção a +X. A direita da câmera é calculada por sua projeção, não por assumir +X. Query e banco precisam usar exatamente a mesma convenção e escala. Não mudar a convenção do MMORPG para importar a lib; adaptar seu referencial ou gerar banco compatível.
79
+
80
+ Peso inicial por dimensão: pose/velocidade 1, trajetória/direção 3. Dimensões com desvio abaixo de 0,0001 usam escala 1, evitando amplificar canais constantes em bancos sem giros. Filtros são opcionais; a demonstração pesquisa todos os clipes.
81
+
82
+ **Os conjuntos são reproduzidos in-place.** Nos seis loops básicos, velocidades em `tools/bake.ts` são parâmetros de autoria: frente 1,8/4,5 m/s; costas −1,5 m/s; strafe KayKit ±3,2 m/s; strafe Paladin ±1,8 m/s. São valores iniciais, não medidas. Esquerda usa +X e direita −X. O bake KayKit remove as mesmas trilhas de deslocamento/heading variável que o player. Orientação constante é parte da pose; o conjunto usa rootOrientation com yaw ±90° para alinhar os strafes originalmente diagonais (±60°) ao deslocamento lateral. O laboratório testa esses clipes na velocidade nominal declarada de 3,2 m/s.
83
+
84
+ Para **stop e giros do Paladin**, Blender registra posição planar e yaw dos hips antes de remover esses movimentos da animação. Os arquivos `.motion.json` são amostrados em relação ao heading atual; futuros além do fim ficam no último estado. A velocidade dos pés inclui a contribuição da rotação do referencial. O movimento vertical do esqueleto é preservado. A orientação é um proxy extraído da pelvis e inclui oscilação natural; não equivale a root motion limpo de produção. Foot sliding ainda pode acontecer.
85
+
86
+ O laboratório tem ciclos de parada e giros no seletor do Paladin. Filtros por estado disponibilizam parada durante frenagem e giro durante mudança de heading com baixa velocidade. A busca decide o clipe/tempo dentro dos candidatos permitidos. Clips concluídos ficam inelegíveis por 0,6 s (configurável em `reselectDelay`). `Query.excludedClips` permite outras exclusões explícitas. O painel exibe a origem da trajetória e as três últimas trocas.
87
+
88
+ ## API
89
+
90
+ ```ts
91
+ import { decodeDatabase, MotionMatcher, SchemaQueryBuilder, predictTrajectory } from '@pose_flow/babylon';
92
+ import { BabylonMotionPlayer, BabylonSchemaPoseReader } from '@pose_flow/babylon/babylon';
93
+
94
+ // manifest e bytes são carregados uma vez; sem bake durante o jogo.
95
+ const builder = new SchemaQueryBuilder(schema);
96
+ const database = decodeDatabase(manifest, bytes, builder.layout.schema);
97
+ const matcher = new MotionMatcher(database);
98
+ // sources: Map<clip.id, AnimationGroup>; nodes: Map<nome original do osso, TransformNode>.
99
+ // semanticNodes: Map<papel do schema, TransformNode>; schema carregado/validado offline.
100
+ const player = new BabylonMotionPlayer(scene, manifest.clips, sources, nodes);
101
+ const reader = new BabylonSchemaPoseReader(controllerRoot, semanticNodes, builder.layout.schema);
102
+
103
+ // A cada frame, usando a pose medida após a renderização anterior:
104
+ const future = predictTrajectory(trajectoryInput, builder.layout.horizons);
105
+ const query = builder.build(lastVisiblePose, future);
106
+ const playback = matcher.update(dt, query);
107
+ player.update(playback, dt); // antes de scene.render()
108
+ scene.render();
109
+ lastVisiblePose = reader.read(dt); // depois da avaliação de animações
110
+
111
+ // Em teleporte/reconciliação descontínua: reader.reset(); matcher.reset().
112
+ // Na remoção do personagem: player.dispose().
113
+ ```
114
+
115
+ Instalar localmente no jogo, quando integrar: `npm install D:/motion_match`. Copiar os assets/banco necessários para a pasta pública do jogo é uma etapa separada. Ver contrato e restrições em [docs/INTEGRATION.md](docs/INTEGRATION.md).
116
+
117
+ ## Limites atuais
118
+
119
+ Ainda não há IK, foot locking, contato dos pés, motion warping, root-motion-driven movement, worker, KD-tree ou PCA. Inertialization é opt-in e não garante melhor qualidade ou pés travados. Starts e giros em movimento ainda não foram preparados. Os três clipes medidos do perfil Paladin legado são sem loop; há composição de ciclos de trajetórias medidas no núcleo/bake, com caminhada medida do Paladin preparada e conferida no laboratório. A busca linear é apropriada para medir esta base pequena; não há garantia de orçamento em bancos grandes ou com muitos jogadores.
120
+
121
+ Schemas JSON configuráveis não incluem editor visual nem histórico temporal de ossos. Não há retargeting automático entre esqueletos diferentes. KayKit e Mixamo possuem bancos e mapas de ossos independentes. Crossfade de clips com trilhas ausentes exige preparação de cobertura dos ossos.
122
+
123
+ O laboratório tem um bundle de demonstração grande pelo carregamento amplo de Babylon; o build avisa sobre isso. O núcleo da lib não depende de Babylon, e sua entrada pública separada permite usá-lo sem importar o adaptador.
124
+
125
+ ## Referências e proveniência
126
+
127
+ - [Epic: Motion Matching](https://dev.epicgames.com/documentation/en-us/unreal-engine/motion-matching-in-unreal-engine): banco, pose, trajetória e busca.
128
+ - [Babylon: Advanced Animations](https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations): grupos de animação e pesos. A implementação foi validada contra o código instalado da versão 9.32.1.
129
+ - [Assets locais](docs/ASSETS.md), [evidências e pendências](docs/VALIDATION.md), [referência fornecida pelo usuário](MOTION_MATCHING_POSE_SEARCH_WEB_BASE_REFERENCIAS.md).