OliveRave/UnityProject/Assets/AudioLink/Shaders/AudioLinkDocs_Demo4.shader
2022-11-21 17:56:52 +01:00

88 lines
2.9 KiB
Plaintext

Shader "AudioLink/Examples/Demo4"
{
Properties
{
}
SubShader
{
Tags { "RenderType"="Opaque" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "/Assets/AudioLink/Shaders/AudioLink.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float3 vpOrig : TEXCOORD0;
float3 vpXform : TEXCOORD1;
float4 vertex : SV_POSITION;
float corrmax : TEXCOORD2;
};
v2f vert (appdata v)
{
v2f o;
float3 vp = v.vertex;
o.vpOrig = vp;
// Generate a value for how far around the circle you are.
// atan2 generates a number from -pi to pi. We want to map
// this from -1..1. Tricky: add 0.001 to x otherwise
// we lose a vertex at the poll because atan2 is undefined.
float phi = atan2( vp.x+0.001, vp.z ) / 3.14159;
// We want to mirror the -1..1 so that it's actually 0..1 but
// mirrored.
float placeinautocorrelator = abs( phi );
// Note: We don't need lerp multiline because the autocorrelator
// is only a single line.
float autocorrvalue = AudioLinkLerp( ALPASS_AUTOCORRELATOR +
float2( placeinautocorrelator * AUDIOLINK_WIDTH, 0. ) );
// Squish in the sides, and make it so it only perterbs
// the surface.
autocorrvalue = autocorrvalue * (.5-abs(vp.y)) * 0.4 + .6;
// Perform same operation to find max. The 0th bin on the
// autocorrelator will almost always be the max
o.corrmax = AudioLinkLerp( ALPASS_AUTOCORRELATOR ) * 0.2 + .6;
// Modify the original vertices by this amount.
vp *= autocorrvalue;
o.vpXform = vp;
o.vertex = UnityObjectToClipPos(vp);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// Decide how we want to color from colorchord.
float ccplace = length( i.vpXform.xz )*2. / i.corrmax;
// Get a color from ColorChord
float4 colorchordcolor = AudioLinkData( ALPASS_CCSTRIP +
float2( AUDIOLINK_WIDTH * ccplace, 0. ) ) + 0.01;
// Shade the color a little.
colorchordcolor *= length( i.vpXform.xyz ) * 15. - 2.0;
return colorchordcolor;
}
ENDCG
}
}
}