I want to know what options (or shaders) to set so that my OpenGL game looks like Playstation 1 game. I know it probably can not be achieved 100 % because PSX used television and television renders differently that monitor. Thanks. :)
In my opinion, the most important bits to make an OpenGL scene look like a PSX scene would be to make sure the filtering is turned off (PS1 only had nearest neighbour), and turn off Z buffering (there wasn't any) and render your scene with painters algorithm.
The lighting was only per vertex, in fact there actually wasn't any lighting hardware only gouraud shaded vertex colouring. The lighting was software driven so you could do anything within the limitations of the CPU time, of which there wasn't much spare for clever advanced things like "lighting". :) We managed to get specular at one point, but as it was per vertex it made the scene look sparkley so we dropped it. We never managed to get specular to work with skinned meshes as blending normals and then using them just took too much time.
The PS1 also had a bit of texture swim, I'm not sure how you'd implement that with OpenGL, but if you're after an authentic experience, maybe just trying to make the UVs breakdown when they're near the screen edge would give a reasonable approximation.
I'd also recommend you look at the vertex transforms: the PS1 didn't have floats, so the rendering took place with fixed point pipelines, this is the cause of the jittery motion when playing animations. There were only so many positions a vertex could be in, and at 16bit fixed point, that wasn't even all that many positions. Have a watch of a few PS1 youtube videos to get an idea for how it affected the game, http://www.youtube.com/watch?v=RSV4IBa1pMI you can see here that it means that straight lines jitter around when the camera is close to horizontal. I think a good way of emulating this would be to transform your world in software (just like the PS1 did) and always output whole number screen coordinates to the emulated screen size (which was one of the major reasons why the polys jittered around, they couldn't be rendered to sub-pixels).
Texture swim was due to the PS1 having NO 3D interpolation at all. As mentioned by user712092, the affine renderer could only interpolate in screen space so we ended up with our diagonals all wrong. This can be emulated by hand transforming the scene, and discarding the final Z value in your vertex after you have divided the x and y screen coordinates by that z value
|show 1 more comment|