Nabewerkingshandleiding voor nachtzichtbeeldeffecten voor Unity

In deze tutorial laat ik zien hoe je een nachtzichteffect creëert in Unity.

Nachtzicht is een beeldeffect dat de zichtbaarheid bij weinig licht verbetert. Het effect wordt vaak gebruikt in videogames om een ​​echte nachtkijker na te bootsen.

Voor demonstratiedoeleinden gebruik ik de Small Cave Kit van de Asset Store.

Kleine grotkit

Om een ​​nachtzichteffect te maken in Unity gebruiken we een speciale Shader en een nabewerkingsscript.

Stap 1: Maak de afbeeldingseffectshader

Het afbeeldingseffect zelf wordt gedaan met behulp van een aangepaste Shader.

  • Maak een nieuwe Shader (Maken -> Shader -> Afbeeldingseffect Shader) en geef deze een naam "NightVisionShader"

  • Verwijder alles erin en plak de onderstaande code:

NightVisionShader.shader

Shader "Hidden/Night Vision" {
 
	Properties {
		_MainTex ("Base (RGB)", RECT) = "white" {}
	}
 
	SubShader {
		Pass {
			ZTest Always Cull Off ZWrite Off
			Fog { Mode off }
 
			CGPROGRAM
				#pragma vertex vert_img
				#pragma fragment frag
				#pragma fragmentoption ARB_precision_hint_fastest 
				#include "UnityCG.cginc"
 
				// frag shaders data
				uniform sampler2D _MainTex;
				uniform float4 _Luminance;
				uniform float _LensRadius;
 
				// frag shader
				float4 frag (v2f_img i) : COLOR
				{	
 
					float4 col = tex2D(_MainTex, i.uv);
 
					//obtain luminance value
					col = dot(col, _Luminance);
 
					//add lens circle effect
					//(could be optimised by using texture)
					float dist = distance(i.uv, float2(0.5, 0.5));
					col *= smoothstep( _LensRadius,  _LensRadius - 0.34, dist);
 
					//add rb to the brightest pixels
					col.r = max (col.r - 0.75, 0) * 4;
 
					// return col pixel	
					return col;
				}
			ENDCG
 
		}
	}
 
	Fallback off
}

Stap 2: Maak het naverwerkingsscript

Het naverwerkingsscript gebruikt de functie Unity's OnRenderImage om de RenderTexture van het scherm te verkrijgen en voert deze vervolgens in materiaal in dat een NightVision Shader gebruikt.

  • Maak een nieuw script en geef het een naam "NightVisionImageEffect"
  • Plak de onderstaande code erin:

NightVisionImageEffect.cs

using UnityEngine;

[RequireComponent(typeof(Camera))]
[ExecuteInEditMode]

public class NightVisionImageEffect : MonoBehaviour
{
    // Public data
    public Shader shader;
    [Range(0f, 1f)]
    public float luminance = 0.44f;
    [Range(0.5f, 1f)]
    public float lensRadius = 0.84f;
    // Private data
    Material material;

    // Called by Camera to apply image effect
    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (shader != null)
        {
            if (!material)
            {
                material = new Material(shader);
            }
            material.SetVector("_Luminance", new Vector4(luminance, luminance, luminance, luminance));
            material.SetFloat("_LensRadius", lensRadius);
            Graphics.Blit(source, destination, material);
        }
        else
        {
            Graphics.Blit(source, destination);
        }
    }
}
  • Voeg het NightVisionImageEffect-script toe aan elke camera
  • Wijs de Shader-variabele toe met een nieuw gemaakte NightVision Shader

Tip: Pas de schuifregelaars Luminantie en Lensradius aan om het gewenste effect te bereiken

Sharp Coder Video speler

Het nachtzichtbeeldeffect is nu gereed.

Voor:

Na:

Call of Duty: Modern Warfare-nachtzicht

Alles werkt zoals verwacht.

Voorgestelde artikelen
Deeltjeseffecten in eenheid implementeren
De juiste zwaardmodellen kiezen voor uw Unity-project
De kracht van tijdelijke texturen voor prototypen in eenheid
Modulaire binnenplaats - Een solide basis voor virtuele omgevingen
Multiplayer-tutorial op gesplitst scherm voor Unity op dezelfde pc
Minimap-tutorial van het overzichtstype voor Unity
Hoofdmenu-tutorial voor Unity