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

  • 1
    \$\begingroup\$ You could find some useful hardware info on the Wiki page. \$\endgroup\$ – Jonathan Connell Jul 21 '11 at 14:29
  • 2
    \$\begingroup\$ I recall there recently was a link to somebody who'd created shaders to replicate the CRT feel of SNES games on a PC with LCD monitor. I was convinced. altdevblogaday.com/2011/07/18/… \$\endgroup\$ – dascandy Jul 21 '11 at 16:35

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 implemented by turning on noperspective on your interpolation qualifiers, or 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

  • \$\begingroup\$ Nice insight ;) \$\endgroup\$ – Jonathan Connell Jul 21 '11 at 13:55
  • \$\begingroup\$ @Richard Texture swim? Is it partial or complete lack of perspective correction? For example Quake did perspective correction each N pixels. \$\endgroup\$ – user712092 Jul 21 '11 at 16:27
  • \$\begingroup\$ @Richard So it means that I have to resort to a) vertex shaders to emulate 16 bits fixed point b) not sure if glVertex3s solves it c) there are some fixed point OpenGL libraries. \$\endgroup\$ – user712092 Jul 21 '11 at 16:34
  • 3
    \$\begingroup\$ Wow. How do you know all this? \$\endgroup\$ – ashes999 Jul 22 '11 at 11:13
  • \$\begingroup\$ @ashes999 I have been a professional games developer for more than 10 years. \$\endgroup\$ – Richard Fabian Jul 23 '11 at 15:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.