Motion
Get Motion

ReferenceMaterial nodesColour

Dither

Fewer colours, with a fine pattern standing in for the ones between.

Colourdither

Inputs

PinTypeStarts atNotes
Incolourvec3"#808080"–
Levelslevelsfloat4–
Scalescalefloat1–

Outputs

PinType
outvec3

The code it becomes

What Studio writes for the graph below: a few lines of the material's shader, worked out for every pixel.

void mainImage(out vec4 fragColor, in vec2 fragCoord){    vec3 n2_out = (floor(vec3(0.50196, 0.50196, 0.50196) * max(4.0 - 1.0, 1.0) + 0.5 + ((float((((ivec2(floor(mod(fragCoord / max(1.0, 1.0), 4.0))).x ^ ivec2(floor(mod(fragCoord / max(1.0, 1.0), 4.0))).y) & 1) << 3) | ((ivec2(floor(mod(fragCoord / max(1.0, 1.0), 4.0))).y & 1) << 2) | ((ivec2(floor(mod(fragCoord / max(1.0, 1.0), 4.0))).x ^ ivec2(floor(mod(fragCoord / max(1.0, 1.0), 4.0))).y) & 2) | ((ivec2(floor(mod(fragCoord / max(1.0, 1.0), 4.0))).y & 2) >> 1)) + 0.5) / 16.0 - 0.5)) / max(4.0 - 1.0, 1.0));    fragColor = vec4(n2_out, 1.0);}

In a graph

Texture coordinates into the node, and the node into the material, as Studio draws them.