빈티지 효과 내기빈티지 필름 효과 내기

빈티지 필름 (약간의 빛 바래고 낡은 느낌)을 내는 효과를 간단하게 테스트 진행했다.
반응형
< Material 속성 >
색조(Color Tint),채도(Saturation),대비(Contrast),비네트(Vignette),정적 필름 그레인(Film Grain) 설정값을 적절히 조절해서
약간 색이 바래진 느낌과 빈티지 필름 형태의 표현이 가능하게 처리를 했다.

< Shader Code >
Shader "Custom/VintageFilm"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
// Vintage 톤
_ColorTint ("Color Tint", Color) = (1.0, 0.95, 0.8, 1.0)
_Saturation ("Saturation", Range(0.0, 2.0)) = 0.8
_Contrast ("Contrast", Range(0.0, 2.0)) = 1.0
// Vignette
_VignetteIntensity ("Vignette Intensity", Range(0.0, 1.0)) = 0.3
_VignetteSmoothness ("Vignette Smoothness", Range(0.1, 1.0)) = 0.5
// Film Grain
_GrainIntensity ("Grain Intensity", Range(0.0, 1.0)) = 0.25
_GrainScale ("Grain Scale", Range(0.5, 10.0)) = 3.0
}
SubShader
{
Tags
{
"Queue"="Transparent"
"RenderType"="Transparent"
}
Cull Off
ZWrite Off
Lighting Off
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Color;
fixed4 _ColorTint;
half _Saturation;
half _Contrast;
half _VignetteIntensity;
half _VignetteSmoothness;
half _GrainIntensity;
half _GrainScale;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float4 color : COLOR;
};
struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
fixed4 color : COLOR;
};
v2f vert (appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.color = v.color * _Color;
return o;
}
// 고급 필름 노이즈 함수(더 자연스러운 패턴)
float filmNoise(float2 uv)
{
float2 p = uv * _GrainScale;
// 3중 노이즈 → 진짜 필름 비슷한 패턴
float n = (
sin(dot(p, float2(12.9898, 78.233))) +
sin(dot(p, float2(26.4217, 45.129))) +
sin(dot(p, float2(91.123, 12.342)))
) / 3.0;
return n; // -1 ~ 1 범위로 변환은 후처리에서
}
fixed4 frag (v2f i) : SV_Target
{
float2 uv = i.uv;
fixed4 col = tex2D(_MainTex, uv) * i.color;
// 1) Color Tint
col.rgb *= _ColorTint.rgb;
// 2) Saturation
half luminance = dot(col.rgb, half3(0.299, 0.587, 0.114));
col.rgb = lerp(luminance.xxx, col.rgb, _Saturation);
// 3) Contrast
col.rgb = (col.rgb - 0.5) * _Contrast + 0.5;
// 4) Vignette
float2 center = float2(0.5, 0.5);
float dist = distance(uv, center);
float vig = smoothstep(_VignetteSmoothness, 1.0, dist);
col.rgb *= lerp(1.0, 1.0 - _VignetteIntensity, vig);
// 5) Film Grain
if (_GrainIntensity > 0.0)
{
float g = filmNoise(uv);
g = (g * 0.5); // -0.5 ~ 0.5
col.rgb += g * _GrainIntensity;
}
col.rgb = saturate(col.rgb);
return col;
}
ENDCG
}
}
FallBack "Unlit/Transparent"
}
해당 코드는 기존의 원본과 비교를 할수있는 상태여야 충분히 효과를 볼 수 있다.
★★★☆☆
반응형
'개발 > Unity) Shader' 카테고리의 다른 글
| Unity Shader) 디졸브 (Dissolve) (0) | 2026.01.19 |
|---|---|
| Unity Shade) 금,은,동 메탈 포일 효과 (금박 느낌 표현 하기) (0) | 2025.12.16 |
| Unity Shader) 패턴 이동 (Pattern Move) (0) | 2025.11.23 |
| Unity)Shader Pre-Warm Up 정리 (0) | 2025.09.29 |
| Unity) Shader Graphics API 설정 변경 테스트 방법 (0) | 2025.09.16 |
댓글