Oprettelse af en VHS-båndfiltereffekt i Unity

Inden for spiludviklingsområdet er det blevet en populær trend at fange den nostalgiske essens af retrovisuals. En ikonisk visuel stil, der fortsætter med at fange publikum, er VHS-båndfiltereffekten. Denne effekt emulerer de analoge ufuldkommenheder i gamle VHS-bånd og fremkalder en følelse af nostalgi for dem, der voksede op i videobåndoptagernes og videokassetternes æra. Implementering af denne effekt i Unity kan tilføje et ekstra lag af fordybelse til dit spil, hvilket skaber en æstetik, der minder om fortiden.

For at opnå VHS-båndfiltereffekten i Unity, bruger vi shaders til at manipulere det visuelle. Shaders giver mulighed for realtidsmanipulation af grafik på GPU'en, hvilket gør dem ideelle til at skabe effekter som VHS-forvrængning og glitchiness. Nedenfor vil jeg guide dig gennem trinene til at implementere denne effekt i dit Unity-projekt.

1. Opsætning af projektet

Før du dykker ned i koden, skal du sikre dig, at du har et Unity-projekt opsat. Opret et nyt projekt, eller åbn et eksisterende, hvor du vil implementere VHS-båndfiltereffekten.

2. Oprettelse af Shader

Først vil vi oprette en ny shader til at håndtere VHS-effekten. Højreklik i dit projektvindue, og naviger til 'Create -> Shader -> Unlit Shader'. Navngiv shaderen noget som VHSTApeEffect.

Åbn den nyoprettede shader-fil. Vi tilføjer kode for at manipulere det visuelle for at opnå VHS-båndeffekten. Nedenfor er et grundlæggende eksempel på en shader, der tilføjer forvrængning, pixelering, støj og overlejring for at simulere VHS-båndeffekten:

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. Anvendelse af Shader

For at anvende skygge på et materiale skal du oprette et nyt materiale eller bruge et eksisterende. Træk "VHSTapeEffect" shaderen ind på materialets shader slot.

4. Anvend billedeffekt på kameraet

Opret et nyt tomt spilobjekt, og vedhæft et script til det. Tilføj følgende kode i scriptet:

using UnityEngine;

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

    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        Graphics.Blit(source, destination, VHSMaterial);
    }
}
  • Vedhæft dette script til det tomme spilobjekt, og tildel det materiale, du har oprettet, til "VHSMaterial"-feltet i scriptinspektøren.

5. Test din scene

Til sidst skal du trykke på afspil i Unity og observere VHS-båndeffekten påført din scene gennem kameraet.

Konklusion

Med disse trin har du med succes implementeret VHS-båndfiltereffekten i Unity. Eksperimenter med forskellige indstillinger og yderligere funktioner for yderligere at forbedre den nostalgiske atmosfære i dit spil.

Foreslåede artikler
Oprettelse af en simpel græsskygger i enhed
Oprettelse af en Winner Screen UI i Unity
Oprettelse af en pausemenu i Unity
Oprettelse af flysimulatorer i Unity
Oprettelse af en indlæsningsskærm i Unity
Hvordan man maler med partikelsystem i enhed
Hovedmenuvejledning til Unity