Back to shaders

Shader test bench

Noise Displace.fs

vidvox-isf-files generative glsl runnable fragment MIT
Source
runnable fragment

Complete GLSL fragment shader. Stronghold runs it directly when the browser can compile it.

Code

uniform sampler2D inputImage;
uniform float displaceX;
uniform float displaceY;
uniform float detailX;
uniform float detailY;
uniform float updateTime;
precision mediump float;
/*
{
  "CATEGORIES" : [
    "Distortion Effect", "Noise"
  ],
  "DESCRIPTION" : "Displaces image randomly",
  "ISFVSN" : "2",
  "INPUTS" : [
    {
      "NAME" : "inputImage",
      "TYPE" : "image"
    },
    {
      "NAME" : "displaceX",
      "TYPE" : "float",
      "MAX" : 0.1,
      "DEFAULT" : 0.0,
      "MIN" : 0.0,
      "LABEL" : "Displace X"
    },
    {
      "NAME" : "displaceY",
      "TYPE" : "float",
      "MAX" : 0.1,
      "DEFAULT" : 0.0,
      "MIN" : 0.0,
      "LABEL" : "Displace Y"
    },
    {
      "NAME" : "detailX",
      "TYPE" : "float",
      "MAX" : 1.0,
      "DEFAULT" : 0.1,
      "MIN" : 0.0,
      "LABEL" : "Detail X"
    },
    {
      "NAME" : "detailY",
      "TYPE" : "float",
      "MAX" : 1.0,
      "DEFAULT" : 0.1,
      "MIN" : 0.0,
      "LABEL" : "Detail Y"
    },
    {
      "NAME" : "updateTime",
      "TYPE" : "float",
      "MAX" : 0.1,
      "DEFAULT" : 0.01,
      "MIN" : 0.0,
      "LABEL" : "Frequency"
    }
  ],
  "CREDIT" : "VIDVOX"
}
*/


float rand(vec2 co){
    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}

void main()	{

	vec4 inputPixelColor;
	vec2 uv = (gl_FragCoord.xy / u_resolution.xy).xy;
	float wobbleTime = (updateTime == 0.0) ? u_time : floor(u_time/updateTime);
	vec2 waveLoc = fract((uv)*vec2(detailX, detailY));
	float val1 = rand(vec2(waveLoc.x, wobbleTime));
	float val2 = rand(vec2(waveLoc.y, wobbleTime+1.0));
	vec2 wave = vec2(val1, val2)-0.5;
	wave *= vec2(displaceY, displaceX);

	inputPixelColor = texture2D(inputImage, uv + wave.yx);

	gl_FragColor = inputPixelColor;
}