Hướng dẫn xử lý hậu kỳ hiệu ứng hình ảnh tầm nhìn ban đêm cho Unity

Trong hướng dẫn này, tôi sẽ hướng dẫn cách tạo hiệu ứng nhìn đêm trong Unity.

Tầm nhìn ban đêm là hiệu ứng hình ảnh giúp nâng cao khả năng hiển thị trong cài đặt ánh sáng yếu. Hiệu ứng này thường được sử dụng trong các trò chơi điện tử để mô phỏng kính nhìn đêm ngoài đời thực.

Với mục đích minh họa, tôi sẽ sử dụng Small Cave Kit từ Asset Store.

Bộ hang động nhỏ

Để tạo hiệu ứng nhìn đêm trong Unity, chúng tôi sẽ sử dụng Shader đặc biệt và tập lệnh xử lý hậu kỳ.

Bước 1: Tạo Shader hiệu ứng hình ảnh

Bản thân hiệu ứng hình ảnh được thực hiện với sự trợ giúp của Shader tùy chỉnh.

  • Tạo một Shader mới (Tạo -> Shader -> Shader hiệu ứng hình ảnh) và đặt tên cho nó "NightVisionShader"

  • Xóa mọi thứ bên trong rồi dán mã bên dưới:

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
}

Bước 2: Tạo tập lệnh xử lý hậu kỳ

Tập lệnh xử lý hậu kỳ sẽ sử dụng chức năng Unity's OnRenderImage để lấy RenderTexture của Màn hình, sau đó đưa nó vào vật liệu sẽ sử dụng NightVision Shader.

  • Tạo một tập lệnh mới và đặt tên cho nó "NightVisionImageEffect"
  • Dán đoạn mã bên dưới vào bên trong 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);
        }
    }
}
  • Đính kèm tập lệnh NightVisionImageEffect vào bất kỳ Máy ảnh nào
  • Gán biến Shader với NightVision Shader mới được tạo

Mẹo: Tinh chỉnh các thanh trượt Độ sáng và Bán kính ống kính để đạt được hiệu ứng mong muốn

Sharp Coder Trình phát video

Hiệu ứng hình ảnh tầm nhìn ban đêm hiện đã sẵn sàng.

Trước:

Sau đó:

Call of Duty: Tầm nhìn ban đêm trong chiến tranh hiện đại

Mọi thứ hoạt động như mong đợi.

Bài viết được đề xuất
Triển khai hiệu ứng hạt trong Unity
Hướng dẫn tạo hiệu ứng phát sáng đối tượng cho Unity
Tạo hiệu ứng bộ lọc băng VHS trong Unity
Tạo hiệu ứng bọt máy rửa áp lực trong Unity
Hướng dẫn menu chính cho Unity
Tạo mô phỏng chuyến bay trong Unity
Chọn mẫu kiếm phù hợp cho dự án Unity của bạn