Alright, let’s dive into my shader shenanigans with Hades 2! I’ve been messing around with shaders for a while now, but this Hades 2 inspired project was a fun little challenge.

First thing I did was fire up Unity. Gotta have a playground, right? Created a new URP project – Lightweight, keeps things relatively simple. Then, I grabbed a simple quad and slapped it in the scene. Our canvas, so to speak.
Next up, the shader itself. I went with a Shader Graph, ’cause I’m not a masochist who enjoys raw HLSL… well, not today anyway. Created a new URP unlit Shader Graph. Opened that bad boy up and got to work.
So, what was I trying to achieve? I wanted that signature Hades look. Think bold colors, stylized lighting, and that cool painterly feel. Started thinking about how to break it down. Hades has a pretty strong emphasis on rim lighting, so that was my first target.
I got the object normals and camera direction, did a dot product between them. This gives you a value that’s higher when the surface faces the camera and lower when it’s perpendicular. OneMinus that result to flip it, pow it to sharpen the falloff, and BAM! Instant rim light. Hooked that up to the emission color.
But just a flat color? Nah, gotta add some spice. Brought in a gradient. Sampled the gradient based on the rim light intensity. Now the rim light fades from one color to another. Tweak the colors until I got something that felt right. Hot oranges fading to fiery reds.

Next, I tackled the base color. Hades has these really interesting hard shadows and color banding. Decided to try a posterization effect. Take the base color, multiply it by some number (posterization levels), floor the result, then divide back by that same number. This effectively quantizes the colors, creating those distinct bands. Fed that into the base color input of the shader.
Okay, cool. Rim light, posterized colors. Looking decent, but still kinda flat. Time for some lighting tricks. I didn’t want to actually use real lights, that’s too easy. Instead, I faked it with a simple normal map. Just a subtle, noisy normal map to give the surface some fake bumps and dents. Hooked that up to the normal input.
Now, the real challenge was getting that painterly look. This is where it got a little more involved. I experimented with a bunch of different techniques. Tried adding a noise texture, panning it across the surface, and using that to distort the UVs slightly. That gave a sort of “brushstroke” effect.
I also played around with using a Sobel filter to detect edges. The Sobel filter highlights areas where there’s a big change in color or intensity. Used that to create a sort of outline effect. Subtle, but it added a lot of definition.
All this stuff, it was all just playing around, messing with the numbers, changing the colors, until I got something I liked. Save the shader. Created a material, assigned the shader to the material, and slapped the material onto my quad. Boom. Shader applied!

The first version was… rough. Colors were off, the rim light was too harsh, the painterly effect looked like a mess. But that’s the fun of it, right? I spent the next few hours tweaking and refining. Adjusted the gradient, softened the rim light, toned down the noise, and made the Sobel filter more subtle.
Added some simple animation. Made the quad slowly rotate. That helped to show off the rim lighting and the fake lighting. Also, added a bit of a wobble to the position, just to give it a little more life.
It’s not a perfect recreation of the Hades look, but it’s a pretty decent starting point. Plus, I learned a bunch of new shader techniques along the way. Definitely going to keep experimenting with this. Maybe next time I’ll try adding some more advanced effects, like custom lighting models or more sophisticated edge detection.
- Created a new URP project in Unity
- Made a URP unlit Shader Graph
- Rim lighting using dot product
- Added a gradient to the rim light
- Posterization effect for color banding
- Faked lighting with a normal map
- Experimented with noise and Sobel filter for painterly look
- Tweaked and refined the shader
Shader stuff is always a learning process, that’s what makes it interesting!