Tutorial sulla post-elaborazione degli effetti immagine per la visione notturna per Unity

In questo tutorial, mostrerò come creare un effetto di visione notturna in Unity.

La visione notturna è un effetto immagine che migliora la visibilità in condizioni di scarsa illuminazione. L'effetto viene spesso utilizzato nei videogiochi per imitare gli occhiali per la visione notturna della vita reale.

A scopo dimostrativo, utilizzerò il Small Cave Kit di Asset Store.

Kit piccola grotta

Per creare un effetto di visione notturna in Unity utilizzeremo uno Shader speciale e uno script di post-elaborazione.

Passaggio 1: crea lo shader dell'effetto immagine

L'effetto dell'immagine stessa viene eseguito con l'aiuto di uno Shader personalizzato.

  • Crea un nuovo Shader (Crea -> Shader -> Shader effetti immagine) e assegnagli un nome "NightVisionShader"

  • Rimuovi tutto al suo interno quindi incolla il codice seguente:

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
}

Passaggio 2: creare lo script di post-elaborazione

Lo script di post-elaborazione utilizzerà la funzione Unity's OnRenderImage per ottenere la RenderTexture dello schermo, quindi inserirla nel materiale che utilizzerà uno Shader NightVision.

  • Crea un nuovo script e assegnagli un nome "NightVisionImageEffect"
  • Incolla al suo interno il codice qui sotto:

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);
        }
    }
}
  • Allega lo script NightVisionImageEffect a qualsiasi fotocamera
  • Assegna la variabile Shader con uno Shader NightVision appena creato

Suggerimento: modifica i cursori Luminanza e Raggio lente per ottenere l'effetto desiderato

Sharp Coder Lettore video

L'effetto immagine della visione notturna è ora pronto.

Prima:

Dopo:

Visione notturna di Call of Duty: Modern Warfare

Tutto funziona come previsto.

Articoli suggeriti
Implementazione degli effetti particellari in Unity
Tutorial sulla minimappa di tipo panoramica per Unity
Tutorial del menu principale per Unity
Potenza delle texture segnaposto per la prototipazione in Unity
Crea un effetto schiuma per idropulitrice in Unity
Tutorial sull'effetto bagliore degli oggetti per Unity
Tutorial multiplayer sullo stesso PC a schermo diviso per Unity