Motion
Get Motion

ReferenceMaterial nodesUV

Droste

The picture inside itself for ever, spiralling: give it centred coordinates.

UVdroste

Inputs

PinTypeStarts atNotes
UVpvec20–
Zoomzoomfloat4–
Twisttwistfloat0.2–

Outputs

PinType
outvec2

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){    vec2 n1_uv = (vec2(fragCoord.x / iResolution.x, 1.0 - fragCoord.y / iResolution.y) * vec2(1.0, 1.0));    vec2 n1_centred = (vec2(fragCoord.x - 0.5 * iResolution.x, 0.5 * iResolution.y - fragCoord.y) / iResolution.y);    vec2 n1_square = (vec2(fragCoord.x, iResolution.y - fragCoord.y) / iResolution.y);    vec2 n2_out = (exp(vec2(mod(vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).x + vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).y * 0.2, log(max(4.0, 1.01))), vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).y).x - log(max(4.0, 1.01))) * 0.5 * vec2(cos(vec2(mod(vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).x + vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).y * 0.2, log(max(4.0, 1.01))), vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).y).y), sin(vec2(mod(vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).x + vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).y * 0.2, log(max(4.0, 1.01))), vec2(log(length(n1_uv) + 1e-4), atan((n1_uv).y, (n1_uv).x)).y).y)));    fragColor = vec4(vec3(n2_out, 0.0), 1.0);}

In a graph

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