> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-es/wearables-y-emotes/wearables/spring-bones.md).

# Spring Bones

Añade física dinámica a los Wearables con Spring Bones

### ¿Qué son los Spring Bones?

Los spring bones (también conocidos como jiggle bones o physics bones) son huesos adicionales añadidos a un wearable que se mueven dinámicamente en respuesta al movimiento del avatar y a la gravedad, en lugar de estar impulsados por clips de animación. Dan vida a elementos como el cabello, los pendientes, las capas, los cinturones, las colas de caballo y otros accesorios colgantes, haciendo que se balanceen, reboten y se asienten de forma natural mientras el avatar camina, corre o gira.

Los spring bones son **no** parte del Armature base del avatar. Son huesos adicionales que añades al esqueleto base del avatar en Blender (o en cualquier software 3D), y su comportamiento físico se configura en el Builder después de subirlo.

Esta implementación sigue el [estándar VRM Spring Bone](https://vrm.dev/en/vrm1/springbone/), una convención ampliamente adoptada para la física de avatares en formatos como VRM y MMD.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-155bf4c615cd79a1c25c1289fbc36565c913499b%2F01_spring_bones_workflow.png?alt=media\&token=74749646-204b-4014-829f-44f0807dd0f3)

### Cómo funcionan los Spring Bones

Un **cadena de spring** es una secuencia de huesos que simula física en conjunto y debe tener al menos dos huesos: el spring bone real y un hueso final. Un solo spring bone por sí solo no producirá ningún movimiento: la simulación necesita la cabeza del spring bone para impulsar la física y la cabeza del hueso final definirá el extremo geométrico. Las cadenas más largas (3+ huesos) tendrán un movimiento más suave y natural, ideal para cabellos largos o capas.

1. **Hueso padre del spring bone** — El primer hueso de la cadena. Es el propietario de la configuración física (rigidez, gravedad, arrastre, etc.). Se identifica por tener `springbone` en cualquier parte del nombre del hueso (sin distinguir mayúsculas y minúsculas).
2. **Hueso hijo del spring bone** — Es el hijo del hueso anterior en la jerarquía. Hereda los parámetros físicos de su padre y forma la cadena.
3. **Extremo del spring bone** — El último hueso de la cadena. Define el extremo geométrico de la cadena, pero no se ve afectado por la simulación y no deforma ninguna malla.

La cadena, o jerarquía, para los spring bones debe ser **lineal**, lo que significa que cada hueso solo puede tener un hijo. Los huesos con dos o más hijos pueden tener un comportamiento inesperado.

![Una bonita cadena de spring lineal.](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-647d9bf916f9848eb8e59c0ac59ebc2fe07deaea%2FSpring_Chain.png?alt=media\&token=3c8a9ade-932c-45d0-8ff2-039557f86601)

![Los huesos con 2 o más hijos tendrán un comportamiento inesperado.](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-f824360b21f0e1fc92a1a337479f35a08f7f694f%2FForked_Chain.png?alt=media\&token=4a822ce2-d7d3-45a8-84a2-6f2f1860d158)

### La jerarquía

Para que los spring bones funcionen bien, deben emparentarse a uno de los huesos originales del avatar. Para cabellos y pendientes, por ejemplo, el hueso de la parte superior de la jerarquía debería emparentarse con ***Avatar\_Head***. Para bufandas, emparentar la cadena a ***Avatar\_Neck*** es una buena idea. Para faldas, quizá ***Avatar\_Hips*** o ***Avatar\_LeftUpLeg/Avatar\_RightUpLeg*** pueda servir.

Es importante fijarse en cómo funciona la estructura de esta jerarquía.

* *Hair\_springBone\_1* (padre del spring bone): este es el hueso en la parte superior de la cadena, tiene la configuración física
* *Hair\_springBone\_2* (spring bone hijo): este es el hijo del hueso anterior en la jerarquía y hereda la configuración.
* *Hair\_springBone\_end* (extremo del spring bone): es el último hueso de la cadena y solo sirve como extremo.

### Convención de nombres

Todos los spring bones **deben** contener la subcadena `springbone` (sin distinguir mayúsculas y minúsculas) en su nombre. La subcadena puede aparecer en cualquier posición:

* *SpringBone\_hair\_left*
* *hair\_springbone\_l*
* *springbone\_earring.R*

Para mantener tu flujo de trabajo organizado, se sugiere usar este formato: **BodyPart/WearableName\_springBone**

Ejemplos: *Hair\_springBone\_1*, *Earring\_springBone.L* etc… Siéntete libre de usar el formato que mejor te convenga, siempre que siga la convención de nombres de Blender (o de tu software preferido) para izquierda y derecha.

{% hint style="warning" %}
¡Atención!

Los spring bones no funcionarán sin `springbone` en el nombre del hueso. Debe usarse incluso para el hueso final.
{% endhint %}

### Límites

Cada wearable debe mantenerse dentro de los siguientes límites de spring bones:

* Máximo **6** cadenas de spring por wearable
* Máximo **12** spring bones totales (suma de todos los huesos de todas las cadenas)
* Profundidad máxima de cadena de **6** huesos

## Creación de Spring Bones en Blender

Los spring bones son huesos adicionales que creas en Blender para el Armature base del avatar. Los parámetros físicos se configuran más tarde en el Builder: por ahora solo necesitas preparar la jerarquía de huesos.

Para crear un hueso nuevo, selecciona el Armature del avatar y, en **Edit Mode**, asegúrate de tener el cursor donde quieres que se cree el hueso y pulsa **Shift+A**. Otra forma de hacerlo sería duplicando un hueso existente con **Shift+D**. Una vez que tengas el primer hueso de la cadena, pulsa **E** para extruirlo y crear el resto de la cadena.

![Pulsa Shift+A para crear un hueso donde esté el cursor.](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-a7353847fead3ecb60e9dbc49d9449e914e0efca%2FCreate_Bones.gif?alt=media\&token=227762de-59e9-4338-a33d-9e7dcb905ce7)

Es importante señalar que una cadena de spring no tiene por qué estar conectada al padre del esqueleto, así que puedes colocarla en cualquier parte de la malla. Sin embargo, la cadena de spring **tiene** que estar conectada; no puedes desplazar ninguno de los spring bones.

Una vez que crees los huesos, cámbiales el nombre siguiendo la convención mencionada arriba y asegúrate de emparentar la cadena al hueso correcto. Las líneas punteadas mostrarán el padre de la cadena. Si no hay ninguno, significa que la cadena no tiene padre. En **Edit Mode**, selecciona primero el hijo y luego el padre y pulsa **Ctrl+P** > **Keep Offset**.

![Emparenta los huesos seleccionando primero el hijo, luego el padre y pulsa Ctrl+P.](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-6c10f20fb0392fe39a125e59e1202e638b24ef71%2FParenting_Bones.gif?alt=media\&token=70d36a45-74a1-4910-9a8a-b89830a85caa)

Para cambiar el nombre de un hueso, selecciónalo en Edit Mode o Pose Mode, ve a la pestaña Bone Properties y cámbiale el nombre según la convención. Haz esto para todos los huesos de la cadena.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-acb6f900f22bcf0cf7c7af4df54410f62607497c%2FRename_Bones.png?alt=media\&token=5e094657-611f-4592-aad6-b4ef11c367c2)

