Godot PSX Style Demo
Godot PSX Style Demo
Available on GitHub (MIT License)
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
Demo Controls
- 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
Download
Download NowName your own price
Click download now to get access to the following files:
godot-psx-style-demo-linux.zip 16 MB
Version v1.3.3
godot-psx-style-demo-windows.zip 15 MB
Version v1.3.3
godot-psx-style-demo-v2.x_linux.zip 25 MB
Version v2.3.0
godot-psx-style-demo-v2.x_html5.zip 7.1 MB
Version v2.3.0
godot-psx-style-demo-v2.x_windows.zip 25 MB
Version v2.3.0
godot-psx-style-demo_v1.2_win.zip 12 MB
godot-psx-style-demo_v1.2_x11.zip 13 MB
godot-psx-style-demo_win_v1.3.zip 12 MB
godot-psx-style-demo_x11_v1.3.zip 13 MB
index.zip 4.1 MB
godot-psx-style-demo_win_v1.3.1.zip 13 MB
godot-psx-style-demo_x11_v1.3.1.zip 14 MB
Development log
- v1.3.1 ReleasedApr 30, 2022
- v1.3 ReleasedOct 14, 2021
- v1.2 - Graduation OverhaulJun 29, 2021
- v1.1 - Inktober 2020 Demo Disc UpdateNov 24, 2020
Comments
Log in with itch.io to leave a comment.
Trying to import this into my existing project. Copied the folder 'Shaders', but then I am confused with " 2. Add the
precision_multiplier
as afloat
shader global in Project Settings, ensuring it's value is minimum 0 (non-inclusive), and maximum 1 (inclusive).". What do you mean by this?Edit: I got it to work, my dumb ah just had to look at the demo project for reference :)
God, this looks incredible! Have you managed to get this to work on an actual PS1? Or know someone who has?
These are just shaders to emulate PS1 rendering quirks, actually running Godot on PS1 hardware would be a very different project (and probably impossible).
Ah... shame. There goes that idea.
First of all, thank you so much for the work!! The shader is amazing :)
I have a question though, I've noticed shadows are not being cast into meshes with this shader while the meshes do in fact cast shadows. Is there any way I could make the shadows visible?
I'm quite the beginner to shaders so it's probably way simpler or way more complex than im imagining, regardless, im probably missing something. In any case, thanks again for the amazing work!
UPDATE: After looking a bit into the documentation it was quite simple, I only needed to delete the shadows_disabled flag from the render mode on the psx_base shader, but be warned, this kinda breaks the lighting since the meshes are constantly shifting
Yeah, these shaders are not designed to play nice with lighting. For best results, keep lighting as static as humanly possible.
This is great, thanks! Do you know how to disable/reduce the warping effect (affine texture mapping?) that happens on textures though as you get close? I'm pretty new to this so I'm sure there's a simple solution that I just don't understand yet!
This is normal, try adding more edge loops to your mesh - polycounts were often a little higher than you’d expect to accommodate this.
If you want to disable it completely, comment out this line: https://github.com/MenacingMecha/godot-psx-style-demo/blob/91bd24988f70636efca505e2c8022b143b61780e/shaders/psx_base.gdshaderinc#L55
Thank you! That's very helpful and much appreciated
Terrific! This is a trully PSX-like looking demo!
This looks amazing! Any advice for getting started using this in a project?
Thanks!
For an existing project, copy-pasting the shaders and setting up the materials yourself using the demo as a reference.
For a completely new project, copy-paste the project itself and start making changes from there.
Don’t forget to include the license info in whatever it is you make.
how do you use this in a project? i can't figure out how to import it into godot
for 4.0: https://github.com/MenacingMecha/godot-psx-style-demo?tab=readme-ov-file#existing-projects
ballin!!
Nice!
This is immensely helpful. Thank you.
It's been a year (pretty much precisely) since I took a look at this. I see you've moved the color depth and dithering into postprocessing. It's now far more accurate as a result, but now we have lost the ability to dither only certain materials in our scene.
I'm guessing there was no way to get an accurate reduction in color depth without using postprocessing?
IIRC it was accurate dithering that led to moving it to a post process effect rather than object-level (had issues dithering between colours, and didn’t play nicely with transparency).
Wasn’t overly happy with cutting per-object dithering, but it was a relatively obscure hardware feature to begin with (so far you’re the first person to bring it up). Hopefully we’ll be able to get it back in 4.0 by rendering to a buffer to mask dithering, AFAIK that should do the job.
By any chance, do you still have the old version of the shader in one piece anywhere?
It’s all on the GitHub, check the older commits
Any chance you could make this open source?
It is! It’s available on GitHub under MIT License
https://github.com/MenacingMecha/godot-psx-style-demo
I'm slightly confused about the license. If I use this in my game, or some of it in my game, does that mean I have to make my game open source or make the code public?
Not at all! MIT license just requires that you place a copy of this license in a visible place somewhere (as in, “I used X code, here is the license”). Godot engine itself is also MIT license, so this is a requirement you have to fulfill when releasing a Godot engine game regardless.
Credits are a good place to dump this - self plug but I did this in one of my games if you want to see an example.
Thanks so much!
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.
Fixed https://github.com/MenacingMecha/godot-psx-style-demo/commit/2d6bbeda81533de7b73c1db3c578a11677aa81b3
Thanks for pointing this out!