Estructura BCK

Contenido

  1. Introducción
  2. Funcionamiento
  3. Definiciones
  4. Estructura
  5. Ejemplo

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.


Image could not be loaded.

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.


Image could not be loaded.

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".


Image could not be loaded.

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.


Image could not be loaded.

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

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
Inicio: Datos de animación de un hueso (9 * 6) bytes
Escalamiento en X
Número de cuadros clave 2 bytes Número de cuadros clave para la animación de SRT (escalamiento / rotación / translación) XYZ del i-ésimo hueso.
Índice de los datos 2 bytes Posición del sub-arreglo correspondiente de SRT con los datos de la animación de SRT XYZ del i-ésimo hueso.
Modo de interpolación 2 bytes 0 (suave) o 1 (personalizada).
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
Translación en Z
Final: Datos de animación de un hueso
Final: Datos de animación de los huesos
Relleno 2 Máximo 31 bytes Alinea hasta el siguiente byte multiplo de 32.
Inicio: Arreglo de escalamiento (4 * Tamaño del arreglo de escalamiento) bytes
Número[i] 4 bytes (float32) Valor numérico que puede representar el tiempo, el valor de escalamiento XYZ en un tiempo o una pendiente.
Final: Arreglo de escalamiento
Relleno 3 Máximo 31 bytes Alinea hasta el siguiente byte multiplo de 32.
Inicio: Arreglo de rotación (2 * Tamaño del arreglo de rotación) bytes
Número[i] 2 bytes (s16) Valor numérico que puede representar el tiempo, el valor de rotación XYZ en un tiempo o una pendiente (ver arriba como interpretar los valores numéricos guardados).
Final: Arreglo de rotación
Relleno 4 Máximo 31 bytes Alinea hasta el siguiente byte multiplo de 32.
Inicio: Arreglo de translación (4 * Tamaño del arreglo de translación) bytes
Número[i] 4 bytes (float32) Valor numérico que puede representar el tiempo, el valor de translación XYZ en un tiempo o una pendiente.
Final: Arreglo de translación
Relleno 5 Máximo 31 bytes Alinea hasta el siguiente byte multiplo de 32.

Ejemplo

Estructura coloreada de run.bck en ImHex:



El archivo se encuentra en ObjectData/ChooChooTrain.arc.

Referencias