// // Simple passthrough vertex shader // attribute vec3 in_Position; // (x,y,z) //attribute vec3 in_Normal; // (x,y,z) unused in this shader. attribute vec4 in_Colour; // (r,g,b,a) attribute vec2 in_TextureCoord; // (u,v) varying vec2 v_vTexcoord; varying vec4 v_vColour; void main() { vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; v_vColour = in_Colour; v_vTexcoord = in_TextureCoord; } //######################_==_YOYO_SHADER_MARKER_==_######################@~ // Gabor noise // By shader god Inigo Quilez (https://iquilezles.org) // MIT License varying vec2 v_vTexcoord; varying vec4 v_vColour; uniform float seed; uniform vec2 alignment; uniform int alignmentUseSurf; uniform sampler2D alignmentSurf; float align; uniform vec2 sharpness; uniform int sharpnessUseSurf; uniform sampler2D sharpnessSurf; float sharp; uniform vec2 rotation; uniform int rotationUseSurf; uniform sampler2D rotationSurf; float rot; uniform vec2 scale; uniform int scaleUseSurf; uniform sampler2D scaleSurf; uniform vec2 dimension; uniform vec2 position; uniform float trRotation; uniform vec2 augment; vec2 hash(vec2 p) { return fract(sin(vec2( dot(p, vec2(127.1324, 311.7874)) * (152.6178612 + seed / 10000.), dot(p, vec2(269.8355, 183.3961)) * (437.5453123 + seed / 10000.) )) * 43758.5453); } vec3 gabor_wave(in vec2 p) { vec2 ip = floor(p); vec2 fp = fract(p); float fa = sharp; float fr = align * 6.283185; float rt = rot; vec3 av = vec3(0.0, 0.0, 0.0); vec3 at = vec3(0.0, 0.0, 0.0); for( int j = -2; j <= 2; j++ ) for( int i = -2; i <= 2; i++ ) { vec2 o = vec2( i, j ); vec2 h = hash(ip + o); vec2 r = fp - (o + h); vec2 k = normalize(-1.0 + 2.0 * hash(ip + o + augment) ); float d = dot(r, r); float l = dot(r, k) + rt; float w = exp(-fa * d); vec2 cs = vec2( cos(fr * l + rt), sin(fr * l + rt) ); av += w * vec3(cs.x, -2.0 * fa * r * cs.x - cs.y * fr * k ); at += w * vec3(1.0, -2.0 * fa * r); } return vec3( av.x, av.yz - av.x * at.yz / at.x ) / at.x; } void main() { vec2 sca = scale; if(scaleUseSurf == 1) { vec4 _vMap = texture2D( scaleSurf, v_vTexcoord ); sca = vec2(mix(scale.x, scale.y, (_vMap.r + _vMap.g + _vMap.b) / 3.)); } rot = rotation.x; if(rotationUseSurf == 1) { vec4 _vMap = texture2D( rotationSurf, v_vTexcoord ); rot = mix(rotation.x, rotation.y, (_vMap.r + _vMap.g + _vMap.b) / 3.); } rot = radians(rot); align = alignment.x; if(alignmentUseSurf == 1) { vec4 _vMap = texture2D( alignmentSurf, v_vTexcoord ); align = mix(alignment.x, alignment.y, (_vMap.r + _vMap.g + _vMap.b) / 3.); } sharp = sharpness.x; if(sharpnessUseSurf == 1) { vec4 _vMap = texture2D( sharpnessSurf, v_vTexcoord ); sharp = mix(sharpness.x, sharpness.y, (_vMap.r + _vMap.g + _vMap.b) / 3.); } float r = radians(trRotation); vec2 pos = v_vTexcoord; pos.x *= (dimension.x / dimension.y); pos = (pos - position / dimension) * mat2(cos(r), -sin(r), sin(r), cos(r)) * scale; vec3 f = gabor_wave(pos); vec3 col = vec3(0.5 + 0.5 * f.x); gl_FragColor = vec4( col, 1.0 ); }