Tutorial de post-procesare cu efect de imagine pentru vedere nocturnă pentru Unity
În acest tutorial, voi arăta cum să creez un efect de vedere nocturnă în Unity.
Viziunea pe timp de noapte este un efect de imagine care îmbunătățește vizibilitatea în condiții de lumină scăzută. Efectul este adesea folosit în jocurile video pentru a imita ochelarii de vedere pe timp de noapte din viața reală.
În scopuri demonstrative, voi folosi Small Cave Kit de la Asset Store.
Pentru a face un efect de viziune nocturnă în Unity, vom folosi un Shader special și un script de post-procesare.
Pasul 1: Creați umbrirea efectului de imagine
Efectul de imagine în sine este realizat cu ajutorul unui Shader personalizat.
- Creați un nou Shader (Creare -> Shader -> Image Effect Shader) și denumiți-l "NightVisionShader"
- Îndepărtați tot ce este în interior, apoi lipiți codul de mai jos:
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
}
Pasul 2: Creați scriptul de post-procesare
Scriptul de post-procesare va folosi funcția Unity's OnRenderImage pentru a obține RenderTexture a ecranului, apoi o va introduce în material care va folosi NightVision Shader.
- Creați un nou script și denumiți-l "NightVisionImageEffect"
- Lipiți codul de mai jos în el:
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);
}
}
}
- Atașați scriptul NightVisionImageEffect la orice cameră
- Atribuiți variabila Shader cu un NightVision Shader nou creat
Sfat: Ajustați glisoarele Luminanță și Raza lentilei pentru a obține efectul dorit
Efectul de imagine Night Vision este acum gata.
Inainte de:
După:
Totul funcționează conform așteptărilor.