Many indie developers started using PSX graphics, the retro look fits well with horror games, and not only that, it works for any game and it makes it easy to achieve a well-styled look with low-res textures and models.
The so called PSX graphics, or PlayStation graphics, is changing the game quality to reflect games on the early PlayStation console era, games that had several hardware limitations, causing unique effects for the viewer. Many "effects" on these older games are side effects, either due to the floating-point precision, texture size limits, or other restrictions, these side effects remain nostalgic.
Using PSX-style graphics in modern engines isn't as easy as it seems(in part), modern game engines use rendering techniques that are far from what we had back then, and this can go from the whole rendering technique to UV mapping issues, all that will need to be "forced" into the modern engine somehow.
Instead of turning the engine into a potato, shaders are used to create a visual effect similar to the PSX era, to simulate these limited hardware side effects, the vertex and fragment shaders are used.
The vertex shader is needed because we will change the position of the vertex, PSX graphics have a noticeable jittery look when the player camera moves, due to floating-point precision.
How to install the URP PSX Unity shader
A URP with a shader graph is available on Github, it allows you to not only install a shader that achieves the PSX effect but also play with it on the shader graph and fine-tune it for your game needs.
The shader we will download is URP-PSX by Kodrin on Github.
To start, access https://github.com/Kodrin/URP-PSX, press on the green Code button, and Download zip
Extract the zip file you downloaded in a folder somewhere
Create a libraries folder inside your Unity project, this is not needed, but it is great to keep a folder only for third party projects
Copy the extracted folder inside your libraries folder
You now have all required files inside Unity, we just need to set things up.
Using the Universal Rendering Pipeline (URP)
If you're on a new project and you're not using URP, you will have to install it. If you already have a project using URP, you can skip this.
If you are just creating a new project, there is a template for the URP project when you are creating your project. Using it is recommended as it will skip the below steps.
Go to the Window tab on the top menu, and click on Package Manager.
On the Package Manager, make sure you are browsing packages from the Unity Registry, or you won't be able to find the package.
Search for Universal RP on the search bar, and click on the Install button.
After installing, go on the top menu, over Assets > Create > Rendering > Universal Render Pipeline > Pipeline Asset (Forward Rendering), this will create two URP assets on the current folder
Back on the top menu, go over Edit, and click on Project settings...
You can now drag and drop UniversalRenderPipelineAsset from the directory you just created over the Scriptable Rendering Pipeline settings option, to use it.
If you just switched to URP, check your project cameras under the rendering tab for all of them, making sure that the renderer is now URP, and not the default one.
The project is pink after switching to URP
Switching to URP can be a pain if you are on a big project already, sometimes it can not even be worth it in the short term if you are with a small team or just by yourself.
When the materials in the project appear to be pink, it means that you have missing materials, this is because the materials need to be updated to work with URP.
Below is a quick fix, that will work on some cases
- Very important: Make a backup of your Unity project
- Go over Edit > Render pipeline > Universal Render Pipeline and select Upgrade project materials to Universal RP Materials
If you have a big Unity project, it may be worth the hassle to update just a few selected materials and correct issues as they appear.
The PSX shaders
The URP PSX shaders project gives you two main shaders to use, the lit and the unlit only.
It also has Dithering, Fog, and Pixelation, which are used internally, but you can also use them separately if needed, to maintain the effects consistent on your project.
To take a look at the shaders, open the library folder inside Unity, the one you created previously, and navigate to URP-PSX > Assets > Shaders.
With all the shaders there, go back to your project root folder, inside it or in a materials folder, depending on how you're structuring your project, add a new material:
- Right-click anywhere inside the file browser on the folder you will create the new material
- Go over Create and select Material
- Use any name for your material
Use the PSX shader on your material:
- Left-click on your material to select it
- Where it says Shader on its properties, click on the select box to change it
- Click on Shader Graphs and select URP_PSX_PBR or URP_PSX_Unlit
The Unlit shader is not affected by the lighting in your scene, if you are using the lit ones, try to stay consistent and always use just the lit shader, but switch to the unlit one if you get any rendering artifact.
Now you can change the properties of your material related to the shader, for example, enable UseAfine, UseVertexJitter, UseColorPrecision and play around with its options to what better suits your project.
Congratulations, enjoy your PSX-styled game! 🚀
Wrapping it up
PSX shaders are great for the ones who love the nostalgia or simply want to give a different style to their games, using shaders provided by the Unity community, we can quickly bootstrap a project using this style.
The shader used here is MIT licensed, take a look at the license.
If you believe any information here is wrong or hard to understand, let us know! And if you are new to Unity, check Illumination Through Light Emitting Objects, a lesson by Ankita Chakrabarti that can be a good step before diving into shaders and related.