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
- Coloca el archivo de origen
.fbxenAssets/Models/. - Selecciónalo en el panel Project.
- En Model Inspector, activa Import Hard-Skinned Animation.
- Configura Target FPS entre
1y30;15es el valor predeterminado adecuado para PS1. - Revisa el número de huesos, los clips, el tamaño del runtime y los nombres de los clips.
- 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.
| Propiedad | Significado |
|---|---|
| Enabled | Incluye el Animator en la actualización y el renderizado del runtime |
| Skin | Recurso de animación esquelética importado |
| Default Clip | Clip seleccionado al iniciar el componente |
| Playback Speed | Multiplicador de tiempo, limitado por Inspector a 0.01..8.0 |
| Loop | Reinicia el clip después de su cuadro final |
| Play On Start | Inicia 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
| Recurso | Límite |
|---|---|
| Mallas con skinning por escena | 16 |
| Huesos por recurso | 64 |
| Clips por recurso | 16 |
| Vértices por recurso | 4,096 |
| Índices por recurso | 12,288 (4,096 triángulos) |
| Datos de geometría por recurso | 128 KiB |
| Datos de geometría por escena | 192 KiB |
| Búfer temporal de deformación compartido | 64 KiB |
| Datos de matrices por recurso | 192 KiB |
| Datos de matrices por escena | 256 KiB |
| Nombre del clip | Máximo de 24 caracteres |
| Nombre del hueso | Má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
Animatorresuelva 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.