Skip to content

Releases: akgunter/crt-royale-reshade

Version 2.1.0

23 Jan 06:19
Compare
Choose a tag to compare

Description

Version 2.1.0 update

This refactors the phosphor mask code significantly, but the changes should be backwards compatible.

The biggest change is new phosphor masks specifically for triad sizes of 3'ish, which is particularly important for 1080p monitors. The low-res slot mask is now the default, since the default triad size is 3. Because subpixel alignment can be very important for these masks, I've also exposed the phosphor shape parameters as normal settings instead of advanced ones. The defaults should work well enough for most people, though. OLEDs might be temperamental, but the new configs should help with any headaches?

The phosphor math should be more efficient now, although most users won't see the improvement. Alongside that, I've refactored the phosphor pass to update a portion of the screen on every frame, rather than the entire screen once every 60 frames. This isn't quite as fast as the old "all at once" approach, but it distributes the workload more evenly over time. The old approach ran a risk of every 60th frame being more expensive and causing a stutter, but now every frame should be similarly expensive to compute. It also produces a neat side-swipe transition effect that I think looks cool.

Features

  • New low-res phosphor masks
  • New phosphor offsets
  • More phosphor settings exposed as normal settings

Version 2.0.1

10 Jan 05:29
Compare
Choose a tag to compare

Description

v2.0.1 Patch

This was mainly to fix a DX9 compilation error that I didn't know was a thing. Apparently you can't use [branch] and tex2D() together.

Hidden/Advanced Configs

  • USE_VERTEX_UNCROPPING: With advanced settings enabled, set this to 1 to enable the slightly-faster vertex shader uncropping algorithm. When advanced settings are disabled, this will also be disabled. Enabling it can save about 0.1ms in some cases.

Removed Features

  • Relegated the the fancy vertex shader uncropping logic to an advanced setting. Most users won't notice the difference, but some users would notice that some DX9 emulators like to only refresh part of the screen. The old logic forces the entire screen to update, which ensures the area outside the content box is black.

Bug Fixes

  • Fixed a DX9 compilation error resulting from using tex2D() inside an if-else statement with the [branch] annotation.

Version 2.0.0

26 Dec 09:09
Compare
Choose a tag to compare

Description

v2 release

The primary goal of this release was to refactor as much of the codebase as possible to make it more efficient, more intuitive for other shader devs, and more user friendly. I also fixed a number of bugs along the way.

Be aware that v2 is not backwards compatible with v1 configs, but it should be possible to translate them to v2.

Features

  • Performance improvements throughout the codebase
    • Accomplished by a combination of consolidating shader passes and rewriting a few of them
    • Improvement of 25% to 50% depending on configuration (probably closer to 25% in most cases)
  • Completely rewritten phosphor mask logic
    • Uses pulse waves to generate a fullscreen texture on the fly rather than tiling a small texture loaded from disk
    • Only recomputes the phosphor mask every 60 frames, making the trig nearly zero-cost
    • Can alter the aspect ratio of the phosphors on the fly, either to achieve a specific aesthetic or to compensate for moire patterns
  • Completely rewritten scanline logic
    • Generates the scanline shape on the fly and outputs it to a texture every 60 frames
    • Uses triangle waves to calculate intensities rather than modular arithmetic
  • Ability to rotate the simulated CRT
    • Can flip the CRT on either side or upside down
    • Results in horizontal or vertical scanlines
    • Also rotates the phosphors correctly (e.g. BGR phosphors if rotated 180 degrees)
    • Useful for emulating certain retro arcade platforms
  • Optional Input Blurring
    • Can apply a simple blur to the input video, which softens the image and can mitigate some artifacting
    • The effect is optimized to minimize compute time if the user has disabled it
  • Restructured Configs and UI
    • Minimized the config sections by default
    • Added Help sections with instructions on how to configure some things
    • Added version numbering to the UI and the preset file to assist debugging
    • Hid many settings behind an ADVANCED_SETTINGS option
  • Code restructuring
    • Fewer files, simpler naming, and hopefully more intuitive logic.

Hidden/Advanced Configs

  • Phosphor Mask
    • Phosphor thickness and sharpness
    • Mask Num Triads Across
  • Scanlines
    • Scanline Offset
    • Gaussian Beam Min Shape, Max Shape, and Shape Power
    • Convergence Offsets
  • Colors and Effects
    • Blur Radius
  • Screen Geometry
    • View Distance
    • Screen Tilt Angles
    • Screen Aspect Ratios
    • Geom Overscan

Removed Features

  • Horizontal Beam Blurring
    • Previously the scanlines had math that applied a narrow horizontal blur. This was an expensive operation that didn't meaningfully change the final appearance of the shader, so I removed it.
    • This might have been a consequence of my port to ReShade. Eventually I'll double-check the behavior of the RetroArch version and see if I need to re-add it with rewritten logic.

Bug Fixes

  • Gaussian beams are more flexible now because of the Linear Beam Thickness setting. This should make it easier to make very thin scanlines behave, although they might look too similar to linear beams to be worth the performance hit.
  • Rounding errors in the phosphor mask are far less likely due to the rewrite. 4k screens won't have tiling artifacts anymore.
  • Halation and Diffusion interact more realistically.

Version 1.0.0

27 Aug 18:14
1115bb0
Compare
Choose a tag to compare

Description

v1 release

Features

  • User-selectable deinterpolation algorithm
  • User-selectable electron beam shape

Fixes

  • Rounding errors for DX9 math
  • Ringing in the bloom/halation downsampling

Known Issues

  • The electron beam pass has a suspiciously high performance impact, likely due to dynamic branching.
  • The phosphor mask can have rounding errors at 4k resolutions.
  • (Won't Fix) Gaussian beam shape produces inconsistent colors for narrow scanlines (1-4 pixels wide). The code fix would be equivalent to silently using a linear beam shape when the scanlines are narrow. I've instead opted to expose the linear beam shape to the user and let them decide.

Version 0.9.0

27 Aug 17:39
Compare
Choose a tag to compare

Description

This release is a minimum viable implementation of crt-royale-reshade.

Features

  • Start of versioning in preparation for v1

Known Issues

  • Lacks Gaussian scanlines
  • Downsampling for bloom/halation has ringing artifacts
  • Rounding errors lurking around, mostly related to the 0.5 texcoord offset used by DX9