Created
November 14, 2018 10:40
-
-
Save smkplus/f8a05505d2d82d109158b62b75e56493 to your computer and use it in GitHub Desktop.
VHS Noise
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//https://www.shadertoy.com/view/XtBXDt | |
Shader "Hidden/Shader" | |
{ | |
Properties | |
{ | |
_MainTex ("Texture", 2D) = "white" {} | |
} | |
SubShader | |
{ | |
// No culling or depth | |
Cull Off ZWrite Off ZTest Always | |
Pass | |
{ | |
CGPROGRAM | |
#pragma vertex vert | |
#pragma fragment frag | |
#include "UnityCG.cginc" | |
struct appdata | |
{ | |
float4 vertex : POSITION; | |
float2 uv : TEXCOORD0; | |
}; | |
struct v2f | |
{ | |
float2 uv : TEXCOORD0; | |
float4 vertex : SV_POSITION; | |
}; | |
v2f vert (appdata v) | |
{ | |
v2f o; | |
o.vertex = UnityObjectToClipPos(v.vertex); | |
o.uv = v.uv; | |
return o; | |
} | |
sampler2D _MainTex; | |
#define PI 3.14159265 | |
float3 tex2DSample( sampler2D _tex, float2 _p ){ | |
float3 col = tex2D( _tex, _p ).xyz; | |
if ( 0.5 < abs( _p.x - 0.5 ) ) { | |
col = float3( 0.1,0.1,0.1); | |
} | |
return col; | |
} | |
float hash( float2 _v ){ | |
return frac( sin( dot( _v, float2( 89.44, 19.36 ) ) ) * 22189.22 ); | |
} | |
float iHash( float2 _v, float2 _r ){ | |
float h00 = hash( float2( floor( _v * _r + float2( 0.0, 0.0 ) ) / _r ) ); | |
float h10 = hash( float2( floor( _v * _r + float2( 1.0, 0.0 ) ) / _r ) ); | |
float h01 = hash( float2( floor( _v * _r + float2( 0.0, 1.0 ) ) / _r ) ); | |
float h11 = hash( float2( floor( _v * _r + float2( 1.0, 1.0 ) ) / _r ) ); | |
float2 ip = float2( smoothstep( float2( 0.0, 0.0 ), float2( 1.0, 1.0 ), fmod( _v*_r, 1. ) ) ); | |
return ( h00 * ( 1. - ip.x ) + h10 * ip.x ) * ( 1. - ip.y ) + ( h01 * ( 1. - ip.x ) + h11 * ip.x ) * ip.y; | |
} | |
float noise( float2 _v ){ | |
float sum = 0.; | |
for( int i=1; i<9; i++ ) | |
{ | |
float pp = 2. * pow( 2., float( i ) ); | |
sum += iHash( _v + float2( i ,i), float2(pp,pp) / pow( 2., float( i ) )); | |
} | |
return sum; | |
} | |
fixed4 frag (v2f i) : SV_Target | |
{ | |
float2 uv = i.uv; | |
float2 uvn = uv; | |
float3 col = float3(0,0,0); | |
// tape wave | |
uvn.x += ( noise( float2( uvn.y, _Time.y ) ) - 0.5 )* 0.005; | |
uvn.x += ( noise( float2( uvn.y * 100.0, _Time.y * 10.0 ) ) - 0.5 ) * 0.01; | |
// tape crease | |
float tcPhase = clamp( ( sin( uvn.y * 8.0 - _Time.y * PI * 1.2 ) - 0.92 ) * noise( float2( _Time.y,_Time.y ) ), 0.0, 0.01 ) * 10.0; | |
float tcNoise = max( noise( float2( uvn.y * 100.0, _Time.y * 10.0 ) ) - 0.5, 0.0 ); | |
uvn.x = uvn.x - tcNoise * tcPhase; | |
// switching noise | |
float snPhase = smoothstep( 0.03, 0.0, uvn.y ); | |
uvn.y += snPhase * 0.3; | |
uvn.x += snPhase * ( ( noise( float2( uv.y * 100.0, _Time.y * 10.0 ) ) - 0.5 ) * 0.2 ); | |
col = tex2D( _MainTex, uvn ); | |
col *= 1.0 - tcPhase; | |
col = lerp( | |
col, | |
col.yzx, | |
snPhase | |
); | |
// bloom | |
for( float x = -4.0; x < 2.5; x += 1.0 ){ | |
col.xyz += float3( | |
tex2DSample( _MainTex, uvn + float2( x - 0.0, 0.0 ) * 7E-3 ).x, | |
tex2DSample( _MainTex, uvn + float2( x - 2.0, 0.0 ) * 7E-3 ).y, | |
tex2DSample( _MainTex, uvn + float2( x - 4.0, 0.0 ) * 7E-3 ).z | |
) * 0.1; | |
} | |
col *= 0.6; | |
// ac beat | |
col *= 1.0 + clamp( noise( float2( 0.0, uv.y + _Time.y * 0.2 ) ) * 0.6 - 0.25, 0.0, 0.1 ); | |
return float4( col, 1.0 ); | |
} | |
ENDCG | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment