برنامج تعليمي لتأثيرات الصور للرؤية الليلية بعد المعالجة للوحدة
في هذا البرنامج التعليمي، سأوضح كيفية إنشاء تأثير الرؤية الليلية في 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 الذي تم إنشاؤه حديثًا
نصيحة: قم بتعديل منزلقات النصوع ونصف قطر العدسة لتحقيق التأثير المطلوب
تأثير صورة الرؤية الليلية جاهز الآن.
قبل:
بعد:
كل شيء يعمل كما هو متوقع.