Saltar al contenido principal

Animación esquelética

Polygon Engine importa una ruta FBX de skinning rígido con límites definidos para personajes y props animados. El importador preprocesa los datos de animación en un recurso .skn compacto, y el runtime de PS1 evalúa sus matrices de huesos antes de dibujar mediante la ruta habitual de triángulos, materiales, texturas, iluminación y tabla de ordenamiento.

No es un sistema de skinning general como los de escritorio. Es un formato predecible para PlayStation 1, con una influencia ósea por vértice, capacidades fijas y presupuestos de memoria explícitos.

Importa un FBX esquelético​

  1. Coloca el archivo de origen .fbx en Assets/Models/.
  2. Selecciónalo en el panel Project.
  3. En Model Inspector, activa Import Hard-Skinned Animation.
  4. Configura Target FPS entre 1 y 30; 15 es el valor predeterminado adecuado para PS1.
  5. Revisa el número de huesos, los clips, el tamaño del runtime y los nombres de los clips.
  6. Selecciona Apply o vuelve a importar el modelo.

El importador esquelético utiliza los ajustes Axis, Scale y Apply Unit Scale del modelo. Exporta la bind pose y los clips en un solo FBX, y conserva esos ajustes entre reimportaciones.

Cuando la importación es exitosa, Polygon Engine escribe:

Library/animations/<skin-guid>.skn

La base de datos de recursos lo identifica como SkeletalAnimation. Internamente, el archivo usa la firma de formato PSKN. Un OBJ normal o un FBX sin skinning permanece como recurso estático .msh.

PS1 Asset Optimizer solo acepta mallas estáticas actualmente. Bloquea un FBX con skinning para evitar que se descarten silenciosamente huesos, pesos de skinning o animaciones. Reduce y valida la topología animada en tu aplicación DCC antes de exportar el FBX.

Regla de skinning rígido​

Cada vértice importado se asigna a su peso positivo dominante de hueso. Los demás pesos se descartan. Esta regla de skinning rígido mantiene limitada la deformación durante la ejecución y evita la mezcla de pesos por vértice en PS1.

Prepara los recursos teniendo en cuenta esta restricción:

  • coloca joints donde deban doblarse las secciones rígidas;
  • evita deformaciones que dependan de una mezcla suave de cuatro pesos;
  • inspecciona codos, hombros, rostros, telas y otras transiciones suaves;
  • reduce huesos y cuadros preprocesados antes de reducir indiscriminadamente la definición de la malla.

El formato esquelético del runtime permite un material por recurso con skinning. Si el archivo de origen contiene varios materiales, activa Single Material, combina el personaje en un solo material o atlas y vuelve a importarlo.

Componente Animator​

Asignar un modelo con datos de skinning generados puede agregar un Animator automáticamente y seleccionar el primer clip importado. También puedes configurarlo en Inspector.

PropiedadSignificado
EnabledIncluye el Animator en la actualización y el renderizado del runtime
SkinRecurso de animación esquelética importado
Default ClipClip seleccionado al iniciar el componente
Playback SpeedMultiplicador de tiempo, limitado por Inspector a 0.01..8.0
LoopReinicia el clip después de su cuadro final
Play On StartInicia el clip predeterminado al iniciar la escena

El GameObject también necesita un Mesh Renderer. Su material, textura, color, iluminación y ajustes de renderizado se usan para dibujar la malla con skinning.

La reproducción puede iniciar desde el componente, Lua Animator, una Timeline de cinemática o un clip Animation independiente.

Animator.Play() activa Loop de forma predeterminada cuando omites su tercer argumento opcional.

Comportamiento del runtime​

El tiempo de animación sigue la frecuencia PAL o NTSC elegida para el runtime. El runtime interpola entre cuadros preprocesados con matrices de huesos en punto fijo, transforma los vértices y normales con skinning rígido en un búfer temporal compartido y envía los triángulos resultantes al renderizador de PS1 existente del engine.

Usa el Target FPS preprocesado para equilibrar la fidelidad del movimiento y los datos de matrices. La interpolación del runtime suaviza el intervalo entre los cuadros preprocesados, pero no puede recuperar el detalle de deformación eliminado por el skinning rígido.

Límites fijos​

RecursoLímite
Mallas con skinning por escena16
Huesos por recurso64
Clips por recurso16
Vértices por recurso4,096
Índices por recurso12,288 (4,096 triángulos)
Datos de geometría por recurso128 KiB
Datos de geometría por escena192 KiB
Búfer temporal de deformación compartido64 KiB
Datos de matrices por recurso192 KiB
Datos de matrices por escena256 KiB
Nombre del clipMáximo de 24 caracteres
Nombre del huesoMáximo de 31 caracteres

El búfer temporal compartido se dimensiona según la necesidad del recurso activo más grande; no se suma una vez por cada malla con skinning. Los datos de geometría y de matrices sí se acumulan en los presupuestos de la escena.

El panel PS1 Budget informa los registros de Animator, recursos esqueléticos únicos, geometría, datos de matrices y búfer temporal compartido. Advierte al 70% y bloquea las compilaciones que exceden las capacidades fijas.

Lista de comprobación de validación​

  • confirma que cada Animator resuelva un recurso Skin y un Default Clip válidos;
  • conserva un material en el archivo de origen y respeta todos los límites por recurso;
  • prueba la finalización sin Loop si la jugabilidad depende de ella;
  • revisa los ángulos cercanos de cámara y la geometría superpuesta como con cualquier recurso de PS1;
  • usa el informe de PS1 Budget después de cada reimportación relevante de animación;
  • valida las poses finales, el orden de dibujo, las texturas y la temporización en una compilación empaquetada en DuckStation y, antes de publicar, en hardware real representativo.

La documentación actual no promete compatibilidad con plataformas móviles, skinning ponderado arbitrario, morph targets ni una vista previa de deformación del editor idéntica al runtime empaquetado.