Creating a VHS Tape Filter Effect in Unity

In the realm of game development, capturing the nostalgic essence of retro visuals has become a popular trend. One iconic visual style that continues to captivate audiences is the VHS tape filter effect. This effect emulates the analog imperfections of old VHS tapes, evoking a sense of nostalgia for those who grew up in the era of VCRs and video cassettes. Implementing this effect in Unity can add an extra layer of immersion to your game, creating an aesthetic reminiscent of the past.

To achieve the VHS tape filter effect in Unity, we'll utilize shaders to manipulate the visuals. Shaders allow for real-time manipulation of graphics on the GPU, making them ideal for creating effects like VHS distortion and glitchiness. Below, I'll guide you through the steps to implement this effect in your Unity project.

1. Setting Up the Project

Before diving into the code, ensure you have a Unity project set up. Create a new project or open an existing one where you want to implement the VHS tape filter effect.

2. Creating the Shader

First, we'll create a new shader to handle the VHS effect. Right-click in your project window, and navigate to 'Create -> Shader -> Unlit Shader'. Name the shader something like VHSTapeEffect.

Open the newly created shader file. We'll add code to manipulate the visuals to achieve the VHS tape effect. Below is a basic example of a shader that adds distortion, pixelation, noise, and overlay to simulate the VHS tape effect:

Shader "Custom/VHSTapeEffect"
        _MainTex ("Texture", 2D) = "white" {}
        _DistortionStrength ("Distortion Strength", Range(0, 1)) = 0.1
        _NoiseStrength ("Noise Strength", Range(0, 1)) = 0.2

        Tags { "Queue"="Overlay" "RenderType"="Opaque" }

            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;

            struct v2f
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;

            sampler2D _MainTex;
            float _DistortionStrength;
            float _NoiseStrength;

            v2f vert (appdata v)
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;

            fixed4 frag (v2f i) : SV_Target
                float2 uv = i.uv;
                uv += sin(uv * 500) * _DistortionStrength;
                uv += (frac(sin(dot(uv, float2(12.9898, 78.233))) * 43758.5453) - 0.5) * _NoiseStrength;

                fixed4 col = tex2D(_MainTex, uv);
                return col;

3. Applying the Shader

To apply the shader to a material, create a new material, or use an existing one. Drag the "VHSTapeEffect" shader onto the material's shader slot.

4. Apply Image Effect to Camera

Create a new empty game object and attach a script to it. In the script, add the following code:

using UnityEngine;

public class VHSTapeEffectController : MonoBehaviour
    public Material VHSMaterial;

    void OnRenderImage(RenderTexture source, RenderTexture destination)
        Graphics.Blit(source, destination, VHSMaterial);
  • Attach this script to the empty game object, and assign the material you created to the "VHSMaterial" field in the script inspector.

5. Test Your Scene

Finally, hit play in Unity and observe the VHS tape effect applied to your scene through the camera.


With these steps, you've successfully implemented the VHS tape filter effect in Unity. Experiment with different settings and additional features to further enhance the nostalgic atmosphere of your game.

Suggested Articles
Create a Pressure Washer Foam Effect in Unity
Creating a Simple Grass Shader in Unity
Creating a Loading Screen in Unity
Object Glow Effect Tutorial for Unity
Night Vision Image Effect Post-processing Tutorial for Unity
Hologram Effect in Unity
Creating a Winner Screen UI in Unity