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 셰이더에 셰이더 변수를 할당합니다.

팁: 원하는 효과를 얻으려면 휘도 및 렌즈 반경 슬라이더를 조정하세요.

Sharp Coder 비디오 플레이어

이제 나이트 비전 이미지 효과가 준비되었습니다.

전에:

후에:

콜 오브 듀티: 모던 워페어 나이트 비전

모든 것이 예상대로 작동합니다.