Preview of new CRT effect

About the CRT effect in retro games

Proper CRT emulation in pixel-art games designed to look like old games cannot ignore CRT emulation. Their graphics were designed to be displayed on a CRT device, with all their quirks and characteristics. Developers knew how to take advantage of their properties, so displaying them with perfectly sharp, square pixels is simply wrong. That's why attaching a retro system to an actual CRT looks much better than running an emulator on a modern LCD panel.

Current CRT implementation

From the beginning, Tilengine has aimed to faithfully reproduce old-school graphics using the same techniques used in actual retro systems. That's why there's a built-in CRT effect in the windowing system. Although it has served its purpose, it has some flaws. Look at this 4x side by side upscale:

  • Left image: original image before post-processing
  • Right image: same image with current CRT applied

The effect emulates a slot mask RGB triad but has the following problems:

  • Missing scanlines
  • Excessive RF blurring
  • Hue shift towards yellow
  • Loss of contrast due to excessive bright

Upcoming implementation

The new implementation tries to address these defects, while running on low-end graphics hardware, as it doesn't require pixel shaders

4x preview upscale for comparison:

  • Aperture grille: often used in arcade monitors
  • Shadow mask: often used in TV sets, slightly blurrier
  • Source aligned scanlines
  • Preserves more brightness and contrast
  • Less blurry
  • Uses less CPU resources

Optional RF blur

One effect that was always present in the original implementation and has been set as optional in the new implementation, is RF blur.

This effect is needed for genesis/megadrive-like graphis. This system has a resolution of 320px horizontally, considerably higher than the standard 256px of that era, but it has a limited coluor palette and lacks blending (transparency) compared to its rival main, the SNES.  Due to RF modulation used to transmit the signal, adjacent horizontal pixels get mixed together, outputting a colour that is a blend of both. This quirk was exploited by game developers, that used to create vertical strips of interleaved colours, or layer coverage, to simulate more colours and blending.

Now this behaviour can be optionally activated. Missing it whet it's needed it's not correct, but always forcing it isn't correct either.

Look at how the vertical colour strips in the original image blend together creating intermediate colours non existent in the source image.

About faithfulness

There are many good CRT filters out there that take actual CRT physics in consideration, like beam width, dot pitch, curvature, etc. They look good but are generally quite GPU intensive and not suited for low-end hardware.

Tilengine tries to produce a good enough look and feel, approximating the end result without emulating the underlying physics while keeping good performance.

This feature will be included in the upcoming release

Get Tilengine

Buy Now$5.00 USD or more


Log in with to leave a comment.


do we have a timeframe on the upcoming release? I would like to use this for my future projects, but the last versions seem to have a major compatibility issue; I remember in 2021 it wasn't an issue to get this up and running


What compatibility issues did you find? I always try to keep API/ABI compatibility with older versions as much as possible, however sometimes it's inevitable making some breaking changes to allow the project advance. Let me know what issues did you find so I can take them into account for future releases