게임개발/게임 그래픽 프로그래밍
홀로그램 만들기
pudding81
2024. 2. 20. 16:17
Shader "Custom/hologram"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_BumpMap("Normalmap",2D) ="bump"{}
_Color("",Color)=(1,1,1,1)
_RimPow("RimPow",Range(1,10)) =3
// _Speed("Speed",Range(1,5))=3
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent"} // 반투명
CGPROGRAM
#pragma surface surf _Lambert alpha:fade//홀로그램
#pragma target 3.0
sampler2D _MainTex;
sampler2D _BumpMap;
float _RimPow;
float4 _Color;
//float _Speed;
struct Input
{
float2 uv_MainTex;
float3 viewDir;
float3 worldPos;//월드공간상 위치
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) ;
// y축만 출력 (0~0.999) 검정에서 흰색 그라데이션 반복됨.
o.Emission =_Color.rgb;
//흰부분을 줄임, 흰부분 사이 간격을 줄임, 위로 흘러가게 만들기
float holo =pow(frac(IN.worldPos.g*3-_Time.y),30);
//노멀맵
fixed4 n =tex2D (_BumpMap, IN.uv_MainTex);
o.Normal =UnpackNormal(n);
//rim
float ndotv =saturate(dot(o.Normal,IN.viewDir));
//rim 라이트의 색상과 두께 조절
float rim =pow(1-ndotv,_RimPow);//홀로그램
o.Alpha = rim+holo ;
}
float4 Lighting_Lambert(SurfaceOutput s,float3 lightDir, float atten)
{
return float4 (0,0,0,s.Alpha);
}
ENDCG
}
FallBack "Transparent/Diffuse"
}