Unity için Gece Görüşü Görüntü Efekti İşlem Sonrası Eğitimi
Bu derste Unity'te gece görüş efektinin nasıl oluşturulacağını göstereceğim.
Gece görüşü, düşük ışık ayarlarında görünürlüğü artıran bir görüntü efektidir. Bu efekt genellikle video oyunlarında gerçek hayattaki gece görüş gözlüklerini taklit etmek için kullanılır.
Gösteri amacıyla Asset Store'nin Küçük Mağara Kitini kullanacağım.
Unity'te gece görüşü efekti yaratmak için özel bir Gölgelendirici ve bir işlem sonrası komut dosyası kullanacağız.
Adım 1: Görüntü Efekti Gölgelendiricisini Oluşturun
Görüntü efektinin kendisi özel bir Gölgelendiricinin yardımıyla yapılır.
- yeni bir Gölgelendirici oluşturun (Oluştur -> Gölgelendirici -> Görüntü Efekti Gölgelendirici) ve adını verin "NightVisionShader"
- İçindeki her şeyi kaldırın ve aşağıdaki kodu yapıştırın:
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
}
Adım 2: İşlem Sonrası Komut Dosyasını Oluşturun
İşlem sonrası komut dosyası, Ekranın RenderTexture'ını almak için Unity's OnRenderImage işlevini kullanacak, ardından onu NightVision Shader kullanacak malzemeye besleyecektir.
- yeni bir komut dosyası oluşturun ve adlandırın "NightVisionImageEffect"
- İçine aşağıdaki kodu yapıştırın:
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);
}
}
}
- NightVisionImageEffect komut dosyasını herhangi bir Kameraya ekleyin
- Shader değişkenini yeni oluşturulan NightVision Shader ile atayın
İpucu: İstenilen efekti elde etmek için Parlaklık ve Mercek Yarıçapı kaydırıcılarını ayarlayın
Gece Görüşü Görüntü Efekti artık hazır.
Önce:
Sonrasında:
Her şey beklendiği gibi çalışıyor.