הדרכה לאחר עיבוד תמונה של ראיית לילה עבור Unity
במדריך זה, אני אראה כיצד ליצור אפקט של ראיית לילה ב-Unity.
ראיית לילה היא אפקט תמונה המשפר את הנראות בהגדרות של תאורה נמוכה. האפקט משמש לעתים קרובות במשחקי וידאו כדי לחקות משקפי ראיית לילה בחיים האמיתיים.
למטרות הדגמה, אשתמש בערכת מערה קטנה מה-Asset Store.
כדי ליצור אפקט של ראיית לילה ב-Unity נשתמש ב-Shader מיוחד ובתסריט שלאחר עיבוד.
שלב 1: צור את הצללת אפקט התמונה
אפקט התמונה עצמו נעשה בעזרת Shader מותאם אישית.
- צור Shader חדש (Create -> Shader -> Image Effect Shader) ושם לו "NightVisionShader"
- הסר את כל מה שבתוכו ואז הדבק את הקוד למטה:
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
}
שלב 2: צור את הסקריפט שלאחר העיבוד
התסריט שלאחר העיבוד ישתמש בפונקציה OnRenderImage של Unity כדי לקבל את RenderTexture של המסך, ואז יזין אותו לחומר שישתמש ב-NightVision Shader.
- צור סקריפט חדש ותן לו שם "NightVisionImageEffect"
- הדבק בתוכו את הקוד למטה:
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 לכל מצלמה
- הקצה את המשתנה Shader עם NightVision Shader שזה עתה נוצר
טיפ: כוונן את מחווני הבהירות ורדיוס העדשה כדי להשיג את האפקט הרצוי
אפקט תמונת ראיית הלילה מוכן כעת.
לפני:
לאחר:
הכל עובד כמצופה.