Any chance you could make this open source?
Godot PSX Style Demo
Godot PSX Style Demo
A collection of shaders and materials for Godot engine that aim to recreate the following aspects of the PS1 aesthetic:
- Vertex "snapping"
- "Wobbly" texures through affine texture mapping
- Limited color depth
- Hardware dithering to hide color banding
- Shiny chrome-like metallic surfaces
- Billboard sprites
- Fog to limit draw distance
- Space: Toggle camera and object movement
- R: Reset rotation
Tips for best results
- Use low poly models
- Prefer smooth-shading over flat-shading wherever possible
- Don't be afraid to include extra edge loops to smooth out texture distortion in your geometry! PS1 levels often had much higher polycounts than you might expect!
- Keep textures as low resolution as you can
- Make sure filtering and mip-maps are both disabled
- Rely on a mix of vertex colours and texture maps, instead of higher detailed texture maps wherever possible
- Posterizing your textures with a depth of 15 or 16 before import goes a long way to making them feel more "PS1"
- Keep your internal resolution low
- Common PS1 resolutions were 256×240, 320x240 and 512x240 (Source)
- That being said, you can easily go widescreen by using a 16:9 resolution with similar height
- Use as basic of a lighting set up as you can get away with
- Modern lighting techniques are a very easy way to break the illusion of appearing like early 3D!
- Where possible, prefer to use white ambient light, with vertex colours on geometry to fake lighting
- Prefer additive blending to transparent blending
Originally based on: https://github.com/marmitoTH/godot-psx-shaders
Floor texture (available under CC-0): https://stealthix.itch.io/rpg-nature-tileset
Log in with itch.io to leave a comment.
It is! It’s available on GitHub under MIT License
Excellent stuff, but there is a problem with the lit alpha scissor shader; fog color is applied over the alpha areas.
The lit transparent version doesn't have this problem, so presumably, it is a case of oversight with a simple fix?
[EDIT] I have fixed it by taking the code from the working transparent shader and adding
uniform float alpha_scissor : hint_range(0, 1) = 0.1;
to the declarations, and
ALPHA_SCISSOR = alpha_scissor;
to the final fragment.
I also pasted the billboard stuff in there too, although I'm fairly clueless about shaders and just bumbled through this.
Thanks for pointing this out!