[RELEASED] VHS Pro - Analog video signal and CRT screen emulation

Basic Info
VHS Pro is a camera post-processing effect for Unity 3D which emulates look and feel of retro video cards, graphics adapters and cathode ray tube (CRT) screens. It emulates resolution decimation, signal color encoding and downsampling, screen bleeding and phosphor trail (ray tail/fading on a phosphor screen), VHS tape noise (VHS data corruption), interlacing and jitter (deviation) in the analog video signal, color dithering and color palette matching from existing palettes or your own custom one. It’s best for 2D console-like games, 80’s/90’s/retro/VHS look, security cameras and robot/computer vision and video processing.

There’re 3 versions of VHS Pro.

  1. Built-in RP
  2. HDRP
  3. URP

Link (To Asset Store)

Trailer

Manual

VHS Pro v3.0 supports all 3 : Built-in RP, URP, HDRP. info [here]( [RELEASED] VHS Pro - Analog video signal and CRT screen emulation page-3#post-8704329)
VHS Pro v2.0 added HDRP version. info [here]( [RELEASED] VHS Pro - Analog video signal and CRT screen emulation page-3#post-5758531)
VHS Pro v1.1 Built-in RP original version features are listed below

1. Custom Texture
You can use custom movie texture or a sprite if you want it to be affected by the effect.

2. Cathode Ray Tube Emulation
Emulates CRT Screen. Bleeding, Fisheye, discretion (quantization) and vignette.

a.Vertical Resolution / Quantization
The picture will be quantized vertically by lines. You can choose the amount of lines:
You can choose between these modes:
“FullScreen” (no quantization), “PAL 240 Lines” (240 Lines per height), “NTSC 480 Lines” (480 Lines per height) or “Custom” (you can set custom number of lines).

b. Bleed Mode (CRT screen bleeding mode)
“Bleeding” is a cathode ray tail on the phosphor screen. When the ray (electron beam) passing certain point of the phosphor screen, the point keep glowing some small amount of time after the ray is already gone. So, the ray has a fading tail behind itself while going across the screen. This effect called bleeding.
You can choose between these modes: “Old Three Phase”, “Three Phase”, “Two Phase”. These modes emulate different screen bleeding curves. You can make bleeding longer or shorter.

c. Custom Bleeding Curve
Allows you to generate your own bleeding YIQ curves. Sync YQ channels and change the Bleed Length.

d. Fisheye
Emulates a real screen by “bending” the corners of the image and making it look like if it would be put thru a wide-angle lens. You can adjust fisheye amount.

e. Vignette
Emulates vignette (reduction of an image’s brightness or saturation at the periphery compared to the image center). You can adjust amount and change speed how it pulsates.

3. Noise
Emulates different sorts of noises.

a. Vertical Resolution / Quantization
The noise vertical quantization. You can inherit from the CRT Vertical Resolution or use custom vertical resolution for noise which is different from CRT Vertical Resolution.

b. Quantize Noise X / Pixilate
If you want to quantize noise by width (i.e. make squares instead of tiny vertical lines) then adjust this value.

c. Background Noise
This is a simple background noise (“film grain”-like noise). You can adjust transparency.

d. Tape Noise
Emulates noise which you can find on old VHS cassettes. Noise lines floating down the screen.
You can adjust transparency and speed.

e. Line Noise
Emulates noise in the analog video signal and VHS cassettes. Noise lines popping up randomly within the screen. You can adjust transparency and speed.

4. Jitter
Emulates deviations in the analog video signal and CRT.

a. Floating Lines
After the screen was quantized vertically it consist of the horizontal lines which will float down the screen if this option is on. It works the best on the low resolution.

b. Scan lines
draws the black lines in between the screen lines. You can adjust the width.

c. Stretch Noise
Emulates noise, and data corruption on the VHS cassette plus some CRT jitter. Looks like if some of the screen lines were stretched and floating up and down the screen.

d. Jitter Horizontal
Emulates interlacing jitter. You can adjust the amount.

e. Jitter Vertical
Emulates analog video signal and CRT jitter. Adds a bit of YIQ shifting. You can adjust transparency and speed.

f. Twitch Horizontal
Shifts/displaces the image horizontally sometimes. You can adjust the frequency.

g. Twitch Vertical
Shakes/Shifts screen horizontally sometimes. The images “jumps” or “falls” vertically. You can adjust the frequency.

5. Analog Signal Tweak
YIQ is the color space used by the NTSC color TV system. The analog video signal is transmitted in YIQ and not in RGB. In this section you can adjust the YIQ values.

a. YIQ Permanent Adjustment
“Adjust Y”, “Adjust I”, “Adjust Q” - use these to make a permanent adjustment.

b. Shift YIQ
“Shift Y”, “Shift I”, “Shift W” - use these to tweak/shift the values.

c. Gamma Correction
use this to balance the gamma(brightness) of the signal.

6. Phosphor Trail
Emulates phosphor screen decay.
“Input Cutoff” - Adjusting brightness threshold of input. How much of each frame affects the trail.
“Input Amount” - Amplifies the input amount after cutoff.
“Fade” - Adjusts how fast the trail fades. In other words it’s a feedback amount.

7. Tools
Additional tools.

a. Unscaled Time
When you are pausing the game using Time.timeScale = 0 (or Application.timeScale = 0) it stops all the animation, sound, etc. It also stops shader timer and it’s animation. If you still need shader to run while this sort of pause you can use “unscaled time” feature. The shader will keep running even when your Time.timeScale == 0. It will use Time.unscaledTime instead of Time.time.

b. Debug Bleed Curve
Helps to debug bleed curve.

c. Debug Trail
Helps to debug phosphor trail.

Update Log

v3.0
-URP version: added
-HDRP version: rewritten for new Unity 2022.2.1f
-HDRP version: fixed DLSS bug in
-BRP version: rewritten for Post-Processing Stack v2 3.2.2
-BRP version: merged with Graphics Adapter Pro Plugin, new features added
-Graphics Adapter Pro is deprecated
-all 3 version have the same fields now
-custom palette field is deprecated. but it’s still possible to add one
-fixed bug for adding shader features to a build

v2.0

  • re-wrote for Unity 2019.3 HDRP Post-Processing Stack
  • added resolution presets
  • merged with Graphics Adapter Pro plugin and added functions like Color Encoding, Dithering, Palette Color Replacement
  • removed features like fisheye, vignette, gamma correction because they already exist in Post-Processing Stack
  • removed “custom curve” support

v1.3
+switched from multi_compiles to shader_features (faster building, smaller build size, but you have to turn on multi_compile for the features you switching on/off in runtime)
+added feedback color
+added fisheye hard and soft cutoff
+added hyperspace cuttoff
+renamed movietex to bypass tex
+auto disable movie texture for ps4/xbox/mobile
+added bleeding on/off switch
+fixed ‘for’ loops for windows
+fixed ‘lines float’ feature
+added ‘lines float’ speed - with both ways
+fixed ps4 bug

v1.2

  • added signal noise
  • added distortion to tape noise
  • added tails to tape noise
  • added color shift to tape noise
  • make better background noise (fixed cross pattern)
  • renamed background noise amount to alpha
  • renamed background noise to film grain
  • put noises into YIQ space
  • a lot of noise performance optimizations
  • renamed jitter vertical to jitter
  • renamed jitter horizontal to interlacing
  • renamed tape noise values (amount to alpha, threshhold to amount)
  • renamed/switched shift and adjust of signal tweak

v1.1

  • changed vertical jitter from RGB color space to YIQ color space
  • fixed gamma correction range. now you can go both directions
  • fixed scanlines - made them more expensive but better looking
  • added scanlines width parameter - allows you adjust scanline width
  • renamed CRT mode to bleed mode
  • added custom bleeding curve feature - now you can create your own bleeding curves
  • bleed amount renamed to bleed stretch
  • added phosphor trail section
  • added tools section
  • added unscaled time feature - now you can use unscaled time
  • made better UI

Contact

If you have any questions or want to report a bug, please, write here or PM on email: vladstorm00@gmail.com
Twitter: x.com

Screenshots












6 Likes

Awesome!

1 Like

ahaha looks great!

1 Like

I’ve been using this for a few days and it’s pretty much perfect. The fact that it allows me to play with the YIQ values is worth the price of admission on its own, honestly. Even minimal effects look authentic with it:

Thank you. I maybe will make this YIQ tweak section even more flexible in the future.
Atm, I’m working on custom bleeding curve and phosphor feedback features. So, its getting even more accurate and will have more trippy effects)

Phosphor trail / Feedback WIP. Gonna include it in Update 1.1

1 Like

This is so awesome. Picking it up soon to incorporate in our next update. Exactly what we need.

1 Like

CRT screen phosphor trail debug. Coming with v1.1. Probably next week.

I made an update v1.1! The new main features are Custom Bleeding Curve and Phosphor Trail.
You can check out new video manual for the details

Full Update Log:

  • changed vertical jitter from RGB color space to YIQ color space
  • fixed gamma correction range. now you can go both directions
  • fixed scanlines - made them more expensive but better looking
  • added scanlines width parameter - allows you adjust scanline width
  • renamed CRT mode to bleed mode
  • added custom bleeding curve feature - now you can create your own bleeding curves
  • bleed amount renamed to bleed stretch
  • added phosphor trail section
  • added tools section
  • added unscaled time feature - now you can use unscaled time
  • made better UI

Phosphor trail test

The old tv effect is incredible. Distoritions artifacts etc are nice but to appear ocassionally. But 90s tv oh my god. No way this can work on unity 4.6?

good question. i gotta test it.
should i try it on unity 4.6.8 ?

Yep. I’m on 4.6.8.

@TooManySugar
ok. ill test it :3

1 Like

Managed to test on 4.6 ?

@TooManySugar
i just checked. It works on 4.6.8. but you need a Pro version.
because RenderTexture in Unity 4.x is only in Pro version.
in Unity 5.x it’s in Personal Edition (free) version also.

1 Like

YIQ/VHS noise. work in progress


Pretty nice. Added to purchase list. Will get on next store batch.

1 Like

Hi, I came to this forum seeing screenshots of this on google images, I know nothing about unity3d, game development or programming, I am however an emulation enthusiast and love the old CRT displays I am wondering how this tech can be used in emulators or implemented in an app somehow? I’d even be willing to pay for it.

If you can run your emulation in a web browser you could render the webbroser as a texture and apply this filtering to the camera. This is to me the quickest way to do so. Unless there is a way to render as a texture the windows desktop.