nervous_system_hansmeyer · RadiolarianLattice
Radiolarian Lattice
Nervous System's Radiolaria series translates Ernst Haeckel's 19th-century radiolarian drawings into 3D-printed sculpture. The mathematical heart is a spherical lattice: an icosahedron is recursively subdivided (each face into four triangles), and every new vertex is perturbed along its radial axis by a small random offset, producing a perforated shell whose topology stays regular but whose surface ruffles like a sea creature's silica skeleton. We collapse the 3D body to a 2D orthographic projection with a viewer rotation, then stroke the resulting edges as a wireframe. Color encodes depth — pixels nearer the camera pick up a warm glow accent, far edges fade toward the cool edge color — so the result reads as a translucent geodesic sphere even on a flat substrate.
Original: https://n-e-r-v-o-u-s.com/blog/?p=4601
▶ Try the live demo (JS port) ▶ Run reference.py via Pyodide 10 formulas have instant JS ports. The Pyodide path runs the actual Python in your browser — first load is ~6 MB, then instant.
Math essence
Start with the 12 unit-sphere vertices of a regular icosahedron and its 20 triangular faces. At each subdivision step, every face (a, b, c) is replaced by four triangles using its three edge midpoints (ab, bc, ca) projected back to the unit sphere, growing the vertex count from 12 → 42 → 162 → 642 for k=1,2,3 subdivisions. After subdivision each vertex is displaced along its outward normal: v' = v * (1 + sigma * N(0,1)) + offset_tangent, where the tangent component breaks spherical symmetry so the lattice warps irregularly. Faces are rotated about X and Y axes and orthographically projected to 2D. depth_mix = (z - z_min) / (z_max - z_min) controls per-edge color: foreground edges glow warm, background edges fade to the cool palette color.
Parameters
| Name | Type | Default | Range | Description |
|---|---|---|---|---|
dim | int | 600 | 200–1400 | Square canvas side length |
subdivisions | int | 3 | 1–5 | Number of icosahedron subdivisions (each multiplies vertex count by ~4) |
radial_displacement | float | 0.18 | 0–0.6 | Per-vertex radial perturbation magnitude |
displacement_decay | float | 0.72 | 0.2–1 | Reserved per-subdivision scaling factor |
projection_axis | str | z | null–null | Orthographic projection axis (x|y|z) |
radius | float | 0.42 | 0.15–0.5 | Sphere radius as fraction of dim |
edge_color | tuple | 200,230,255 | null–null | Edge RGB |
glow_color | tuple | 255,180,110 | null–null | Foreground accent RGB |
bg_color | tuple | 8,10,18 | null–null | Background RGB |
edge_thickness | int | 1 | 1–3 | Edge stroke thickness |
depth_fade | float | 0.55 | 0–1 | Depth-mix modulation (0=flat color, 1=high contrast) |
rotation_x | float | 0.35 | -3.1416–3.1416 | View rotation about X axis (radians) |
rotation_y | float | 0.55 | -3.1416–3.1416 | View rotation about Y axis (radians) |
seed | int | null | 0–999999 | RNG seed |
Reference
First 60 lines of reference.py. Full source:
library_external/nervous_system_hansmeyer/RadiolarianLattice/reference.py
from __future__ import annotations
from typing import ClassVar
import imageio.v2 as imageio
import numpy as np
def _icosahedron() -> tuple[np.ndarray, np.ndarray]:
phi = (1.0 + 5.0 ** 0.5) / 2.0
verts = np.array(
[
[-1.0, phi, 0.0],
[1.0, phi, 0.0],
[-1.0, -phi, 0.0],
[1.0, -phi, 0.0],
[0.0, -1.0, phi],
[0.0, 1.0, phi],
[0.0, -1.0, -phi],
[0.0, 1.0, -phi],
[phi, 0.0, -1.0],
[phi, 0.0, 1.0],
[-phi, 0.0, -1.0],
[-phi, 0.0, 1.0],
],
dtype=np.float64,
)
verts /= np.linalg.norm(verts, axis=1, keepdims=True)
faces = np.array(
[
[0, 11, 5],
[0, 5, 1],
[0, 1, 7],
[0, 7, 10],
[0, 10, 11],
[1, 5, 9],
[5, 11, 4],
[11, 10, 2],
[10, 7, 6],
[7, 1, 8],
[3, 9, 4],
[3, 4, 2],
[3, 2, 6],
[3, 6, 8],
[3, 8, 9],
[4, 9, 5],
[2, 4, 11],
[6, 2, 10],
[8, 6, 7],
[9, 8, 1],
],
dtype=np.int64,
)
return verts, faces
class RadiolarianLattice:
family: ClassVar[str] = "nervous_system_hansmeyer"
sketch: ClassVar[str] = "RadiolarianLattice"
Try running it locally
The reference implementation is self-contained Python with numpy. Install the package and run:
python library_external/nervous_system_hansmeyer/RadiolarianLattice/reference.py Need help? See Learn for the standard environment setup, or Playground for an in-browser sketchbook.
More from nervous system × hansmeyer
Floraform Growth
nervous_system_hansmeyer · FloraformGrowth
A 2D port of Nervous System's Floraform generative jewelry system.
Hyphae Network
nervous_system_hansmeyer · HyphaeNetwork
A 2D port of Nervous System's Hyphae generative jewelry.
Subdivided Columns
nervous_system_hansmeyer · HansmeyerSubdivision
Michael Hansmeyer's 2014 'Subdivided Columns' is a computational-design exercise in baroque complexity from algorithmic simplicity: start with a regular polygon, subdivide each edge, perturb each new vertex by a small random offset, repeat.
Voxel Field Cross-Section
nervous_system_hansmeyer · DillenburgerVoxelField
Benjamin Dillenburger's voxel-printing research (Digital Building Technologies, ETH Zurich, ~2016) replaced the smooth isosurface extraction of conventional architectural geometry with a literal 3D voxel grid: every cell is either solid or empty, and the boundary of the field is what gets fabricated.