Saltar al contenido principal

Renderizado y creación de niveles para PS1

Esta página explica la idea más importante detrás del flujo de trabajo de PS1 de Polygon Engine:

El editor permite trabajar con primitivas, pero la compilación debe adaptar la geometría a PS1.

Por qué las escenas fallan en PS1​

La GPU de PlayStation dibuja primitivas 2D ordenadas. No resuelve la visibilidad con un z-buffer.

Esto crea problemas recurrentes cuando un nivel es creado a partir de primitivas grandes y escaladas:

  • las piezas del suelo luchan entre sí,
  • las caras de la pared se superponen incorrectamente,
  • La geometría desaparece cerca de la cámara
  • grandes puntales redondeados leídos como cajas o prismas,
  • reparar un artefacto a menudo reintroduce otro.

Estos síntomas pueden venir de la geometría fuente, el orden de dibujo, el recorte o la precisión numérica. Revisa el modelo y la compilación actual antes de cambiar UV o invertir caras; ver un defecto no identifica por sí solo su causa.

Lo que Polygon Engine protege automáticamente​

Polygon Engine no agrega un búfer z al PlayStation. Prepara la geometría y utiliza alternativas deterministas alrededor de los modos de falla que puede identificar.

Proyección y recorte seguros​

Los triángulos y quads usan la ruta GTE normal mientras su proyección es segura. Si la profundidad desbordaría el divisor de perspectiva o el GTE informa de coordenadas de pantalla saturadas, el tiempo de ejecución cambia esa primitiva a una ruta de CPU limitada. El polígono se recorta contra los planos de vista cercana, lejana, izquierda, derecha, superior e inferior antes de que se emitan los paquetes.

Los bordes de recorte compartidos usan una intersección canónica de punto fijo. Por lo tanto, los polígonos adyacentes calculan el mismo vértice recortado incluso cuando su devanado de borde es opuesto. Esto evita que una costura de la pared o del piso se abre solo porque la cámara cruzó el plano cercano.

Cuando el redondeo a píxeles vuelve ambigua la orientación de una cara vista de lado, el renderer comprueba su orientación original en 3D antes del recorte. Una cara visible válida no necesita material de doble cara para superar ese caso. Las vistas del editor comparten el criterio de recorte y no desplazan geometría para imitar la deformación de texturas.

Continuidad de superficie generada​

Los pisos y paredes estáticos incorporados se convierten en celdas de superficie conformes:

  • Las células adyacentes comparten límites de subdivisión,
  • Las células de superficie permanecen en PS1 quads nativos donde la trayectoria del material lo permite,
  • Los trozos espaciales utilizan orígenes locales fragmentados para mantener la precisión del vértice lejos del mundo cero.
  • Los límites de visibilidad permanecen en el espacio del mundo, por lo que los trozos distantes rebasados no se sacrifican como si estuvieran cerca del origen.
  • y una superficie empotrada cubre poros de color de fondo entre las celdas del piso o la pared.

Estas reglas se aplican a las superficies generadas a partir de las primitivas del editor. Una malla importada sigue necesitando una revisión de geometría y presupuesto; no se convierte automáticamente en un nivel optimizado para PS1.

Durante la compilación también se pueden combinar superficies estáticas opacas cercanas que usen materiales compatibles. Esto reduce el trabajo de renderizado sin obligarte a unir los GameObjects que editas. Por eso, la cantidad de mallas después del procesamiento puede diferir de la cantidad de objetos de la escena. Mantén separada la geometría móvil e interactiva y sigue midiendo la vista más exigente del nivel.

Reparación de T-junción​

La importación de modelos y la exportación de Level Builder detectan vértices que se encuentran en otro borde triangular y dividen ese borde determinísticamente. Los nuevos vértices interpolan los normales y los UV originales. Esto cierra una fuente común de grietas de un píxel sin descartar el mapeo de texturas creado.

La reparación puede aumentar el número de vértices y triángulos, por lo que las estadísticas posteriores a la importación y el presupuesto posterior al preprocesamiento siguen siendo la fuente de la verdad.

Subdivisión adaptativa según la cámara​

Los triángulos y quads con textura pueden subdividirse al dibujarse cuando su tamaño proyectado y variación de profundidad predicen distorsión afín visible. La decisión usa tamaño en pantalla y profundidad relativa, no un tamaño fijo de modelo ni una lista de props del demo. Las superficies amplias cercanas suelen necesitar más detalle que las lejanas o estrechas; una superficie frontal con poca variación de profundidad puede no necesitarlo, incluso de cerca.

Es automático en las vistas del editor y el renderer de PS1. No hay una casilla por modelo ni un control de distancia de subdivisión. Interpola los UV existentes y conserva las mallas fuente, islas UV y geometría de colisión. El trabajo extra está limitado por objeto y cuadro; al agotar ese presupuesto, se conserva una representación menos subdividida. Puede quedar deformación y movimiento por píxeles enteros, especialmente en vistas con muchos objetos.

En PS1, el presupuesto de subdivisión opcional por cuadro también se adapta al costo medido de CPU. Una carga alta sostenida reduce las subdivisiones adicionales; el tiempo libre sostenido las recupera gradualmente. Conserva las caras base y los UV originales, a cambio de reducir parte de la corrección de perspectiva cuando hay mucha carga. No baja la resolución de las texturas ni garantiza un frame rate fijo.

No subdividas uniformemente cada modelo para activar esta función. No aumenta la resolución de las texturas, no repara UV incorrectos ni garantiza ordenar perfectamente superficies que se intersectan. Mide las vistas más exigentes moviendo la cámara: los triángulos fuente no incluyen todo el trabajo de recorte y subdivisión durante el renderizado.

Precisión de orden y renderizado interior local​

La profundidad 3D se mapea a través de la parte de escena completa de la tabla de ordenamiento después de los depósitos de IU reservados. Por lo tanto, los objetos cercanos conservan una resolución de profundidad útil en lugar de colapsar en el límite de la interfaz de usuario. Cuando las superficies comparten un cubo, los límites de malla orientados proporcionan una mejor pista de orden de objetos que la altura de una esfera sola.

Las caras opacas que delimitan el recinto, como ciertos pisos y paredes, se ordenan detrás de los props cuando los límites de la escena permiten demostrar esa relación. La regla también se aplica en el editor y se conserva al subdividir. No convierte cualquier superficie plana en fondo: una mesa, repisa o superficie inclinada no puede depender de ella para ocultar intersecciones. Evita compensar un ángulo de cámara concreto con ajustes globales de profundidad.

Las mallas que solo actúan como trigger pueden representar temporalmente caras interiores cuando la cámara está dentro de su volumen de procesamiento. La geometría sólida normal mantiene el descarte de caras posteriores, por lo que esta excepción no duplica silenciosamente el costo del paquete de cada pared.

La niebla de distancia se evalúa desde cada vértice recortado o subdividido en punto fijo. Los pisos y paredes grandes mantienen un gradiente de profundidad en lugar de heredar un valor de niebla del origen del objeto.

Corregir el flujo de trabajo en Polygon Engine​

1. Autor rápido en el editor​

Uso:

  • Plane para suelos,
  • Cube para paredes y puertas,
  • Elementos de interfaz de usuario creados para menús y HUD,
  • Lua para estaciones interactivas y flujo.

2. Construido específicamente para PS1​

Durante la exportación de PS1, Polygon Engine puede:

  • preprocesar geometría estática incorporada a mallas escalonadas,
  • dividir las superficies generadas en celdas conformes y trozos espaciales,
  • reparación de uniones T en mallas importadas y Level Builder,
  • preservar los materiales y el diseño de la escena,
  • empaquetar una escena de inicio, manifiesto y conjunto de recursos compatible con el tiempo de ejecución.

3. Ejecutar el resultado fragmentado en hardware​

Esta es la diferencia clave entre:

  • una escena que solo se ve correcta en el editor, y
  • Una escena que sobrevive a la orden, recorte y rasterización afín de la PS1 real.

Reglas para una geometría estable​

