Spring Bones
Añade física dinámica a 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 ser controlados por clips de animación. Dan vida a elementos como el hair, los earrings, las capes, los belts, las ponytails y otros accesorios colgantes, haciendo que se balanceen, reboten y se asienten de forma natural cuando el avatar camina, corre o gira.
Los Spring Bones son no parte de la armature base del avatar. Son huesos adicionales que añades al skeleton base del avatar en Blender (o cualquier software 3D), y su comportamiento físico se configura en el Builder después de subirlos.
Esta implementación sigue el estándar VRM Spring Bone, una convención ampliamente adoptada para la física de avatares en formatos como VRM y MMD.

Cómo funcionan los Spring Bones
Una cadena de spring bones es una secuencia de bones que simula física en conjunto y debe tener al menos dos bones: el spring bone real y un end bone. Un solo spring bone por sí mismo no producirá ningún movimiento — la simulación necesita la cabeza del spring bone para impulsar la física y la cabeza del end bone definirá el extremo geométrico. Las cadenas más largas (3+ bones) tendrán un movimiento más suave y natural, ideal para cabello largo o capes.
Spring bone padre — El primer bone de la cadena. Posee la configuración física (stiffness, gravity, drag, etc.). Se identifica porque tiene
springboneen cualquier parte del nombre del bone (sin distinguir mayúsculas y minúsculas).Spring bone hijo — Es el hijo del bone anterior en la jerarquía. Hereda los parámetros físicos de su padre y forma la cadena.
Spring bone final — Es el último bone de la cadena. Define el extremo geométrico de la cadena, pero no se ve afectado por la simulación y no deforma ningún mesh.
La cadena, o jerarquía, de spring bones debe ser lineal, lo que significa que cada bone solo puede tener un hijo. Los bones con dos o más hijos pueden tener un comportamiento inesperado.


La jerarquía
Para que los spring bones funcionen bien, tienen que estar parentados a uno de los bones originales del avatar. Para pelo y pendientes, por ejemplo, el bone que está en la parte superior de la jerarquía debería estar parentado a Avatar_Head. Para bufandas, parentar la cadena a Avatar_Neck es una buena idea. Para faldas, quizá Avatar_Hips o Avatar_LeftUpLeg/Avatar_RightUpLeg podría funcionar.
Es importante notar cómo funciona la estructura de esta jerarquía.
Hair_springBone_1 (spring bone padre): este es el bone en la parte superior de la cadena y tiene configuración física
Hair_springBone_2 (spring bone hijo): es el hijo del bone anterior en la jerarquía y hereda la configuración.
Hair_springBone_end (spring bone final): es el último bone de la cadena y solo sirve como extremo.
Convención de nomenclatura
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 nomenclatura de Blender (o del software que prefieras) para izquierda y derecha.
¡Atención!
Los spring bones no funcionarán sin springbone en el nombre del bone. Debe usarse, incluso para el bone final.
Límites
Cada wearable debe mantenerse dentro de los siguientes límites de spring bones:
Máximo 6 cadenas de spring bones por wearable
Máximo 12 spring bones totales (suma de todos los bones en todas las cadenas)
Profundidad máxima de cadena de 6 bones
Creando Spring Bones en Blender
Los spring bones son huesos adicionales que creas en Blender para la armature base del avatar. Los parámetros de física se configuran más tarde en el Builder — por ahora solo necesitas preparar la jerarquía de bones.
Para crear un nuevo bone, selecciona la Armature del avatar y, en Edit Mode, asegúrate de tener el cursor donde quieres que se cree el bone y presiona Shift+A. Otra forma de hacerlo sería duplicando un bone existente presionando Shift+D. Una vez que tengas el primer bone de la cadena, presiona E para extruirlo y crear el resto de la cadena.

Es importante notar que una cadena de spring bones no tiene que estar conectada al parent del skeleton, así que puedes colocarla en cualquier parte del mesh. Sin embargo, la cadena de spring bones debe estar conectada, no puedes desplazar ninguno de los spring bones.
Una vez que crees los bones, renómbralos siguiendo la convención de nomenclatura mencionada arriba y asegúrate de parentar la cadena al bone correcto. Las líneas punteadas mostrarán el parent de la cadena. Si no hay ninguno, significa que la cadena no tiene parent. En Edit Mode, selecciona primero el child, luego selecciona el parent y presiona Ctrl+P > Keep Offset.

Para renombrar un bone, selecciónalo en Edit Mode o Pose Mode, ve a la pestaña Bone Properties y renómbralo según la convención de nomenclatura. Haz esto para todos los bones de la cadena.

¡Consejo!
Para asegurarte de que el bone esté colocado correctamente, selecciona el mesh en Object Mode y, en Edit Mode, selecciona los vertices del área en la que quieres colocar el bone (puede ser un loop o un grupo de vertices) > presiona Shift+S > Cursor to Selected.
Vuelve a Object ModeObject Mode Edit Mode Edit Mode Shift+S > Selection to cursor.

