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.

Küçük Mağara Seti

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

Sharp Coder Video oynatıcı

Gece Görüşü Görüntü Efekti artık hazır.

Önce:

Sonrasında:

Call of Duty: Modern Warfare Gece Görüşü

Her şey beklendiği gibi çalışıyor.

Önerilen Makaleler
Unity'de Parçacık Efektlerinin Uygulanması
Unity için Nesne Parlama Efekti Eğitimi
Unity'de VHS Bant Filtresi Efekti Oluşturma
Unity için Genel Bakış Türü Mini Harita Eğitimi
Unity'de PS1 Benzeri Retro Grafikler Nasıl Yapılır
Unity için Bölünmüş Ekranlı Aynı Bilgisayar Çok Oyunculu Eğitimi
Unity için Ana Menü Eğitimi