Saltar al contenido principal

PS1 Asset Optimizer

PS1 Asset Optimizer crea una copia con menos polígonos de un OBJ o FBX estático para usarla durante la ejecución, conservando el archivo fuente del proyecto y una receta de importación reproducible. Está pensado para recursos modernos cuya silueta resulta útil, pero cuya topología es demasiado densa para el presupuesto de producción de PlayStation 1.

El optimizador es un simplificador restringido, no un reemplazo de arte con un solo clic. Se detiene antes de que un objetivo solicitado al alcanzarlo viole la topología habilitada, UV, material, simetría, normal o restricciones de desplazamiento de vértices.

Abre el optimizador​

  1. Importe un OBJ o FBX estático en Assets/Models/.
  2. Selecciona la fuente en el panel Project.
  3. En el Modelo Inspector, haz clic en Open PS1 Asset Optimizer.
  4. Selecciona el Asset Role más cercano.
  5. Comienza desde Usa Recommended Target, luego ajusta el control deslizante del triángulo logarítmico si el recurso necesita una compensación diferente.
  6. Inspecciona la vista previa de origen, el informe de compatibilidad y los recuentos de comparación en la misma ventana del optimizador, luego haz clic en Generate Optimized Output.
  7. Mantén la ventana abierta mientras se ejecuta la generación. Compare Source y Generated con los controles de vista previa compartidos, luego ajusta y genere otro pase si es necesario.

El optimizador es un espacio de trabajo no modal que puedes mover y redimensionar. No oculta ni bloquea el Inspector que queda detrás y siempre puede cerrarse con la X de la barra de título, Close Window o Escape. En ventanas anchas, la vista previa y el estado aparecen junto a la receta; en ventanas compactas se separan en pestañas para evitar recortar los controles.

La generación se ejecuta como una importación de fondo. El optimizador mantiene visible su pie de página de acción y muestra el progreso más una acción Cancel; la cancelación se detiene antes de que se publique un candidato parcial. Puede cerrar el optimizador mientras el trabajo continúa. Otras ediciones e importaciones de recursos esperan la transacción del modelo, evitando que dos trabajos sobrescriban la base de datos de recursos simultáneamente.

El Inspector ofrece automáticamente el optimizador para modelos estáticos especialmente densos. Los archivos importados elegidos fuera del proyecto se copian en Assets/Models/ antes de procesarlos. La fuente nunca se reescribe; solo se reemplaza el .msh generado bajo Library/.

Recomendaciones y roles de recursos​

La recomendación combina el rol de modelo con el presupuesto configurado por triángulo de malla del proyecto.

RolContenido previstoRecomendación predeterminada
AutoContenido desconocido o mixtoUtiliza el recuento de triángulos fuente y el presupuesto del proyecto
HeroObjeto focal de primer planoHasta 2,000 triángulos
CharacterSilueta de estilo animado legible, importada como estáticaHasta unos 1,800 triángulos
PropObjeto del mundo comúnHasta 800 triángulos
EnvironmentSección de nivel modularUtiliza el límite suave de malla de proyecto, limitado a 2,048

Estos valores son recomendaciones, no nuevos límites de hardware. El recuento de triángulos de escena, los cambios de material, las páginas de textura, el sobredibujado, el comportamiento de la tabla de ordenamiento y el trabajo de la CPU aún determinan si el recurso es apropiado.

Controles de calidad y preservación​

El optimizador utiliza el colapso de aristas basado en error cuádrico determinista en el núcleo de topología OpenMesh con restricciones Polygon Engine explícitas. OpenMesh se incluye bajo su licencia BSD y se muestra en los avisos de terceros del producto.

ControlEfecto
QualitySelecciona sensibilidad de borde más valores predeterminados normales/errores conservadores, equilibrados o agresivos
SymmetryDetecta automáticamente o preserva explícitamente un plano de espejo X, Y o Z
Preserve BoundariesEvita que las fronteras abiertas se derrumben
Preserve UV SeamsProtege las islas UV incompatibles y rechaza los triángulos UV sobrevivientes que se colapsan, voltean o exceden el cambio de área permitida
Preserve Hard EdgesProtege las discontinuidades normales agudas
Preserve Material BoundariesMantiene las regiones de material separadas
Max Normal DeviationSe detiene colapsos que rotan superficies demasiado lejos
Max Vertex DisplacementLímites acumulados de desplazamiento de vértice colapsado como un porcentaje de los límites de la fuente diagonal

La simetría Auto permite los colapsos emparejados solo cuando la fuente tiene un vértice reflejado y una correspondencia facial confiables. Un eje de simetría explícito falla si esa correspondencia no puede ser garantizada. Los vértices del plano central permanecen en el plano.