Skinning del Mesh
El skinning es el proceso de vincular el mesh a la armature, para que se muevan juntos. Para ello, definimos cuánta influencia (weight) tendrá cada bone sobre los vertices. Cuanto más weight, más deformará el bone el mesh. Para hacerlo, ve a Object Mode, selecciona primero el mesh, presiona Shift y selecciona la armature, presiona Ctrl+PHay dos formas de hacerlo: selecciona With Empty Groups o With Automatic Weights.

With Automatic Weights
Como su nombre indica, con este método Blender intentará establecer automáticamente los skin weights creando vertex groups para cada bone en la armature y asignando pesos automáticos a cada uno. Puede funcionar en algunos casos, pero también puede requerir algunos ajustes. Puedes comprobar los groups creados haciendo clic en la Data tab.
Si sabes con seguridad que no necesitarás que ciertos bones afecten al mesh, puedes simplemente hacer clic en el icono de bloqueo para bloquear los groups que quieras, haz clic en el menú desplegable y Delete All Unlocked Groups para eliminarlos del object. Por ejemplo, si estás trabajando en un hair, no tiene sentido tener groups para los feet y las hands. En ese caso, elimina todo lo que no sea la head o los spring bones, como en el ejemplo de abajo. Asegúrate también de eliminar el group del end bone de la spring chain.

With Empty Groups
En este método, Blender creará todos los vertex groups para cada bone de la armature, pero tendrán un weight de cero por defecto. Tendrás que asignar manualmente los weights en Edit Mode o pintarlos en Weight Paint. Esto te da más control sobre lo que afecta cada group y puede ser especialmente útil para hard surfaces o object que deban asignarse por completo a un cierto group. En cualquier caso, una vez que hayas asignado los weights, deberán probarse en Pose Mode y luego ajustarse en Weight Paint.

Pintado de pesos
Para probar el mesh skinned, selecciona la armature y ve a Pose Mode, establece un keyframe, luego gira los bones para crear otra pose y establece otro keyframe. Así podrás comprobar cómo se está deformando el mesh con el movimiento. Una vez que tengas las poses configuradas, vuelve a Object Mode, selecciona el mesh y ve a Weight Paint.

En Weight Paintla pestaña Tools encontrarás distintos brushes para ajustar los skin weights. Selecciona el Vertex Group que quieras editar (si están bloqueados, simplemente desbloquéalos para poder editar la influencia) y usa el brush para añadir o quitar influencia. El negro significa cero influencia, mientras que el rojo significa que ese group influye completamente en el mesh. Habilitar el wireframe en Overlays hará más fácil ver lo que estás pintando.

Usa los brushes add, subtract o smooth para obtener el resultado deseado. Prueba también distintas poses extremas para ver cómo se deforma el mesh y si no queda ningún vertex sin weights. Si estás conforme con el resultado, ¡es hora de exportarlo!
Exportación
Antes de exportar, asegúrate de eliminar cualquier animation clip creada al probar las poses. Ve a Pose Mode, selecciona todos los bones presionando Una y pulsa Ctrl+R, luego Ctrl+S y finalmente Ctrl+G para eliminar cualquier transform de tu armature. Luego vuelve a object mode, cambia el Display Mode de View Layer a Blender File, despliega Actions, haz clic derecho y elimina el archivo de animación.

Si tienes otros objects en tu scene, como el avatar mesh, desactiva su visibilidad haciendo clic en el icono del ojo en el 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.

Configurando Spring Bones en el Builder
Después de subir un wearable que contiene springbone-nombrados bones, el Builder los detecta automáticamente y muestra el Spring Bones panel de configuración.

