¿Cómo emular los gráficos de PSX con OpenGL?


13

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. :)


1
Puede encontrar información útil sobre el hardware en la página Wiki .
Jonathan Connell

2
Recuerdo que recientemente había un enlace a alguien que había creado sombreadores para replicar la sensación CRT de los juegos SNES en una PC con monitor LCD. Yo estaba convencido. altdevblogaday.com/2011/07/18/…
dascandy

Respuestas:


24

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 noperspectivesus 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 z


Nice insight;)
Jonathan Connell

@Richard Texture nadar? ¿Es parcial o completa la falta de corrección de perspectiva ? Por ejemplo, Quake hizo corrección de perspectiva cada N píxeles.
user712092

@ Richard Entonces significa que tengo que recurrir a a) sombreadores de vértices para emular un punto fijo de 16 bits b) no estoy seguro de si glVertex3s lo resuelve c) hay algunas bibliotecas OpenGL de punto fijo.
user712092

3
Guau. Cómo sabes todo esto?
ashes999

@ ashes999 He sido desarrollador profesional de juegos durante más de 10 años.
Richard Fabian
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.