Find me!
Youtube
Github
Bluesky
Itch

email: braindelaydev@gmail.com

About me!

Hi! I'm a professional web developer by day, but you wouldn't know it from looking at my site haha...
Anyway, I'm also a game developer and an enthusiast of film! I'll be posting here with development updates for my projects, reviews of media I've enjoyed recently, and links to other cool creators that I feel deserve some light.

Visitors
free web counter

Crt Shader

6/26/2025

What’s good! Today I’m going to be talking about a fun little project I took on for the development of Brittleheart: a very basic crt shader. First, I’ll go over the rationale behind its inclusion and implementation, and then I’ll go over the actual methodology (I’ll even post the source code and texture that I used).

I wanted to create a screen effect like this one because one of the main goals in terms of mood that we’ve established for the game is that of loneliness and isolation. I can’t quite put my finger on why at the moment (maybe it has something to do with a childhood spent playing more video games than I should have), but the image of sitting in a dark room staring at a CRT monitor evokes such a strong feeling of isolation that I felt it was a perfect fit.

That said, I know that CRT shaders are fairly divisive, so I wanted the implementation to be as unobtrusive as possible, and of course I also plan to add a slider for toning down the effect.

Anyway, the look can be split into 4 components, and now I’ll go over how I accomplished each of them.

The warping at the edge of the screen is done by using a combination of sub-viewports and a viewport texture applied to a curved mesh. Note: If you’re having an issue with the 2d scene appearing in front of the 3d scene, be sure that the 2d scene is at the top of the hierarchy (first child of the subviewport container).

The actual CRT effect (screen door, chromatic aberration) is really just a small texture tiled across the screen and then multiplied against the original screen texture. Very very simple. You can fade the effect out by using the Mix() function with the original texture as the first parameter, and the combined crt and original textures as the second parameter, and then whatever value you want as the third parameter. Theoretically, you could even set up some sort of function to change this value based on the screen_uv and make the effect more or less visible at the edges of the screen.

The most subtle effect is the downscaling. I was having some issues with certain game elements not aligning to the pixel grid because secretly the game is being rendered at 1920 * 1080 and not 480 * 270. This means objects controlled by physics, and elements rendered through code (think line renderers) would not be aliased properly. This was hardly noticeable before I added the CRT effect, but after I added it that meant that there were instances where only have of a pixel would be lit up and it looked terrible!

My solution was to downsample the entire screen texture to make it so that every pixel would be made up of uniform sub-pixels. This had the added benefit of making the code-rendered elements look more cohesive with the existing art style.

Finally, the bloom. To really sell the feeling that you’re playing this game in a dark room late at night, I had to add a little glow. This was accomplished very easily using Godot’s built in bloom feature, which can be found as part of the World Environment node. Just add one of those bad boys to your 3d scene and observe as each pixel of your new crt screen glows comfortingly.

Here's the actual text of the shader: CRT.gdshader

Whelp… that’s all folks! Thanks for coming to my Ted Talk. Peace.

The future of Brittleheart

6/5/2025

Helllllooo everybody! It’s been a long time! I’m gonna keep this one fairly brief, as I just wanted to update the blog on what I’ve been doing and what I’m gonna do in the future.

Ok so, Brittleheart. It wasn’t the complete success we were hoping it would be. It didn’t win any awards, and nobody famous played it. That’s ok though! We were actually fairly happy with the scores we got in Ludum Dare and have decided that we’d like to further develop the game.

For this purpose, we’ve brought in another artist and have been hard at work determining scope, gameplay mechanics, art direction, and finally in the last month or so, actually making the game.

I’ll go into more detail about the actual development process in a future update. I want to keep this blog fairly focused on the technical side of things, as I’ve got a few cool features in mind that I want to brag about online.

But yeah! Thanks for reading everybody!

Ludum Dare 57 Update!!!

4/8/2025

OK! As of last night the game is submitted! I'm insanely proud of what we managed to accomplish in just 3 days, even if it did turn out a little unfinished (it is a gamejam game after all). This was my first experience collaborating with other game developers, and I couldn't be more happy with it. My two teammates were both incredibly hard working and talented, and it was easy to stay dedicated because their passion was contagious.

As with all projects, I'm walking away with things I wish I'd done differently, lessons I've learned, hopes for the future, and a feeling of emptiness now that it's over. That said, there have been talks about continuing to develop the game amongst the other team members, and I'm not necessarily opposed to that. I also know that it would be wise to allow myself some space from the project before I commit to anything, because when something is fresh and exciting it feels like the inevitable future. Who knows how we'll feel in a couple months.

I'll probably update the blog again once the game's been rated and the rush of emotions I'm feeling toward it have faded slightly. I'd like to do a full retrospective for the game on topics like its reception, technical things I'm satisfied with and plans for the future.

Ludum Dare 57 anticipation

4/1/2025

Excited to participate in Ludum Dare 57! I'll be cooperating with a couple cool people I've met through a local group and hopefully be making something awesome. I'll update the site when the event is over!