El optimizador siempre conserva la cantidad de componentes conexos. Cuando Preserve Boundary Loops está activado, también conserva la cantidad de componentes de los contornos de borde. En ese modo, «sin agujeros nuevos» significa que un resultado aceptado no crea ni elimina esos componentes de contorno. Si la geometría fuente no es manifold o no es válida, se rechaza con un mensaje que permite corregirla, en lugar de intentar interpretarla por suposición.

Vista previa y resultados​

La ventana del optimizador mantiene la ruta del recurso, los recuentos de origen/generados/recomendado, el informe completo de compatibilidad de PS1, los errores de importación, los controles de conservación y la vista previa juntos. Cuando no existe ningún candidato generado válido, la primera vista del optimizador selecciona Source automáticamente en lugar de mostrar una vista previa generada vacía. Después de la generación, cambia entre Source y Generated con la misma órbita y modo de visualización. Se toman muestras de fuentes muy densas para mantener la respuesta de la comparación. La vista previa de origen muestreada se almacena en caché en Library/model_previews/, por lo que la comparación permanece disponible después de reiniciar el editor y se regenera cada vez que se reimporta el modelo. Uso:

  • Textured + Wireframe para la topología sobre el material final;
  • Wireframe para densidad y triángulos largos;
  • Silhouette para el contorno exterior;
  • UV Density para las diferencias relativas de cobertura UV; el magenta marca un triángulo geométrico o UV degenerado;
  • PS1 Quantized para la apariencia de vértice orientado al tiempo de ejecución.

El estado del resultado visible y los metadatos almacenados registran si se alcanzó el objetivo, simetría detectada, vértices y triángulos de fuente/salida, el límite de desplazamiento de vértice acumulado y una razón de parada. Si no se alcanzó el objetivo, reduce las restricciones de conservación solo después de verificar por qué es importante la característica protegida.

Límites de fuente y tiempo de ejecución​

La malla de trabajo de importación utiliza índices de 32 bits para que se pueda analizar y simplificar una fuente superior a 65.535 vértices. La PS1 .msh generada todavía usa índices de 16 bits. La generación falla antes de reemplazar la salida anterior si la malla optimizada permanece por encima de 65.535 vértices o contiene índices no válidos.

La malla generada también está tapada en los 2.048 triángulos clasificables del tiempo de ejecución. Se trata de un contrato de salida dura, incluso si un proyecto aumenta su límite suave de autoría. La reparación de la unión en T se contabiliza después de la simplificación; si la reparación eleva el recuento final por encima del objetivo solicitado, el resultado se marca como el mejor resultado válido, y se rechaza un resultado superior a 2.048.

La reparación de la unión en T y los diagnósticos detallados de la topología de PS1 se ejecutan después de la simplificación. Los candidatos extremadamente densos pueden omitir diagnósticos costosos e informar esa decisión en lugar de congelar el editor.

Reimportación y Recetas​

La optimización es parte de la receta de importación del modelo. Las siguientes opciones se almacenan en los metadatos de origen y se incluyen en el hash de configuración del importador:

  • estado activado y objetivo de triángulo solicitado;
  • rol y calidad;
  • modo de simetría;
  • límite, costura UV, borde duro y preservación del límite material;
  • Límites de desviación normal y desplazamiento de vértices.

Volver a importar el archivo de origen reproduce la receta. Cambiar cualquiera de estos ajustes invalida el resultado generado. La malla, el nuevo material opcional, los datos esqueléticos, la base de datos de recursos y los metadatos se guardan como una transacción que puede revertirse. Si la conversión no es válida o falla el guardado, se conserva el conjunto generado anterior para evitar mezclar archivos antiguos y nuevos.

Alcance actual​

  • El triángulo estático solo engrana.
  • OBJ y fuentes estáticas FBX compatibles con el importador de modelos normal.
  • Se consideran las posiciones existentes, las normales, los UV y las regiones materiales.
  • Las fuentes con varias ranuras de material deben mantener Single Material habilitado; las regiones de material están protegidas durante la reducción, luego se contraen en el único material actualmente publicado por el importador de modelos.
  • La optimización de FBX con skinning está bloqueada porque reducir la topología también requeriría reasignar cuidadosamente los pesos de los huesos y las animaciones.
  • Esta función no crea coordenadas UV, no retopologiza geometría arbitraria no manifold, no optimiza las colisiones por separado ni demuestra que el orden final de dibujo sea correcto en el hardware.

Para contenido animado, reduce la malla en el DCC y sigue Animación esquelética. Para conocer los presupuestos de ejecución, consulta Restricciones y presupuestos del hardware de PS1.

Solución de problemas​

Objetivo no alcanzado​

