1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| Shader "Custom/XRay" { Properties { [Header(Base)] [NoScaleOffset]_MainTex("MainTex", 2D) = "white"{} _Color ("Color", Color) = (0,0,0,0)
[Space(10)] [Header(XRay)] _XRayColor ("XRay Color", Color) = (0,0,0,0) } SubShader { Pass { Tags {"Queue" = "Transparent"} Blend One One ZTest Greater ZWrite Off
CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"
fixed4 _XRayColor;
struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; half3 normal :NORMAL; };
struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; float3 worldPos:TEXCOORD1; half3 worldNormal:TEXCOORD2; };
v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.worldPos = mul(unity_ObjectToWorld,v.vertex); o.worldNormal = UnityObjectToWorldNormal(v.normal); return o; }
fixed4 frag (v2f i) : SV_Target { fixed4 c = 1; fixed3 V = normalize(_WorldSpaceCameraPos - i.worldPos); fixed3 N = normalize(i.worldNormal); fixed VdotN = dot(V,N); fixed fresnel = 2 * pow(1 - VdotN, 2); c.rgb = fresnel * _XRayColor; fixed v = frac(i.worldPos.y * 20 - _Time.y); c.rgb *= v; return c; } ENDCG } pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"
sampler2D _MainTex; fixed4 _Color;
struct appdata { float4 vertex :POSITION; float4 uv :TEXCOORD; };
struct v2f { float4 pos :SV_POSITION; float4 uv :TEXCOORD; };
v2f vert(appdata v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = v.uv.xy; return o; }
fixed4 frag(v2f i):SV_TARGET { fixed4 c; fixed4 tex = tex2D(_MainTex, i.uv.xy); c = tex; c *= _Color;
return c; }
ENDCG } } }
|