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.
Để 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
Hiệu ứng hình ảnh tầm nhìn ban đêm hiện đã sẵn sàng.
Trước:
Sau đó:
Mọi thứ hoạt động như mong đợi.