I get five of these errors:
Pretty sure they refer to the lines toward the end. In those lines, the vec2 is taking two floats so I'm not sure what's wrong. (inexperienced with coding though so who knows!)Too many arguments to constructor of 'vec2'
Thoughts on how to get this to work? And/or, thoughts on why this behaves differently in Wire?
Thanks!
Code: Select all
/*{
"DESCRIPTION": "VHS Glitch Style",
"CREDIT": "David Lublin, original by Staffan Widegarn Åhlvik",
"ISFVSN": "2",
"CATEGORIES": [
"Stylize", "Glitch", "Retro"
],
"INPUTS": [
{
"NAME": "inputImage",
"TYPE": "image"
},
{
"NAME": "autoScan",
"TYPE": "bool",
"DEFAULT": 1.0
},
{
"NAME": "xScanline",
"TYPE": "float",
"DEFAULT": 0.5,
"MIN": 0.0,
"MAX": 1.0
},
{
"NAME": "xScanline2",
"TYPE": "float",
"DEFAULT": 0.5,
"MIN": 0.0,
"MAX": 1.0
},
{
"NAME": "yScanline",
"TYPE": "float",
"DEFAULT": 0.0,
"MIN": 0.0,
"MAX": 1.0
},
{
"NAME": "xScanlineSize",
"TYPE": "float",
"DEFAULT": 0.5,
"MIN": 0.0,
"MAX": 1.0
},
{
"NAME": "xScanlineSize2",
"TYPE": "float",
"DEFAULT": 0.25,
"MIN": 0.0,
"MAX": 1.0
},
{
"NAME": "yScanlineAmount",
"TYPE": "float",
"DEFAULT": 0.25,
"MIN": -1.0,
"MAX": 1.0
},
{
"NAME": "grainLevel",
"TYPE": "float",
"DEFAULT": 0.0,
"MIN": 0.0,
"MAX": 3.0
},
{
"NAME": "scanFollow",
"TYPE": "bool",
"DEFAULT": 1.0
},
{
"NAME": "analogDistort",
"TYPE": "float",
"DEFAULT": 1.0,
"MIN": 0.0,
"MAX": 10.0
},
{
"NAME": "bleedAmount",
"TYPE": "float",
"DEFAULT": 1.0,
"MIN": 0.0,
"MAX": 3.0
},
{
"NAME": "bleedDistort",
"TYPE": "float",
"DEFAULT": 0.5,
"MIN": 0.0,
"MAX": 1.0
},
{
"NAME": "bleedRange",
"TYPE": "float",
"DEFAULT": 1.0,
"MIN": 0.0,
"MAX": 2.0
},
{
"NAME": "colorBleedL",
"TYPE": "color",
"DEFAULT": [
0.8,
0.0,
0.4,
1.0
]
},
{
"NAME": "colorBleedC",
"TYPE": "color",
"DEFAULT": [
0.0,
0.5,
0.75,
1.0
]
},
{
"NAME": "colorBleedR",
"TYPE": "color",
"DEFAULT": [
0.8,
0.0,
0.4,
1.0
]
}
]
}*/
// Based on https://github.com/staffantan/unity-vhsglitch
// Converted by David Lublin / VIDVOX
const float tau = 6.28318530718;
float rand(vec3 co){
return abs(mod(sin( dot(co.xyz ,vec3(12.9898,78.233,45.5432) )) * 43758.5453, 1.0));
}
void main() {
float actualXLine = (!autoScan) ? xScanline : mod(xScanline + ((1.0+sin(0.34*TIME))/2.0 + (1.0+sin(TIME))/3.0 + (1.0+cos(2.1*TIME))/3.0 + (1.0+cos(0.027*TIME))/2.0)/3.5,1.0);
float actualXLineWidth = (!autoScan) ? xScanlineSize : xScanlineSize + ((1.0+sin(1.2*TIME))/2.0 + (1.0+cos(3.91*TIME))/3.0 + (1.0+cos(0.014*TIME))/2.0)/3.5;
vec2 loc = isf_FragNormCoord;
vec4 vhs = IMG_NORM_PIXEL(inputImage, loc);
float dx = 1.0+actualXLineWidth/25.0-abs(distance(loc.y, actualXLine));
float dx2 = 1.0+xScanlineSize2/10.0-abs(distance(loc.y, xScanline2));
float dy = (1.0-abs(distance(loc.y, yScanline)));
if (autoScan)
dy = (1.0-abs(distance(loc.y, mod(yScanline+TIME,1.0))));
dy = (dy > 0.5) ? 2.0 * dy : 2.0 * (1.0 - dy);
float rX = (scanFollow) ? rand(vec3(dy,actualXLine,analogDistort)) : rand(vec3(dy,bleedAmount,analogDistort));
float xTime = (actualXLine > 0.5) ? 2.0 * actualXLine : 2.0 * (1.0 - actualXLine);
loc.x += yScanlineAmount * dy * 0.025 + analogDistort * rX/(RENDERSIZE.x/2.0);
if(dx2 > 1.0 - xScanlineSize2 / 10.0) {
float rX2 = (dy * rand(vec3(dy,dx2,dx+TIME)) + dx2) / 4.0;
float distortAmount = analogDistort * (sin(rX * tau / dx2) + cos(rX * tau * 0.78 / dx2)) / 10.0;
//loc.y = xScanline2;
//loc.x += (1.0 + distortAmount * sin(tau * (loc.x) / rX2 ) - 1.0) / 15.0;
loc.x += (1.0 + distortAmount * sin(tau * (loc.x) / rX2 ) - 1.0) / 15.0;
}
if(dx > 1.0 - actualXLineWidth / 25.0)
loc.y = actualXLine;
loc.x = mod(loc.x,1.0);
loc.y = mod(loc.y,1.0);
vec4 c = IMG_NORM_PIXEL(inputImage, loc);
float x = (loc.x*320.0)/320.0;
float y = (loc.y*240.0)/240.0;
float bleed = 0.0;
if (scanFollow)
c -= rand(vec3(x, y, xTime)) * xTime / (5.0-grainLevel);
else
c -= rand(vec3(x, y, bleedAmount)) * (bleedAmount/20.0) / (5.0-grainLevel);
if (bleedAmount > 0.0) {
[color=#FF0000] IMG_NORM_PIXEL(inputImage, loc + vec2(0.01, 0)).r;
bleed += IMG_NORM_PIXEL(inputImage, loc + bleedRange * vec2(0.02, 0)).r;
bleed += IMG_NORM_PIXEL(inputImage, loc + bleedRange * vec2(0.01, 0.01)).r;
bleed += IMG_NORM_PIXEL(inputImage, loc + bleedRange * vec2(-0.02, 0.02)).r;
bleed += IMG_NORM_PIXEL(inputImage, loc + bleedRange * vec2(0.0, -0.03)).r;[/color]
bleed /= 6.0;
bleed *= bleedAmount;
}
if (bleed > 0.1){
float bleedFreq = 1.0;
float bleedX = 0.0;
if (autoScan)
bleedX = x + bleedDistort * (yScanlineAmount + (1.5 + cos(TIME / 13.0 + tau*(bleedDistort+(1.0-loc.y))))/2.0) * sin((TIME / 9.0 + bleedDistort) * tau + loc.y * loc.y * tau * bleedFreq) / 8.0;
else
bleedX = x + (yScanlineAmount + (1.0 + sin(tau*(bleedDistort+loc.y)))/2.0) * sin(bleedDistort * tau + loc.y * loc.y * tau * bleedFreq) / 10.0;
vec4 colorBleed = (bleedX < 0.5) ? mix(colorBleedL, colorBleedC, 2.0 * bleedX) : mix(colorBleedR, colorBleedC, 2.0 - 2.0 * bleedX);
if (scanFollow)
c += bleed * max(xScanlineSize,xTime) * colorBleed;
else
c += bleed * colorBleed;
}
gl_FragColor = c;
}