Quiero saber qué opciones (o sombreadores) configurar para que mi juego OpenGL se parezca a Playstation 1. Sé que probablemente no se pueda lograr al 100% porque PSX usó la televisión y la televisión representa de manera diferente ese monitor. Gracias. :)
13
Respuestas:
En mi opinión, los bits más importantes para hacer que una escena de OpenGL parezca una escena de PSX sería asegurarse de que el filtro esté desactivado (PS1 solo tenía el vecino más cercano) y desactivar el almacenamiento en Z (no había ninguno) y renderizar su escena con el algoritmo de pintores.
La iluminación era solo por vértice, de hecho, en realidad no había ningún hardware de iluminación solo coloración de vértices sombreada con gouraud. La iluminación estaba impulsada por software para que pudieras hacer cualquier cosa dentro de las limitaciones del tiempo de CPU, de las cuales no había mucho de sobra para cosas avanzadas e inteligentes como "iluminación". :) Nos las arreglamos para obtener especular en un punto, pero como era por vértice, la escena se veía brillante, así que la dejamos caer. Nunca logramos obtener especular para trabajar con mallas desolladas como mezclas normales y luego usarlas solo tomó demasiado tiempo.
La PS1 también tuvo un poco de textura, no estoy seguro de cómo implementar eso con OpenGL, pero si buscas una experiencia auténtica, tal vez solo intentes hacer que los UV se descompongan cuando estén cerca del borde de la pantalla daría una aproximación razonable.
También te recomiendo que mires las transformaciones de vértices: la PS1 no tenía flotadores, por lo que el renderizado se realizó con tuberías de punto fijo, esta es la causa del movimiento nervioso al reproducir animaciones. Había solo tantas posiciones en las que podía estar un vértice, y en un punto fijo de 16 bits, eso ni siquiera eran todas esas posiciones. Mire algunos videos de YouTube de PS1 para tener una idea de cómo afectó el juego, http://www.youtube.com/watch?v=RSV4IBa1pMIPuede ver aquí que significa que las líneas rectas fluctúan cuando la cámara está cerca de la horizontal. Creo que una buena forma de emular esto sería transformar su mundo en software (como lo hizo la PS1) y siempre generar coordenadas de pantalla de números enteros al tamaño de pantalla emulado (que fue una de las principales razones por las que las polis se movieron, no se pudo procesar en subpíxeles).
EDITAR
La natación de textura se debió a que la PS1 NO tenía interpolación 3D en absoluto. Como mencionó el usuario712092, el renderizador afín solo podía interpolar en el espacio de la pantalla, por lo que terminamos con nuestras diagonales completamente mal. Esto se puede implementar activando
noperspective
sus calificadores de interpolación, o emulando a mano transformando la escena y descartando el valor Z final en su vértice después de haber dividido las coordenadas de pantalla x e y por ese valor zfuente