Revisa el motivo por el que se detuvo la reducción. Un borde protegido, una separación entre materiales, una costura UV, una arista marcada, un par simétrico o los límites de desviación normal y desplazamiento pueden impedir alcanzar el objetivo sin dañar el modelo. Primero aumenta el objetivo de triángulos. Desactiva una restricción solo después de inspeccionar la vista previa correspondiente.

Esto es distinto de un error de importación: un resultado válido puede tener más triángulos de los solicitados. Las costuras UV, las aristas marcadas y una cantidad alta de polígonos en el archivo original no demuestran por sí solas que el modelo esté dañado. La salida final debe respetar los límites de ejecución.

La simetría no puede ser preservada​

Cómo identificarlo: Revisa si Symmetry está forzado a X, Y o Z. Un modelo puede parecer simétrico sin que sus vértices o conexiones entre caras coincidan a ambos lados de ese eje. El diagnóstico puede incluir Requested symmetry cannot be guaranteed.

Cómo corregirlo: Elige Auto u Off y vuelve a generar. Si necesitas simetría exacta, corrige la geometría y la topología reflejadas en tu herramienta de modelado y vuelve a exportar. Cambiar el objetivo de triángulos no corrige un par de vértices que no tiene su equivalente reflejado.

La geometría fuente no es manifold o no es válida​

Empieza por leer el error completo en el Inspector del modelo o en la ventana del optimizador; usa Copy Import Error para reportarlo. Algunas versiones muestran el mensaje genérico Asset Optimizer requires orientable manifold triangle topology. Las revisiones siguientes ayudan a identificar la causa de ese mensaje y de los diagnósticos más específicos. Trabaja sobre un respaldo del modelo original, no sobre la malla generada en Library/.

Cuando un diagnóstico incluye números de triángulos o vértices importados, estos corresponden a la malla convertida, no a los identificadores de caras de Blender. Las coordenadas pueden incluir las transformaciones de importación y la unión de vértices. Por eso una cara cuadrangular duplicada puede reportarse como dos triángulos duplicados. Las líneas mencionadas en errores de OBJ corresponden al archivo de texto exportado.

Un plano abierto o una habitación con superficies orientadas hacia dentro son válidos. No necesitan grosor ni normales hacia fuera para cumplir los requisitos del optimizador. El problema es una conexión inválida o una orientación inconsistente, no un borde abierto intencional.

Caras duplicadas o superpuestas​

Cómo identificarlo: Inspecciona la superficie sospechosa en wireframe. Oculta su objeto, o una cara seleccionada en Edit Mode, y revisa si queda otra superficie ocupando el mismo espacio. Dos objetos separados pueden contener geometría idéntica aunque tengan nombres distintos.

Cómo corregirlo: Elimina la copia sobrante y conserva la superficie deseada con sus UVs. Revisa tanto la lista de objetos como la geometría de cada uno. Weld Vertices del engine une vértices, pero no elimina caras duplicadas. Merge by Distance de Blender puede ayudar a limpiar vértices duplicados, pero debes revisar las caras después. Reducir el tamaño del modelo o duplicarlo no elimina sus polígonos sobrantes.

Más de dos caras comparten una arista​

Cómo identificarlo: En Edit Mode de Blender, activa la selección de vértices o aristas y usa Select > Select All by Trait > Non-Manifold. Revisa Multiple Faces; Boundaries también selecciona bordes abiertos válidos, por lo que esa selección no significa por sí sola que el modelo sea inválido. Consulta las opciones de selección de Blender.

Cómo corregirlo: Elimina caras internas sobrantes o reconstruye/separa la unión para que cada arista pertenezca a una cara de borde o a dos caras adyacentes. Mantén separadas las superficies que deban ser independientes. Si la importación vuelve a unirlas, revisa sus posiciones y Weld Threshold en lugar de seguir uniendo toda la geometría.

Superficies unidas solo por un vértice​

Cómo identificarlo: Revisa los vértices no manifold seleccionados y el wireframe que los rodea. Busca superficies que solo se conecten en un punto, sin compartir una arista. Un error de conexión puede señalar el triángulo donde se detuvo el proceso sin demostrar qué edición del modelo originó el problema.

Cómo corregirlo: Separa el vértice compartido si las superficies deben ser independientes, o reconstruye la unión deseada con caras y aristas compartidas correctamente. Comprueba que Weld Vertices no vuelva a crear la conexión no deseada al reimportar. Si las superficies independientes deben ocupar exactamente el mismo punto, usa recursos de modelo separados o desactiva la unión de vértices después de revisar la geometría. Separarlas en objetos dentro del mismo modelo exportado puede permitir que el importador vuelva a unirlas. Esto no sustituye la eliminación de caras duplicadas no deseadas.

