tipsy (tiny playstationy) is a PS1-like software renderer written in ~500 lines of C99.
Features all the charm of the original PS1, like:
- low resolution display (320x240)
- no texture filtering (pixelated textures)
- affine texture mapping (warped textures)
- no anti-aliasing (chunky edges)
- lack of subpixel rasterization (polygon jittering/wobble)
- old shading techniques (flat & Gouraud)
demo.mp4
Models, for educational purposes, can be found here: https://www.models-resource.com/playstation/
Building requires C99 compiler & OpenGL. Supported platforms & building prerequisites are provided below:
-
Linux
# ubuntu 22.04 sudo apt install -y build-essential libglu1-mesa-dev # fedora 37 sudo dnf install -y gcc mesa-libGLU-devel
-
MacOS
Install Xcode. MacOS Monterey ships with (now deprecated) OpenGL by default.
-
Windows (untested)
Get the source & run:
make
./tipsy path/to/wavefront.obj
Hold down the left mouse button and drag to rotate.
Keybindings:
- Left/Right: rotate horizontally
- Up/Down: rotate vertically
- W: toggle wireframe drawing
- Z: toggle z-buffering
- P: toggle perspective correct texture mapping (default = off)
- C: toggle back/front face culling (default = back)
- J: toggle jittering (default = on)
- F: toggle vertical flip
- R: reset model position
- 1: switch off shading (default)
- 2: switch to flat shading
- 3: switch to gouraud shading
- Building a PS1 style retro 3D renderer
article by David Colson.
Polygon jittering imitation technique was taken from there. - Playstation Architecture
article by Rodrigo Copetti.
Provides a good overview of the PSX architecture. - gel by Gustav Louw. Similar project with the same spirit.
- tigr by Erik Agsjö. The graphics library the project relies on.