{% hint style="info" %}
¡Consejo!

Para asegurarte de que el hueso esté bien colocado, selecciona la malla en **Object Mode** y, en **Edit Mode**, selecciona los vértices del área donde quieres colocar el hueso (puede ser un loop o un grupo de vértices) > pulsa **Shift+S** > **Cursor to Selected.**

Vuelve a **Object Mode**, selecciona el armature > ve a **Edit Mode** > selecciona el hueso deseado > **Shift+S** > **Selection to cursor**.
{% endhint %}

![Usa Shift+S para colocar el hueso en el lugar correcto de la malla.](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-c3a786c4bfe1487f0312dd69ca6492ea660fa310%2FCreate_Bones2.gif?alt=media\&token=d5df5786-0152-4211-9157-e13ec73e3b63)

### Skinning de la malla

Skinning es el proceso de vincular la malla al Armature, para que se muevan juntos. Para ello, definimos cuánta influencia (peso) tendrá cada hueso sobre los vértices. Cuanto más peso, más deformará el hueso la malla. Para hacerlo, ve a **Object Mode**, selecciona primero la malla, pulsa **Shift** y selecciona el armature, pulsa **Ctrl+P**. Hay dos formas de hacerlo: selecciona **With Empty Groups** o **With Automatic Weights**.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-a2b003483ddbc0d4f75ed73ad0d18cfd9db5e154%2FParenting_Mesh.gif?alt=media\&token=a8d0b687-09a3-49d4-9f63-16819ed8e49f)

