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
Tilengine
2D retro grapics engine with true raster effects for creating 8/16 bit style games
More posts
- Tilengine 2.15.2 releasedAug 29, 2023
- Tilengine 2.15 releasedApr 22, 2023
- Tilengine 2.14: new SNES-style layer windowFeb 10, 2023
- Tilengine 2.13 with per-tile palette selectorNov 12, 2022
- Tilengine 2.12 released: Tile & sprite 90º rotationNov 01, 2022
- Feature preview: tile & sprite 90º rotationOct 30, 2022
- Tilengine 2.11.3 bugfix releasedOct 30, 2022
- Tilengine 2.11.0 releasedOct 03, 2022
- Tilengine 2.10.0 releasedSep 30, 2022
Comments
Log in with itch.io 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
Hi!
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