Contenido
Introducción
El tipo de archivo BCK es un archivo que se puede conseguir en SMG. Este se encarga de guardar la información de animación esquelética en los modelos 3D. Es decir, almacena valores de escalamiento, rotación y traslación para los distintos huesos de un modelo en 3D. Al juego leer este tipo de archivo, aplica las transformaciones correspondientes a cada hueso del modelo 3D y estos huesos a su vez deforman los vertices que estan asignados a ellos mostrando el efecto final de la animación. Un ejemplo de su uso es en el modelo ChooChooTrain
para animar la rotación de las ruedas.

Vid. 1: choochootrain.bdl
con la animación run.bck
vista en noclip.smg
Funcionamiento
Los modelos 3D de SMG tienen un método para volverse móviles: Contienen varios sistemas de referencia en diferentes secciones del modelo que pueden o no estar determinados por otro sistema de referencia (sistema padre). A estos sistemas de referencia se pueden enlazar vértices del modelo 3D y se tiene la capacidad de especificar el peso de este enlace para cada vértice en el proceso de creación del modelo. Al modificar las propiedades de uno de estos sistemas, y con la existencia de vértices enlazados a este sistema, se pueden transferir estas modificaciones al sistema como modificaciones a los vertices.

En el área de modelado 3D a estos sistemas de referencia se les denomina "huesos" ya que es usual animar movimientos de seres vivos. La idea de una jerarquía puede verse mejor aquí dado que el movimiento de un hueso va a depender del movimiento del hueso que "lo contiene".

La única restricción en esta estructura es que los modelos deben tener un hueso padre absoluto/raíz (sistema de referencia principal) a partir del cual todos los demás huesos estan sujetos.