#### With Automatic Weights

Como dice el nombre, con este método Blender intentará establecer automáticamente los pesos de skinning creando grupos de vértices para cada hueso del armature y asignando pesos automáticos a cada uno. Puede funcionar en algunos casos, pero también puede requerir algunos ajustes. Puedes revisar los grupos creados haciendo clic en la pestaña **Data** pestaña.

Si sabes con seguridad que no necesitas que ciertos huesos afecten a la malla, puedes hacer clic en el **icono de candado** para bloquear los grupos que quieras, hacer clic en el menú desplegable y **Delete All Unlocked Groups** para eliminarlos del objeto. Por ejemplo, si estás trabajando en un cabello, tener grupos para los pies y las manos no tiene sentido. En ese caso, borra todo lo que no sea la cabeza o los spring bones, como en el ejemplo de abajo. Asegúrate también de borrar el grupo del hueso final de la cadena de spring.

![Eliminación de grupos de vértices.](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-6f81dc7daa452a13d7d0dc82235ebefa5f457fad%2FDeleting_Groups.gif?alt=media\&token=019d06ea-14b0-42b0-8be5-8d392c9b5262)

#### With Empty Groups

En este método, Blender creará todos los grupos de vértices para cada hueso del armature, pero tendrán un peso de cero por defecto. Tendrás que asignar manualmente los pesos en Edit Mode o pintarlos en Weight Paint. Esto te da más control sobre lo que afecta cada grupo y puede ser especialmente útil para superficies duras u objetos que deban asignarse por completo a un grupo determinado. En cualquier caso, una vez que hayas asignado los pesos, tendrás que probarlos en Pose Mode y luego ajustarlos en Weight Paint.

![Emparentado con grupos vacíos.](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-ff94e0142f6a4926a619e5fe99cec63c8ca9a1c4%2FEmpty_Groups_Compressed.gif?alt=media\&token=62edd91e-0c6b-4480-a0c2-39958edd4e69)

#### Pintado de pesos

Para probar la malla con skinning, selecciona el armature y ve a **Pose Mode**, establece un fotograma clave, luego gira los huesos para crear otra pose y establece otro fotograma clave. Así podrás comprobar cómo se deforma la malla con el movimiento. Una vez que tengas las poses definidas, vuelve a **Object Mode**, selecciona la malla y ve a **Weight Paint**.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-527c8bb63094ba652a3fb1d5352e93a74488708c%2FSetting_Poses_Compressed.gif?alt=media\&token=f43fb889-f1a2-4784-a521-14292691e0ca)

En **Weight Paint**, en la pestaña Tools encontrarás diferentes pinceles para ajustar los pesos de skinning. Selecciona el Vertex Group que quieras editar (si están bloqueados, simplemente desbloquéalos para poder editar la influencia) y usa el pincel para añadir o quitar influencia. El negro significa cero influencia, mientras que el rojo significa que ese grupo influye completamente en la malla. Activar el wireframe en **Overlays** hará más fácil ver lo que estás pintando.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-c27ffa783f5617d5f0808b2dd6a42abf154b212a%2FWeight_Paint_Compressed.gif?alt=media\&token=9e29dffe-b68f-4d66-979a-1559ddf6e558)

Usa los pinceles de añadir, restar o suavizar para obtener el resultado deseado. Prueba también diferentes poses extremas para ver cómo se deforma la malla y si no queda ningún vértice sin pesos. Si estás contento con el resultado, ¡es hora de exportarlo!

### Exportación

Antes de exportar, asegúrate de borrar cualquier clip de animación creado al probar las poses. Ve a Pose Mode, selecciona todos los huesos pulsando **Un** y pulsa **Ctrl+R**, luego **Ctrl+S** y finalmente **Ctrl+G** para borrar cualquier transformación de tu armature. Luego vuelve a Object Mode, cambia el Display Mode de View Layer a Blender File, expande Actions y haz clic derecho para borrar el archivo de animación.

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-c58ca65a7d3cb67af9da18772399df3285da1506%2FDelete_Action.gif?alt=media\&token=f21d765c-2c40-4ae2-b6fd-ed1f18bac33d)

