홀로그램 효과 쉐이더
내용
반응형
Shader "Custom/HolographyShader"
{
Properties
{
_MainTex ("Main Texture", 2D) = "white" {} // 기본 텍스처
_NoiseTex ("Crack Pattern Texture", 2D) = "white" {} // 크랙 패턴 노이즈 텍스처
_Color ("Base Color", Color) = (1, 1, 1, 1) // 기본 색상
_MousePos ("Mouse Position", Vector) = (0, 0, 0, 0) // 마우스 위치
_NoiseScale ("Noise Scale", Float) = 10.0 // 크랙 패턴 스케일
_Iridescence ("Iridescence Strength", Float) = 1.0 // 홀로그램 반사 강도
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
LOD 200
Blend SrcAlpha OneMinusSrcAlpha // 투명도 지원
Cull Off // 양면 렌더링
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float3 viewDir : TEXCOORD1;
float3 normal : TEXCOORD2;
float4 pos : SV_POSITION;
};
sampler2D _MainTex;
sampler2D _NoiseTex;
float4 _Color;
float4 _MousePos; // 마우스 위치 속성
float _NoiseScale;
float _Iridescence;
v2f vert (appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
// 카메라 방향 계산
float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
o.viewDir = normalize(_WorldSpaceCameraPos - worldPos);
o.normal = normalize(mul((float3x3)unity_ObjectToWorld, v.normal));
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// 텍스처 색상 가져오기
fixed4 texColor = tex2D(_MainTex, i.uv) * _Color;
// 크랙 패턴 노이즈 샘플링
float2 noiseUV = i.uv * _NoiseScale;
float crackPattern = tex2D(_NoiseTex, noiseUV).r;
// 프레넬 효과 계산
float fresnel = dot(i.viewDir, i.normal);
fresnel = 1.0 - saturate(fresnel);
// 마우스 위치에 따른 거리 계산
float distanceToMouse = distance(float2(_MousePos.x, _MousePos.y), i.uv);
// 홀로그램 색상: 거리 및 크랙 패턴에 기반
float hue = fmod((fresnel * _Iridescence + crackPattern) * (1.0 - distanceToMouse), 1.0);
fixed3 hologramColor = fixed3(
abs(hue * 6.0 - 3.0) - 1.0,
2.0 - abs(hue * 6.0 - 2.0),
2.0 - abs(hue * 6.0 - 4.0)
);
hologramColor = saturate(hologramColor);
// 최종 색상: 크랙 패턴과 홀로그램 색상 조합
fixed3 finalColor = texColor.rgb * (hologramColor * fresnel * crackPattern + 0.5);
return fixed4(finalColor, texColor.a * crackPattern);
}
ENDCG
}
}
FallBack "Diffuse"
}
사진
★☆☆
반응형
댓글