La información guardada en los archivos BCK es de escalamiento, rotación y translación para cada hueso en el modelo 3D. Cada grupo de valores para cada hueso está especificado para el sistema de referencia que va con dicho hueso. Todos los huesos del modelo deben tener al menos un dato de animación para que el archivo sea compatible con el modelo.
Definiciones
- Sección ANK1: única sección de los archivos BCK que contiene todos los datos de la animación de esqueleto.
-
Modo de repetición: Entero de 8 bits que especifica como se repite la animación. Las opciones son:
- 0: Se reproduce la animación una sola vez y se mantiene el último cuadro de la animación cargado en el modelo.
- 1: Se reproduce la animación una sola vez y se mantiene el primer cuadro de la animación cargado en el modelo.
- 2: Se reproduce la animación infinitas veces hacia adelante.
- 3: Se reproduce la animación una vez hacia adelante y una vez hacia atrás.
- 4: Se reproduce la animación infinitas veces hacia adelante y hacia atrás.
-
Duración de la animación: Entero de 16 bits que indica la duración de la animación de esqueleto. Este número dice que tantos datos de la animación de cada hueso usar.
- Si faltan datos de animación, para un hueso: Se agarra el valor del último cuadro disponible y se mantiene hasta el final de la animación.
- Si sobran datos de animación para un hueso: Se agarran los datos hasta que se termine la animación (se ignoran los datos posteriores).
-
Datos de animación de un hueso: Es una estructura de datos con 3 enteros de 16 bits. Existen 9 de ellas por cada hueso, una para cada tipo de variable a animar: escalamiento / rotación / translación XYZ.
En el archivo BCK aparecen en el orden: Escalamiento en X, Rotación en X, Translación en X, Escalamiento en Y, Rotación en Y, Translación en Y, Escalamiento en Z, Rotación en Z y Translación en Z.
Los 3 enteros de 16 bits tienen las siguientes funciones:
-
Número de cuadros de referencia: Indica el número de cuadros de referencia (cuadros clave/keyframes) que se tienen para la animación.
-
Índice de los datos: posición de los datos en el arreglo correspondiente (arreglo de escalamiento/rotación/translación).
- Modo de interpolación:
-
0
: Se usa la misma pendiente para la llegada y salida al valor numérico del cuadro en la interpolación (puede pensarse que es una curva suave). -
1
: Se usa una pendiente para la llegada y otra pendiente para la salida al valor numérico del cuadro en la interpolación (pendientes personalizadas).
-
La expresión de interpolación usada entre 2 cuadros clave es la del Spline Cúbico de Hermite asumiendo que
t0 = 0 y tf = 1
.
Dependiendo de los datos de animación de un hueso, hay 3 formas de leer el arreglo de animación correspondiente:
- El número de cuadros clave es
1
: La variable a animar no tiene animación. Sólo se lee un dato del arreglo correspondiente (en el índice especificado) y ese dato especifica el valor de esta variable durante toda la animación. - El número de cuadros clave es mayor que
1
y el modo de interpolación es0
(suave): Se leen 3 datos por cuadro clave. El primero se refiere al tiempo, el segundo al valor de la variable en ese tiempo y el tercero representa la pendiente de llegada y salida de ese punto para usarse en la expresión de interpolación. - El número de cuadros clave es mayor que
1
y el modo de interpolación es1
(personalizado): Se leen 4 datos por cuadro clave. El primero se refiere al tiempo, el segundo al valor de la variable en ese tiempo, el tercero representa la pendiente de llegada al punto y el cuarto representa la pendiente de salida de ese punto.
-
- Arreglo de escalamiento: Arreglo de números de punto flotante de 32 bits que contiene los datos de animación de escalamiento XYZ de todos los huesos.
-
Arreglo de rotación: Arreglo de enteros con signo de 16 bits que contiene los datos de animación de rotación XYZ de todos los huesos. El entero se convierte en un ángulo usando la siguiente formula (y el dato de shift izquierdo que viene en el mismo archivo BCK):
Básicamente mapean los ángulos positivos entre
0x0000
y0x7FFF
(0°
a(180 << rot_lshift)°
) y los negativos entre0x8000
y0xFFFF
(-(180 << rot_lshift)°
a-0°
).
Las pendientes estan especificadas en el mismo sistema que los ángulos codificados (estan codificadas) y el tiempo está guardado sin codificación.
- Arreglo de translación: Arreglo de números de punto flotante de 32 bits que contiene los datos de animación de translación XYZ de todos los huesos.
Estructura
Encabezado
Nombre | Tamaño | Descripción |
---|---|---|
Magia | 4 bytes | J3D1 (Big Endian) o 1D3J (Little Endian). |
Tipo | 4 bytes | bck1 (Big Endian) o 1kcb (Little Endian). |
Tamaño del archivo | 4 bytes | En bytes. |
Número de secciones | 4 bytes | Parece ser siempre 0x1 . |
Desconocido 1 | 16 bytes | Parecen ser siempre 16 0xFF bytes. |
Sección ANK1
Nombre | Tamaño | Descripción | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Magia | 4 bytes | ANK1 (Big Endian) o 1KNA (Little Endian). |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tamaño de la sección | 4 bytes | En bytes. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Modo de repetición | 1 byte | 0x00 , 0x01 , 0x02 , 0x03 o 0x04 . |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Shift izquierdo para la rotación | 1 byte | El valor numérico que especifica el número de shifts izquierdos que hay hacerle a los valores de rotación guardados para obtener el valor que realmente se guardó. Ver fómula de arriba. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Duración de la animación | 2 bytes | Especificada en cuadros. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Número de huesos | 2 bytes | Número de huesos en el archivo BCK para animar. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tamaño del arreglo de escalamiento | 2 bytes | Longitud del arreglo en donde se guardan los valores de animación de escalamiento de los huesos. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tamaño del arreglo de rotación | 2 bytes | Longitud del arreglo en donde se guardan los valores de animación de rotación de los huesos. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tamaño del arreglo de translación | 2 bytes | Longitud del arreglo en donde se guardan los valores de animación de translación de los huesos. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posición de los datos de animación de cada hueso | 4 bytes | Respecto al inicio de la sección. Parece ser siempre 0x40 . |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posición del arreglo de escalamiento | 4 bytes | Respecto al inicio de la sección. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posición del arreglo de rotación | 4 bytes | Respecto al inicio de la sección. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Posición del arreglo de translación | 4 bytes | Respecto al inicio de la sección. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Relleno 1 | Máximo 31 bytes | Alinea hasta el siguiente byte multiplo de 32. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Inicio: Datos de animación de los huesos | (9 * 6 * Número de huesos) bytes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
EjemploEstructura coloreada de ![]() El archivo se encuentra en Referencias |