برنامج تعليمي لتأثيرات الصور للرؤية الليلية بعد المعالجة للوحدة

في هذا البرنامج التعليمي، سأوضح كيفية إنشاء تأثير الرؤية الليلية في Unity.

الرؤية الليلية عبارة عن تأثير صورة يعمل على تحسين الرؤية في إعدادات الإضاءة المنخفضة. غالبًا ما يُستخدم هذا التأثير في ألعاب الفيديو لتقليد نظارات الرؤية الليلية الواقعية.

لأغراض العرض التوضيحي، سأستخدم Small Cave Kit من Asset Store.

طقم الكهف الصغير

لإنشاء تأثير رؤية ليلية في Unity، سنستخدم تظليلًا خاصًا وبرنامجًا نصيًا لمرحلة ما بعد المعالجة.

الخطوة 1: إنشاء تظليل تأثير الصورة

يتم تنفيذ تأثير الصورة نفسه بمساعدة تظليل مخصص.

  • قم بإنشاء تظليل جديد (إنشاء -> تظليل -> تظليل تأثير الصورة) وقم بتسميته "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: إنشاء البرنامج النصي لما بعد المعالجة

سيستخدم البرنامج النصي لمرحلة ما بعد المعالجة وظيفة Unity's OnRenderImage للحصول على 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 مشغل فديوهات

تأثير صورة الرؤية الليلية جاهز الآن.

قبل:

بعد:

نداء الواجب: الرؤية الليلية للحرب الحديثة

كل شيء يعمل كما هو متوقع.

المقالات المقترحة
تنفيذ تأثيرات الجسيمات في الوحدة
كيفية عمل رسومات قديمة تشبه PS1 في Unity
إنشاء واجهة مستخدم لشاشة الفائز في Unity
كائن توهج تأثير البرنامج التعليمي للوحدة
برنامج تعليمي متعدد اللاعبين على نفس الشاشة المنقسمة على جهاز الكمبيوتر من أجل Unity
القائمة الرئيسية للبرنامج التعليمي للوحدة
إنشاء قائمة الإيقاف المؤقت في الوحدة