הדרכה לאחר עיבוד תמונה של ראיית לילה עבור 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 שזה עתה נוצר

טיפ: כוונן את מחווני הבהירות ורדיוס העדשה כדי להשיג את האפקט הרצוי

Sharp Coder נגן וידאו

אפקט תמונת ראיית הלילה מוכן כעת.

לפני:

לאחר:

Call of Duty: Modern Warfare Night Vision

הכל עובד כמצופה.