Pisos​

  • Evita un piso coplanar gigante debajo de todo el mapa.
  • Prefieren las regiones de piso lógico que coincidan con las habitaciones, los pasillos y los umbrales.
  • Deje que la PS1 cree superficies de piso estáticas en lugar de enviar primitivas gigantes en bruto.

Paredes​

  • Prefiero los segmentos de pared modulares.
  • Evita las caras internas ocultas donde se encuentran los cubos adyacentes.
  • Usa el grosor de la pared y los límites de los trozos que se alinean con los límites del piso cuando sea posible.

Props​

  • Si un accesorio necesita una silueta redondeada, usa una malla de autor de bajo poli.
  • Evita depender de una cápsula densa incorporada como un objeto héroe final de PS1.

Geometría cercana a Camera​

  • El tiempo de ejecución recorta polígonos inseguros, incluida la geometría de agarre lateral, en lugar de confiar en las coordenadas GTE saturadas.
  • Las superficies más pequeñas y bien diseñadas aún producen un ordenamiento más estable y una interpolación de niebla/iluminación más útil que los polígonos gigantes.
  • No usa el recorte como sustituto de la colisión razonable de la cámara y las dimensiones de nivel de conciencia de plano cercano.

Intersecciones y transparencia​

  • Dos objetos que se cruzan físicamente pueden tener un orden de dibujo ambiguo; la tabla de ordenación clasifica primitivas pero no resuelve la profundidad por píxel.
  • Evita las superficies duplicadas coplanarias y las mallas decorativas enterradas casi por completo dentro de otro objeto.
  • Mantén las superficies semitransparentes separadas de las paredes y los pisos opacos. Pruébelos desde todos los lados de la cámara.
  • Prefiere una malla coherente cuando un pequeño detalle de inserción siempre debe aparecer como parte de una superficie más grande.

Lo que no está garantizado​

La protección anterior evita fallos numéricos, de recorte, de costura y de profundidad gruesa conocidos. No garantiza el comportamiento del renderizador de escritorio para cada escena.

  • Las tablas de pedido no pueden clasificar perfectamente polígonos que se cruzan entre sí.
  • El mapeo de texturas afines todavía se deforma a través de polígonos grandes.
  • La semitransparencia sigue dependiendo del orden.
  • La subdivisión excesiva puede desbordar los presupuestos de triángulos y paquetes.
  • Los datos de la Room/Portal no válidos fallan intencionalmente para abrir la visibilidad; no se convierten en oclusión exacta.

Valida la escena actual, inspecciona el informe posterior al preprocesamiento y prueba la CUE empaquetada mientras mueve la cámara a través de las distancias de visualización más cercanas. Para conocer las reglas específicas de visibilidad, consulta Visibilidad y descarte de geometría.

Guía de UI​

Para el envío UI:

  • en la escena,
  • mantenerla bajo el límite de tiempo de ejecución,
  • prefieren Text, Button, Image y Panel,
  • reserva UI.DrawText() para superposiciones de depuración temporales.

El escaparate incluido sigue esta regla:

  • menú,
  • paneles de inventario y baúl,
  • ayudas de interacción en el nivel,
  • diálogos animados, pausa y pantalla final.

Lo que el showcase demuestra​

El escaparate en primera persona está destinado a validar:

  • renderizado modular PS1-safe,
  • colisiones y lógica de disparo,
  • retroalimentación de audio,
  • puertas, tapas de baúl y paneles de diálogo animados,
  • transferencias de inventario y estado de sesión entre escenas,
  • La interfaz de usuario de autor fluye del menú al juego.

Last Exit no guarda el inventario en Memory Card. Usa las guías separadas de guardado y sistemas avanzados para agregar persistencia.

Si un nivel de presentación no sobrevive a la exportación de PS1, la solución generalmente debería ocurrir en uno de estos dos lugares:

  1. autoría y estrategia de preprocesamiento, o
  2. Política de recorte/eliminación de runtime.

La primera opción suele ser la más segura. Los respaldos en tiempo de ejecución protegen el contenido válido en casos de borde de hardware; no deben llevar un diseño de nivel innecesariamente ambiguo.