Tutorial Pasca Pemrosesan Efek Gambar Night Vision untuk Unity

Dalam tutorial ini, saya akan menunjukkan cara membuat efek penglihatan malam di Unity.

Penglihatan malam adalah efek gambar yang meningkatkan visibilitas dalam pengaturan cahaya rendah. Efeknya sering digunakan dalam video game untuk meniru kacamata penglihatan malam di kehidupan nyata.

Untuk tujuan demonstrasi, saya akan menggunakan Small Cave Kit dari Asset Store.

Perlengkapan Gua Kecil

Untuk membuat efek penglihatan malam di Unity kita akan menggunakan Shader khusus dan skrip pasca-pemrosesan.

Langkah 1: Buat Shader Efek Gambar

Efek gambarnya sendiri dilakukan dengan bantuan custom Shader.

  • Buat Shader baru (Buat -> Shader -> Image Effect Shader) dan beri nama "NightVisionShader"

  • Hapus semua yang ada di dalamnya lalu tempelkan kode di bawah ini:

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
}

Langkah 2: Buat Skrip Pasca Pemrosesan

Skrip pasca-pemrosesan akan menggunakan fungsi Unity's OnRenderImage untuk mendapatkan RenderTexture Layar, lalu memasukkannya ke dalam material yang akan menggunakan NightVision Shader.

  • Buat skrip baru dan beri nama "NightVisionImageEffect"
  • Rekatkan kode di bawah ini ke dalamnya:

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);
        }
    }
}
  • Lampirkan skrip NightVisionImageEffect ke Kamera mana pun
  • Tetapkan variabel Shader dengan NightVision Shader yang baru dibuat

Tip: Sesuaikan penggeser Luminance dan Lens Radius untuk mendapatkan efek yang diinginkan

Sharp Coder Pemutar video

Efek Gambar Penglihatan Malam kini siap.

Sebelum:

Setelah:

Call of Duty: Penglihatan Malam Perang Modern

Semuanya berfungsi seperti yang diharapkan.

Artikel yang Disarankan
Menerapkan Efek Partikel dalam Unity
Tutorial Efek Cahaya Objek untuk Unity
Tutorial Minimap tipe ikhtisar untuk Unity
Tutorial Menu Utama untuk Unity
Membuat Efek Filter Tape VHS di Unity
Kekuatan Tekstur Placeholder untuk Pembuatan Prototipe dalam Kesatuan
Ciptakan Efek Busa Pencuci Bertekanan dalam Kesatuan