WebGL
WebGL is the umbrella term for graphics programming technologies in the browser. It's part GLSL (GL Shading Language) and JavaScript. GLSL is a graphics language based on OpenGL, that has a C like syntax.
Vectors
vec4 vector;
vector[0] = vector.r = vector.x = vector.s;
vector[1] = vector.g = vector.y = vector.t;
vector[2] = vector.b = vector.z = vector.p;
vector[3] = vector.a = vector.w = vector.q;
Swizzle
Changing the position of vector properties to create new values. E.g.
vec3 green = vec3(1.0, 1.0, 0.0);
vec3 magenta = green.rbg;
Uniforms
GLSL is deterministic, doesn't have memory management and operates on every
pixel of the canvas. In order for dynamic behavior to happen, shaders have a
concept of uniforms. Uniforms are a bridge from JavaScript to GLSL. These can
be any value, though common values to transmit are screenResolution
and
globalTime
. Uniforms are commonly prepended with i
. Here's an overview of
commonly defined uniforms:
float iGlobalTime Time in milliseconds, increments linearly
vec3 iResolution Canvas size in xyz, where z is always 0
Built-ins
GLSL has built-in functions and built-in variables.
vec4 gl_FragCoord Location of the pixel on the screen, has an xyzw component
glslify
glslify brings NPM to GLSL; the hot sauce to the steam buns. Instead of copy-and-pasting large snippets of code, it enables you to import those snippets as modules instead. This allows for more focused user-facing code, that can be understood by more people than just the author. Imports are defined and consumed in pragmas, so the glslify specific code is neatly tucked away in a single location.
#pragma glslify: camera = require('glsl-turntable-camera')
Shaping functions
Shaping functions are the corner stone of algorithmic drawing. Essential to generate anything with WebGL.
- book-of-shaders/shapers
- shadershop
- iquilezles/functions
- shapers-poly
- shapers-exp
- shapers-circ
- shapers-bez
Noise functions
- curl noise: used for particle motion, particular useful for smoke and other similar effects
- perlin noise: kind of like photoshop's cloud filter
- simplex noise: similar to perlin noise, but a hella lot faster
Blending
Reaction-Diffusion
See Also
- shadertoy - graphics playground & demo room
- glslb.in - modular graphics playground
- the book of shaders - damn good tutorial
- Inigo Quilez - hub of everything you'll ever need to know about graphics
- geeks3d - articles on 3d stuff
- learningwebgl - articles on WebGL stuff
- webglplayground - nice urt
- Essential Mathematics for Games and Interactive Applications - neat book
- lwjgl essentials - LibGDX/LWJGL tutorials and examples
- drawing lines is hard
- gpgpu utils for three.js
- webglstats
- eyeofestival/videos
- retro shaders rayman legends
- docs.gl
- on generative algorithms
- fake and cheap metaballs