Terraforming Data: Rendering Kinetic Topography in py5
2026/7/24
“Kinetic Topographic Fingerprint 2D” is a generative media art piece that transforms the clinical aesthetics of cartography into a living, breathing digital organism. The artwork presents a dense, glowing contour map that undulates and shifts continuously, resembling both the precise elevation lines of a mountain range and the intricate, organic ridges of a human fingerprint. Built entirely in Python using the py5 library, the simulation leverages OpenSimplex noise to terraform a mathematical landscape in real-time, resulting in a hypnotic study of continuous algorithmic motion.
The visual language of “Kinetic Topographic Fingerprint 2D” is rooted in data visualization, but elevated through a cinematic, cyberpunk-inspired color palette. The composition is built on a deep, brooding teal background that implies the immense pressure of the deep sea or the emptiness of an unmapped digital void.
Floating against this darkness are 180 tightly packed, concentric contour lines. Instead of remaining as perfect circles, these lines are heavily warped by an invisible, drifting force field. Because the drawing context utilizes additive blending (py5.blend_mode(py5.ADD)), the lines burn with intense brightness where the invisible “terrain” forces them to compress and overlap tightly. The colors smoothly cycle through cool, bioluminescent spectrums — from seafoam greens to electric cyans — giving the map an organic, almost vascular appearance. As the invisible noise field slowly drifts over the composition, the valleys open up and the ridges collapse, ensuring the “fingerprint” is constantly rewriting its own identity.
Code & Technical Breakdown
To generate organic, smooth topographic lines, the code avoids complex 3D heightmaps or marching cubes algorithms. Instead, it relies on a simpler, highly efficient 2D approach: generating perfect concentric circles and then violently displacing their vertices.
# From draw()
num_rings = 180
points_per_ring = 360
# We will draw distorted concentric rings
for r in range(1, num_rings):
base_radius = r * 15
# Color gradient across the rings
hue = (160 + r * 0.2 + py5.frame_count * 0.5) % 360
py5.stroke(hue, 90, 80, 60)
py5.stroke_weight(2.5)Why this works: The setup is geometrically simple. A massive loop runs 180 times, calculating the base_radius for each expanding ring. By tying the hue to both the ring index (r) and time (py5.frame_count), the code ensures a seamless, iridescent color gradient that flows continuously from the center of the canvas out to the edges. Setting the stroke weight to 2.5 with a low opacity (60) prepares the lines for additive blending; single lines will appear dim and ghost-like, but clusters of lines will stack their alpha values to create blinding highlights.
The core of the terraforming effect lies in the inner loop, where the vertices of each circle are calculated and then subsequently destroyed by the noise field.
# From draw()
py5.begin_shape()
for angle_deg in range(0, points_per_ring + 1):
angle = py5.radians(angle_deg % 360)
x_base = base_radius * np.cos(angle)
y_base = base_radius * np.sin(angle)
# Domain warping the vertices
noise_scale = 0.0015
dx = py5.os_noise(x_base * noise_scale, y_base * noise_scale, t) * 600
dy = py5.os_noise((x_base + 500) * noise_scale, (y_base + 500) * noise_scale, t) * 600
py5.vertex(x_base + dx, y_base + dy)
py5.end_shape(py5.CLOSE)Why this works: For each of the 360 degrees in the ring, the code calculates the perfect circular coordinates (x_base, y_base). It then feeds those exact coordinates into py5.os_noise() (OpenSimplex noise) to calculate a displacement value (dx, dy). This technique is known as domain warping. Because OpenSimplex noise is continuous and smooth, neighboring vertices on the same ring will receive similar displacement values, ensuring the curve never breaks or becomes jagged.
Crucially, the code passes the time variable t into the noise function as the Z-axis parameter. This means the 2D noise field is essentially a 3D volume of noise that the canvas is slowly slicing through over time. The multiplier * 600 is incredibly high, which is what tears the rings away from their circular origins and forces them into the extreme, chaotic folds that perfectly mimic geographical topology.

Conclusion
“Kinetic Topographic Fingerprint 2D” elegantly demonstrates how raw mathematical noise can be utilized to breathe life into rigid geometry. By systematically distorting concentric circles through a slowly drifting volume of OpenSimplex noise, the simulation generates a topographical map that feels simultaneously precise and wild. Through Python and py5, the artwork transforms basic trigonometry into a mesmerizing, terraforming landscape, reminding us that in creative coding, the most beautiful structures often emerge from the deliberate introduction of chaos.