106 lines
2.9 KiB
Plaintext
106 lines
2.9 KiB
Plaintext
Shader "UltimateXR/FX/Electric Ray"
|
|
{
|
|
Properties
|
|
{
|
|
_MainTex ("Texture Main", 2D) = "white" {}
|
|
[NoScaleOffset]_NoiseTex ("Texture Noise", 2D) = "white" {}
|
|
_Color ("Main Color", Color) = (1.0, 1.0, 1.0, 0.4)
|
|
_NoiseScale1 ("Noise Scale 1", Float) = 0.1
|
|
_NoiseScale2 ("Noise Scale 2", Float) = 0.2
|
|
_NoiseSpeed1 ("Noise Speed 1", Vector) = (0.1, 0.1, 0, 0)
|
|
_NoiseSpeed2 ("Noise Speed 2", Vector) = (-0.1, -0.1, 0, 0)
|
|
_NoiseAmplitude1 ("Noise Amplitude 1", Float) = 1
|
|
_NoiseAmplitude2 ("Noise Amplitude 2", Float) = 1
|
|
_DistortTimeStart ("Distort Time Start", Float) = 0
|
|
}
|
|
SubShader
|
|
{
|
|
Tags { "RenderType"="Transparent" "Queue"="Transparent"}
|
|
LOD 100
|
|
|
|
Pass
|
|
{
|
|
Blend SrcAlpha OneMinusSrcAlpha
|
|
Cull Off
|
|
ZWrite Off
|
|
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
#include "UnityCG.cginc"
|
|
|
|
struct appdata
|
|
{
|
|
float4 vertex : POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
float4 color : COLOR;
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct v2f
|
|
{
|
|
float2 uv : TEXCOORD0;
|
|
float2 uv2 : TEXCOORD1;
|
|
float4 vertex : SV_POSITION;
|
|
float4 color : COLOR;
|
|
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
sampler2D _MainTex, _NoiseTex;
|
|
float4 _MainTex_ST;
|
|
half4 _Color;
|
|
half _NoiseScale1, _NoiseScale2;
|
|
half4 _NoiseSpeed1, _NoiseSpeed2;
|
|
half _NoiseAmplitude1, _NoiseAmplitude2;
|
|
half _DistortTimeStart;
|
|
|
|
v2f vert (appdata v)
|
|
{
|
|
v2f o;
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_INITIALIZE_OUTPUT(v2f, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
|
|
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
|
|
o.uv2 = v.uv;
|
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
|
o.color = v.color;
|
|
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag (v2f i) : SV_Target
|
|
{
|
|
// Compute distort
|
|
|
|
half2 noiseUV1 = i.uv + (_NoiseSpeed1.xy * (_DistortTimeStart + _Time.y * 1.3));
|
|
half2 noiseUV2 = i.uv + (_NoiseSpeed2.xy * (_DistortTimeStart + _Time.y * 1.3));
|
|
|
|
half3 noise1 = tex2D(_NoiseTex, noiseUV1 * _NoiseScale1);
|
|
half3 noise2 = tex2D(_NoiseTex, noiseUV2 * _NoiseScale2);
|
|
|
|
half noiseGlobal = saturate(1.0 - (abs(i.uv2.x - 0.5) * 2));
|
|
|
|
noise1 = (noise1 - half3(0.5, 0.5, 0.5)) * 2 * _NoiseAmplitude1 * noiseGlobal;
|
|
noise2 = (noise2 - half3(0.5, 0.5, 0.5)) * 2 * _NoiseAmplitude2 * noiseGlobal;
|
|
|
|
// Compute
|
|
|
|
half u = i.uv.x;
|
|
half v = i.uv.y;
|
|
|
|
half4 mainTex = tex2D(_MainTex, half2(u, v) + noise1.xy + noise2.xy);
|
|
half3 finalRGB = mainTex.rgb * _Color.rgb * i.color.rgb;
|
|
half finalAlpha = mainTex.a * _Color.a * i.color.a;
|
|
|
|
return half4(finalRGB, finalAlpha);
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
}
|