Unity용 나이트 비전 이미지 효과 후처리 튜토리얼
이 튜토리얼에서는 Unity에서 야간 투시 효과를 만드는 방법을 보여 드리겠습니다.
나이트 비전는 저조도 환경에서 가시성을 향상시키는 이미지 효과입니다. 이 효과는 실제 야간 투시경을 모방하기 위해 비디오 게임에서 자주 사용됩니다.
시연을 위해 Asset Store의 Small Cave Kit를 사용하겠습니다.
Unity에서 야간 투시 효과를 만들기 위해 특수 셰이더와 후처리 스크립트를 사용합니다.
1단계: 이미지 효과 셰이더 만들기
이미지 효과 자체는 사용자 정의 셰이더의 도움으로 수행됩니다.
- 새 셰이더를 만들고(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단계: 사후 처리 스크립트 생성
후처리 스크립트는 Unity's OnRenderImage 함수를 사용하여 화면의 RenderTexture를 가져온 다음 이를 NightVision 셰이더를 사용할 재질에 공급합니다.
- 새 스크립트를 만들고 이름을 지정하세요. "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 스크립트를 모든 카메라에 연결
- 새로 생성된 NightVision 셰이더에 셰이더 변수를 할당합니다.
팁: 원하는 효과를 얻으려면 휘도 및 렌즈 반경 슬라이더를 조정하세요.
이제 나이트 비전 이미지 효과가 준비되었습니다.
전에:
후에:
모든 것이 예상대로 작동합니다.