VR4RoboticArm2/VR4RoboticArm/Library/PackageCache/com.meta.xr.sdk.interaction/Runtime/Shaders/Locomotion/TunnelingEffect.shader
IonutMocanu 48cccc22ad Main2
2025-09-08 11:13:29 +03:00

87 lines
2.3 KiB
Plaintext

Shader "Unlit/TunnelingEffect"
{
Properties
{
_ColorInner("Inner Color", COLOR) = (1,0,0,1)
_ColorOuter("Outer Color", COLOR) = (0,0,0,1)
_Direction("Direction", VECTOR) = (0,0,1,0)
_MinRadius("Min Radius",Range(-1,1)) = 0
_MaxRadius("Max Radius",Range(-1,1)) = 0
_Alpha("Fade",Range(0,1)) = 1
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
}
Cull Back
Lighting Off
ZWrite Off
ZTest Always
Blend SrcAlpha OneMinusSrcAlpha, OneMinusDstAlpha One
LOD 100
Pass
{
CGPROGRAM
#pragma target 2.0
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f
{
float4 vertex : SV_POSITION;
float3 worldPosition: TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
half4 _ColorInner;
half4 _ColorOuter;
float3 _Direction;
half _MinRadius;
half _MaxRadius;
half _Alpha;
v2f vert (appdata v)
{
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_OUTPUT(v2f, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.worldPosition = mul(unity_ObjectToWorld, float4(v.vertex.xyz, 1.0)).xyz;
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
float3 viewDir = normalize(i.worldPosition - _WorldSpaceCameraPos);
float fov = dot(_Direction, viewDir);
float dirMask = saturate((fov - _MinRadius) / (_MaxRadius - _MinRadius));
half4 color = lerp(_ColorInner, _ColorOuter, fov * 0.5 + 0.5);
dirMask = smoothstep(0,1,dirMask);
return fixed4(color.xyz, color.w * dirMask * _Alpha);
}
ENDCG
}
}
}