Caras vecinas con orientación inconsistente​

Cómo identificarlo: Activa la visualización Face Orientation en Blender y revisa las caras vecinas desde el lado que debe ser visible. Busca una cara aislada orientada al revés, no simplemente caras rojas al mirar una superficie válida desde atrás.

Cómo corregirlo: Selecciona la geometría conectada afectada en Edit Mode y usa Mesh > Normals > Recalculate Outside o Recalculate Inside, según la superficie que necesites. Revisa el resultado y voltea caras individuales si hace falta, especialmente en geometría plana abierta. Recalcular las normales de sombreado en el engine no invierte el orden de los vértices de las caras. Voltear todo el modelo tampoco resuelve una diferencia local de orientación.

Caras colapsadas o un umbral de unión excesivo​

Cómo identificarlo: Busca triángulos que repitan un vértice, aristas de longitud cero o caras reducidas a una línea o un punto. Si solo falla con Weld Vertices, compara Weld Threshold con el tamaño del detalle más pequeño que debas conservar.

Cómo corregirlo: Elimina o reconstruye la cara colapsada. Degenerate Dissolve de Blender puede ayudar con la geometría degenerada seleccionada; usa un umbral pequeño e inspecciona el resultado. Reduce Weld Threshold si está uniendo esquinas distintas. Para el error diferente collapses at PS1 vertex precision, consulta las indicaciones de precisión.

Referencias a vértices, posiciones, normales o UVs inválidos​

Cómo identificarlo: Lee qué triángulo, vértice, atributo o línea del OBJ se menciona. Una referencia a un vértice inexistente indica datos de cara dañados. NaN o infinito significa que una posición, normal o UV contiene un valor numérico inválido; no significa simplemente que la textura se vea estirada. Un error de malla vacía puede indicar que solo se exportaron aristas, curvas u objetos vacíos.

Cómo corregirlo: Repara la cara o geometría afectada, revisa transformaciones y modificadores, recalcula las normales inválidas o vuelve a desplegar los UVs afectados, según corresponda. Exporta los objetos de malla seleccionados con caras a un OBJ/FBX nuevo. Si vuelve a fallar, reporta el archivo exportado, el error completo y los ajustes de importación. No intentes adivinar y modificar índices numéricos en el archivo de malla generado.

Malla con skinning enviada al optimizador estático​

Cómo identificarlo: Revisa si el FBX contiene pesos de skinning o vínculos con huesos. Un personaje exportado en una pose inmóvil puede conservar estos datos. El optimizador puede indicar que la optimización estática está deshabilitada para modelos con skinning.

Cómo corregirlo: Para contenido animado, usa el flujo normal de importación FBX y reduce la malla en tu herramienta de modelado conservando los pesos; sigue la guía de Animación esquelética. Los controles del optimizador están deshabilitados para modelos con skinning. Si un recurso existente conserva una receta de optimización estática, importa el FBX animado como un recurso nuevo con los ajustes predeterminados. Para un objeto estático, exporta una malla estática separada sin datos de skinning. No elimines el rig de la única copia de un modelo animado.

Verificar el modelo corregido​

  1. Exporta el OBJ/FBX corregido y actualiza el archivo original en Assets/Models/.
  2. Usa Reimport, o Apply & Import si cambiaste ajustes de importación.
  3. Genera la salida optimizada y confirma que el error desapareció. Corregir un problema puede revelar otro; repite la revisión correspondiente si hace falta.
  4. Inspecciona Generated en wireframe y con texturas; después revisa los recuentos de salida y las advertencias de compatibilidad con PS1.
  5. Compila y prueba la escena afectada en DuckStation y en el hardware de destino.

Una conversión fallida conserva la última salida válida. Que una vista previa anterior siga visible no demuestra que el modelo corregido se haya aceptado.

La salida es válida, pero se ve mal en PS1​

Comprueba triángulos largos, recuento de materiales, filtrado de texturas y paletas, islas UV, superposición coplanar, cruces de plano cercano y comportamiento de tabla de ordenamiento. Usa el panel de control PS1 Budget, una compilación DuckStation empaquetada y hardware real representativo antes del envío.

Lista de control de producción​

  • conservar la fuente original bajo Assets/Models/;
  • comienza con el objetivo recomendado y revisa la razón de parada;
  • inspeccionar el wireframe, la silueta, la densidad UV y las vistas previas cuantificadas de PS1;
  • comparar los recuentos de fuente/salida y confirmar la asignación de material;
  • volver a comprobar la colisión si fue creado desde la geometría visual;
  • revisar la escena completa en el panel de control PS1 Budget;
  • validar la salida empaquetada en DuckStation y en el hardware previsto.