Tworzenie efektu filtra taśmy VHS w Unity

W świecie tworzenia gier popularnym trendem stało się uchwycenie nostalgicznej esencji grafiki retro. Jednym z kultowych stylów wizualnych, który nadal urzeka widzów, jest efekt filtra taśmy VHS. Efekt ten naśladuje analogowe niedoskonałości starych taśm VHS, wywołując poczucie nostalgii za tymi, którzy dorastali w epoce magnetowidów i kaset wideo. Zaimplementowanie tego efektu w Unity może dodać dodatkową warstwę immersji do twojej gry, tworząc estetykę przypominającą przeszłość.

Aby uzyskać efekt filtra taśmy VHS w Unity, użyjemy shaderów do manipulowania efektami wizualnymi. Shadery umożliwiają manipulowanie grafiką na GPU w czasie rzeczywistym, co czyni je idealnymi do tworzenia efektów takich jak zniekształcenia VHS i zakłócenia. Poniżej poprowadzę Cię przez kolejne etapy wdrożenia tego efektu w Twoim projekcie Unity.

1. Konfiguracja projektu

Zanim zagłębisz się w kod, upewnij się, że masz skonfigurowany projekt Unity. Utwórz nowy projekt lub otwórz istniejący, w którym chcesz zaimplementować efekt filtra taśmy VHS.

2. Tworzenie modułu cieniującego

Najpierw utworzymy nowy moduł cieniujący obsługujący efekt VHS. Kliknij prawym przyciskiem myszy w oknie projektu i przejdź do 'Create -> Shader -> Unlit Shader'. Nazwij moduł cieniujący na przykład VHSTapeEffect.

Otwórz nowo utworzony plik modułu cieniującego. Dodamy kod umożliwiający manipulowanie wizualizacjami w celu uzyskania efektu taśmy VHS. Poniżej znajduje się podstawowy przykład modułu cieniującego, który dodaje zniekształcenia, piksele, szum i nakładkę, aby symulować efekt taśmy VHS:

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

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

        Pass
        {
            CGPROGRAM
            #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;
            }
            ENDCG
        }
    }
}

3. Stosowanie Shadera

Aby zastosować moduł cieniujący do materiału, utwórz nowy materiał lub użyj istniejącego. Przeciągnij moduł cieniujący "VHSTapeEffect" na szczelinę modułu cieniującego materiału.

4. Zastosuj efekt obrazu do aparatu

Utwórz nowy pusty obiekt gry i dołącz do niego skrypt. W skrypcie dodaj następujący kod:

using UnityEngine;

[RequireComponent(typeof(Camera))]
public class VHSTapeEffectController : MonoBehaviour
{
    public Material VHSMaterial;

    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        Graphics.Blit(source, destination, VHSMaterial);
    }
}
  • Dołącz ten skrypt do pustego obiektu gry i przypisz utworzony materiał do pola "VHSMaterial" w inspektorze skryptów.

5. Przetestuj swoją scenę

Na koniec naciśnij przycisk odtwarzania w Unity i obserwuj przez kamerę efekt taśmy VHS zastosowany do Twojej sceny.

Wniosek

Wykonując te czynności, pomyślnie zaimplementowałeś efekt filtra taśmy VHS w Unity. Eksperymentuj z różnymi ustawieniami i dodatkowymi funkcjami, aby jeszcze bardziej podkreślić nostalgiczną atmosferę swojej gry.

Sugerowane artykuły
Utwórz efekt pianki do myjki ciśnieniowej w Unity
Implementowanie efektów cząsteczkowych w jedności
Tworzenie prostego modułu cieniującego trawę w Unity
Tworzenie interfejsu użytkownika ekranu zwycięzcy w Unity
Tworzenie menu pauzy w Unity
Tworzenie symulatorów lotu w Unity
Moc tekstur zastępczych do prototypowania w jedności