Si tienes otros objetos en tu escena, como la malla del avatar, apaga su visibilidad haciendo clic en el icono del ojo del Outliner. Luego, ve a **File** > **Export** > **gltf 2.0 (.glb, .gltf)**. Para los ajustes de exportación, despliega Include y en **Limit to** activa **Visible Objects**. Haz clic en Export y ya estarás listo para subir tu archivo al Builder!

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-f2b0d6c5f3c5b785a902bf9bb4128611ce7f0cae%2FExport_Settings.png?alt=media\&token=9b43598b-9a6f-4593-93ef-25e26f701ac8)

## Configuración de Spring Bones en el Builder

Después de subir un wearable que contenga huesos con el nombre `springbone`springbone **el Builder los detecta automáticamente y muestra el panel de configuración de** Spring Bones

![](https://1216664193-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-d87462e1ac78ef9158a3291eeb44cb49fb2e979e%2F03_spring_bones_panel.png?alt=media\&token=76283801-febb-4291-8071-67bd4c7696fa)

Desde este panel puedes configurar los parámetros físicos de cada hueso raíz de spring. La vista previa del avatar en el Builder reflejará tus cambios al instante, así que podrás ajustar el comportamiento en tiempo real.

{% hint style="info" %}
No puedes añadir nuevos spring bones desde el Builder. Los huesos ya deben existir en el archivo `.glb` subido con la convención de nombres correcta. El Builder solo te permite configurar los parámetros físicos de los spring bones detectados.
{% endhint %}

### Referencia de parámetros

#### Fuerza de rigidez

|                    |       |
| ------------------ | ----- |
| **Rango**          | 0 a 4 |
| **Predeterminado** | `2.0` |

Controla con qué fuerza el hueso intenta volver a su pose de reposo. Esta es la fuerza de restitución: piensa en ella como la «firmeza» del resorte.

* **0**: El hueso no volverá en absoluto al reposo: simplemente colgará flojamente bajo la gravedad.
* **Valores bajos** (p. ej., 0–1): El hueso está suelto y caído, y se balancea libremente. Bueno para cabello largo y fluido o accesorios colgantes ligeros.
* **Valores altos** (p. ej., 3–4): El hueso es rígido, se mantiene cerca de su posición original y vuelve a encajarse rápidamente. Bueno para cabello corto o accesorios rígidos.

#### Potencia de gravedad

|                    |       |
| ------------------ | ----- |
| **Rango**          | 0 a 2 |
| **Predeterminado** | `0`   |

Controla la magnitud de la fuerza de gravedad que tira del hueso en cada fotograma.

* **0**: Sin efecto de gravedad: el hueso solo se ve afectado por la inercia del movimiento y la rigidez.
* **Valores bajos** (p. ej., 0.3–0.8): Tirón de gravedad sutil, bueno para la mayoría de los accesorios.
* **Valores altos** (p. ej., 1.5–2.0): Tirón de gravedad fuerte, que hace que el hueso se desplome mucho.

#### Dirección de la gravedad

|                    |                                   |
| ------------------ | --------------------------------- |
| **Formato**        | Vector X, Y, Z                    |
| **Predeterminado** | `X: 0, Y: -1, Z: 0` (hacia abajo) |

Establece la dirección de la fuerza de gravedad en el espacio mundial. Por defecto, la gravedad tira hacia abajo (Y = -1), simulando la gravedad natural.

| X  | Y  | Z  | Efecto                                         |
| -- | -- | -- | ---------------------------------------------- |
| 0  | -1 | 0  | Hacia abajo (gravedad natural, predeterminado) |
| 0  | 1  | 0  | Hacia arriba (efecto flotante/sobrenatural)    |
| 1  | 0  | 0  | Hacia la izquierda                             |
| -1 | 0  | 0  | Hacia la derecha                               |
| 0  | 0  | 1  | Hacia delante                                  |
| 0  | 0  | -1 | Hacia atrás                                    |

Puedes combinar ejes (p. ej., `X: 0.5, Y: -0.5, Z: 0`) para direcciones diagonales. Esto es útil para simular efectos similares al viento o para crear una apariencia flotante en personajes sobrenaturales.

#### Fuerza de arrastre

|                    |       |
| ------------------ | ----- |
| **Rango**          | 0 – 1 |
| **Predeterminado** | `0.5` |

Controla con qué rapidez el hueso pierde impulso y se asienta. Piensa en ello como resistencia del aire o amortiguación.

* **Valores bajos** (p. ej., 0–0.2): El hueso se balancea libremente durante mucho tiempo antes de asentarse, como un péndulo con poca fricción.
* **Valores altos** (p. ej., 0.7–1.0): El hueso se asienta casi al instante después del movimiento, dando una sensación de peso o amortiguación.
* **1**: El hueso apenas se mueve: desaceleración máxima.

#### Centro (opcional)

|                    |                             |
| ------------------ | --------------------------- |
| **Formato**        | Nombre del hueso (dropdown) |
| **Predeterminado** | Ninguno                     |

Un hueso de referencia opcional usado para calcular el movimiento del spring bone en relación con un punto del avatar, en lugar de hacerlo en relación con el espacio mundial. Esto evita que la cadena de spring se balancee en exceso cuando el avatar se desplaza (camina, corre).

**Sin un hueso central**, los springs calculan la inercia en el espacio mundial: cada paso que da el avatar hace que los huesos reaccionen como si se moviera todo el mundo, lo que da como resultado un balanceo exagerado durante el movimiento.

**Con un hueso central**, la simulación usa el espacio de ese hueso como marco de referencia, así que solo los movimientos *locales* del avatar (giro de la cabeza, flexión del cuerpo) activan la reacción del spring.

Elige el hueso central según la parte del cuerpo donde esté ubicado el wearable:

| Ubicación del wearable                                      | Hueso central recomendado |
| ----------------------------------------------------------- | ------------------------- |
| Cabeza (cabello, pendientes, tiaras)                        | `Avatar_Head`             |
| Parte superior del cuerpo (capas, collares)                 | `Avatar_Spine`            |
| Parte inferior del cuerpo (cinturones, accesorios de falda) | `Avatar_Hips`             |

{% hint style="warning" %}
El hueso central **no debe** formar parte de ninguna cadena de spring. Debe ser un hueso del armature base del avatar.
{% endhint %}

## Casos de uso comunes y valores recomendados

Estos son puntos de partida sugeridos. Ajusta a tu gusto usando la vista previa en tiempo real del Builder.

| Caso de uso                | Rigidez   | Potencia de gravedad | Dir. de gravedad | Arrastre  | Centro         | Notas                                                     |
| -------------------------- | --------- | -------------------- | ---------------- | --------- | -------------- | --------------------------------------------------------- |
| Cabello largo / coleta     | 1.0 – 2.0 | 0.3 – 0.8            | 0, -1, 0         | 0.3 – 0.5 | `Avatar_Head`  | Más huesos en la cadena = movimiento más suave            |
| Cabello corto              | 3.0 – 4.0 | 0 – 0.3              | 0, -1, 0         | 0.4 – 0.6 | `Avatar_Head`  | Una rigidez mayor mantiene el cabello cerca de la cabeza  |
| Pendientes                 | 0.5 – 1.5 | 0.5 – 1.0            | 0, -1, 0         | 0.4 – 0.6 | `Avatar_Head`  | Cadena corta (2–3 huesos), menor rigidez para que cuelgue |
| Capa / manto               | 1.0 – 2.0 | 0.5 – 1.0            | 0, -1, 0         | 0.3 – 0.5 | `Avatar_Spine` | Varias cadenas paralelas para dar ancho                   |
| Cinturón / adorno colgante | 1.5 – 2.5 | 0.3 – 0.8            | 0, -1, 0         | 0.5 – 0.7 | `Avatar_Hips`  | Mayor arrastre para objetos más pesados                   |
| Efecto flotante / fantasma | 1.0 – 2.0 | 0.5 – 1.0            | 0, 1, 0          | 0.3 – 0.5 | `Avatar_Spine` | Gravedad hacia arriba para una apariencia sobrenatural    |

## Limitaciones

Ten en cuenta las siguientes limitaciones al trabajar con spring bones:

* **Sin colliders**: Los spring bones no colisionan con el cuerpo del avatar ni con otros huesos. Las cadenas pueden atravesar la malla del cuerpo en poses extremas. Las versiones futuras podrían añadir compatibilidad con colliders.
* **Sin interacciones entre wearables**: Las cadenas de spring de cada wearable son independientes. Las cadenas de wearables distintos no se afectan entre sí.
* **Sin viento global**: No existe una fuerza de viento a nivel de escena. Puedes aproximar un efecto de viento por wearable ajustando la `gravityDir` a una dirección diagonal.
* **Rendimiento en avatares remotos**: La simulación de spring bone está desactivada para los avatares que están lejos del jugador local para ahorrar rendimiento. Los avatares cercanos mostrarán la física de spring bone con normalidad.
* **Compatibilidad con clientes alternativos**: Los wearables con spring bones son compatibles hacia atrás con clientes alternativos y versiones antiguas de Explorer, pero los elementos de spring bone permanecerán estáticos. En algunos casos, puede haber pequeños problemas visuales.

## Referencia técnica

La física de los spring bones usa dos artefactos separados que trabajan juntos:

1. **El `.glb` archivo** solo contiene los nombres de los huesos (con el `springbone` token) y su jerarquía. No se almacenan parámetros físicos en el archivo del modelo.
2. **Los metadatos del wearable** (`wearable.data.springBones`) contienen todos los parámetros físicos como JSON.

Cuando configuras parámetros en el Builder, se guardan en los metadatos del wearable: el `.glb` archivo nunca se modifica al editar parámetros.

No necesitas interactuar directamente con este formato: el Builder se encarga de leerlo y escribirlo. Esta sección se proporciona como referencia.

### `.glb` Jerarquía de nodos (ejemplo)

El archivo del modelo contiene solo los nombres de los huesos y las relaciones padre-hijo:

```json
{
  "asset": {"version": "2.0"},
  "nodes": [
    {"name": "Avatar_Head", "children": [1, 2]},
    {"name": "SpringBone_earring_r", "children": [3]},
    {"name": "SpringBone_hair_left", "children": [4]},
    {"name": "springbone_earring_r_tip"},
    {"name": "SpringBone_hair_left_tip"}
  ]
}
```

### Metadatos del ítem (`wearable.data.springBones`)

Los parámetros físicos se almacenan en los metadatos del wearable, indexados por el hash de contenido del GLB:

```json
{
  "version": 1,
  "models": {
    "bafkreialsvt77jvpy673cnugp5ggnxfaalfncufweayuk3jbxskh3pelkm": {
      "SpringBone_earring_r": {
        "stiffness": 0.5,
        "gravityPower": 1.0,
        "gravityDir": [0, -1, 0],
        "drag": 0.6,
        "isRoot": true,
        "center": "Avatar_Hips"
      },
      "SpringBone_hair_left": {
        "stiffness": 2.0,
        "gravityPower": 0.8,
        "gravityDir": [0, -1, 0],
        "drag": 0.4,
        "isRoot": true
      }
    }
  }
}
```

* `models` está indexado por el hash de contenido del GLB. Los wearables cuyas representaciones masculina y femenina comparten el mismo `.glb` tienen una sola entrada.
* Cada entrada de hueso usa el nombre exacto del nodo de `.glb` (distingue mayúsculas y minúsculas).
* Huesos de punta (p. ej., `springbone_earring_r_tip`) no necesitan una entrada de metadatos — solo sirven como extremos geométricos.

### Parámetros de metadatos

| Parámetro      | Tipo    | Predeterminado | Descripción                                                                                     |
| -------------- | ------- | -------------- | ----------------------------------------------------------------------------------------------- |
| `rigidez`      | float   | `2.0`          | Fuerza de restitución hacia la pose de reposo. Rango: 0–4.                                      |
| `gravityPower` | float   | `0`            | Magnitud de la fuerza de gravedad. Rango: 0–2.                                                  |
| `gravityDir`   | vec3    | `[0, -1, 0]`   | Dirección de la gravedad en el espacio mundial.                                                 |
| `drag`         | float   | `0.5`          | Factor de amortiguación / desaceleración. Rango: 0–1.                                           |
| `isRoot`       | boolean | —              | Si este nodo es la raíz de una cadena de resortes. Se requiere que sea `true` para huesos raíz. |
| `center`       | string  | —              | Opcional. Nombre de un hueso de referencia para el cálculo de inercia relativa.                 |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/creator/content-creator-es/wearables-y-emotes/wearables/spring-bones.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
