Tutorial zur Nachbearbeitung von Nachtsicht-Bildeffekten für Unity
In diesem Tutorial zeige ich, wie man in Unity einen Nachtsichteffekt erstellt.
Nachtsicht ist ein Bildeffekt, der die Sichtbarkeit bei schlechten Lichtverhältnissen verbessert. Der Effekt wird häufig in Videospielen verwendet, um echte Nachtsichtbrillen nachzuahmen.
Zu Demonstrationszwecken verwende ich das Small Cave Kit aus Asset Store.
Um in Unity einen Nachtsichteffekt zu erzeugen, verwenden wir einen speziellen Shader und ein Nachbearbeitungsskript.
Schritt 1: Erstellen Sie den Bildeffekt-Shader
Der Bildeffekt selbst wird mit Hilfe eines benutzerdefinierten Shaders erstellt.
- Erstellen einen neuen Shader (Erstellen -> Shader -> Bildeffekt-Shader) und benennen Sie ihn "NightVisionShader"
- Entfernen Sie alles darin und fügen Sie dann den folgenden Code ein:
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
}
Schritt 2: Erstellen Sie das Nachbearbeitungsskript
Das Nachbearbeitungsskript verwendet die Funktion Unity's OnRenderImage, um die RenderTexture des Bildschirms abzurufen und sie dann in Material einzuspeisen, das einen NightVision-Shader verwendet.
- Erstellen ein neues Skript und benennen Sie es "NightVisionImageEffect"
- Fügen Sie den folgenden Code ein:
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);
}
}
}
- Hängen Sie das NightVisionImageEffect-Skript an eine beliebige Kamera an
- Weisen Sie der Shader-Variable einen neu erstellten NightVision-Shader zu
Tipp: Passen Sie die Schieberegler „Luminanz“ und „Linsenradius“ an, um den gewünschten Effekt zu erzielen
Der Nachtsicht-Bildeffekt ist jetzt fertig.
Vor:
Nach:
Alles funktioniert wie erwartet.