Desde este panel puedes configurar los parámetros de física para cada spring root bone. La vista previa del avatar en el Builder reflejará inmediatamente tus cambios, así que puedes ajustar el comportamiento en tiempo real.
No puedes añadir nuevos spring bones desde el Builder. Los bones deben existir ya en el archivo .glb subido con la convención de nomenclatura correcta. El Builder solo te permite configurar los parámetros de física de los spring bones detectados. .glb archivo con la convención de nomenclatura correcta. El Builder solo te permite configurar los parámetros de física para los spring bones detectados.
Referencia de parámetros
Fuerza de rigidez
Rango
0 a 4
Predeterminado
2.0
Controla con qué fuerza el bone intenta volver a su pose de reposo. Esta es la fuerza de restitución — piensa en ella como la "rigidez" del spring.
0: El bone no volverá al reposo en absoluto — simplemente quedará colgando bajo la gravedad.
Valores bajos (por ejemplo, 0–1): El bone queda suelto y caído, oscilando libremente. Bueno para cabello largo y fluido o accesorios colgantes ligeros.
Valores altos (por ejemplo, 3–4): El bone es rígido, se mantiene cerca de su posición original y regresa rápido. 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 bone en cada frame.
0: Sin efecto de gravedad — el bone solo se ve afectado por la inercia del movimiento y la rigidez.
Valores bajos (por ejemplo, 0.3–0.8): Tracción de gravedad sutil, buena para la mayoría de los accesorios.
Valores altos (por ejemplo, 1.5–2.0): Tracción de gravedad fuerte, haciendo que el bone caiga con mucho peso.
Dirección de 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.
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 adelante
0
0
-1
Hacia atrás
Puedes combinar ejes (por ejemplo, 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 qué tan rápido el bone pierde impulso y se asienta. Piensa en ello como resistencia del aire o amortiguación.
Valores bajos (por ejemplo, 0–0.2): El bone oscila libremente durante mucho tiempo antes de asentarse, como un péndulo con poca fricción.
Valores altos (por ejemplo, 0.7–1.0): El bone se asienta casi al instante después del movimiento, dando una sensación pesada o amortiguada.
1: El bone apenas se mueve — deceleración máxima.
Centro (opcional)
Formato
Nombre del bone (dropdown)
Predeterminado
Ninguno
Un bone de referencia opcional que se usa para calcular el movimiento del spring bone en relación con un punto del avatar, en lugar de hacerlo respecto al espacio mundial. Esto evita que la spring chain se balancee en exceso cuando el avatar se mueve por el entorno (caminar, correr).
Sin un center bone, los springs calculan la inercia en el espacio mundial — cada paso que da el avatar hace que los bones reaccionen como si todo el mundo se moviera, lo que produce un balanceo exagerado durante la locomoción.
Con un center bone, la simulación usa el espacio de ese bone como marco de referencia, así que solo los movimientos locales del avatar (giro de cabeza, flexión del cuerpo) activan la reacción del spring.
Elige el center bone según dónde esté ubicado el wearable en el cuerpo:
Cabeza (hair, earrings, tiaras)
Avatar_Head
Parte superior del cuerpo (capes, necklaces)
Avatar_Spine
Parte inferior del cuerpo (belts, skirt accessories)
Avatar_Hips
El center bone no debe formar parte de ninguna spring chain. Debe ser un bone de la armature base del avatar.
Casos de uso comunes y valores recomendados
Estos son puntos de partida sugeridos. Ajústalos a tu gusto usando la vista previa en tiempo real del Builder.
Cabello largo / cola de caballo
1.0 – 2.0
0.3 – 0.8
0, -1, 0
0.3 – 0.5
Avatar_Head
Más bones 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 hair 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 bones), menor rigidez para el balanceo
Capa / manto
1.0 – 2.0
0.5 – 1.0
0, -1, 0
0.3 – 0.5
Avatar_Spine
Múltiples cadenas paralelas para dar anchura
Cinturón / adorno colgante
1.5 – 2.5
0.3 – 0.8
0, -1, 0
0.5 – 0.7
Avatar_Hips
Mayor arrastre para elementos 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 un aspecto 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 bones. Las cadenas pueden atravesar el body mesh en poses extremas. Las versiones futuras podrían añadir soporte para colliders.
Sin interacciones entre wearables: Las spring chains 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 el
gravityDira una dirección diagonal.Rendimiento en avatares remotos: La simulación de spring bones se desactiva para los avatares que están lejos del jugador local para ahorrar rendimiento. Los avatares cercanos mostrarán la física de spring bones normalmente.
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 spring bones utiliza dos artefactos separados que trabajan juntos:
El
.glbarchivo solo contiene los nombres de los bones (con elspringbonetoken) y su jerarquía. No se almacenan parámetros de física en el archivo del modelo.Los metadatos del ítem del wearable (
wearable.data.springBones) contienen todos los parámetros de física como JSON.
Cuando configuras parámetros en el Builder, se guardan en los metadatos del ítem del wearable — el .glb archivo .glb nunca se modifica mediante la edición de 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)
.glb Jerarquía de nodos (ejemplo)El archivo del modelo contiene solo los nombres de los bones y las relaciones padre-hijo:
Metadatos del ítem (wearable.data.springBones)
wearable.data.springBones)Los parámetros de física se almacenan en los metadatos del wearable, indexados por el hash de contenido GLB:
modelsse indexa por el hash del contenido GLB. Los Wearables cuyas representaciones masculina y femenina comparten el mismo.glbtienen una sola entrada.Cada entrada de bone usa el nombre exacto del nodo de la
.glb(sensible a mayúsculas y minúsculas).Tip bones (por ejemplo,
springbone_earring_r_tip) no necesitan una entrada de metadata — solo sirven como extremos geométricos.
Parámetros de metadatos
stiffness
float
2.0
Fuerza de restauració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 spring chain. Debe ser true para los root bones.
center
string
—
Opcional. Nombre de un bone de referencia para el cálculo de inercia relativa.
Última actualización