Gen 0 Epoch - Species alive 0 Agents 0 Extinct 0 Environmental shock FPS 0
Panorama Biome Map Tree
A collage of deep time, not a timeline: the big figures are scenery, the small animals are the simulated populations (each dot of life is a real agent with six heritable traits). Glowing bubbles are branch points of the family tree. Evolution has no goal: lineages adapt, split and disappear.
WebGL is not available here — the population lab on the right still works.
Deep Time: Selection, Mutation and the Tree of Life
Four habitats, hundreds of agents with heritable traits. Change the climate, build a barrier, trigger a crisis and watch populations adapt, split into species or vanish — and the family tree grows.
Pause Step Reset Shock (K × 0.25) Quality: High
Time and environment
Genetics and isolation
Live readouts
Population by lineage
Trait distribution
Family tree (click a node)
Click a lineage to see where and when it split.
Drift demo
Same neutral allele (p = 0.3, no selection) in a small and a large population, 100 generations, 8 replicates each.
Run drift demo
Missions
Independent numerical checks
Also run outside the browser: node src/check.js (same engine, larger samples).
Educational model with invented trait optima and epoch labels. Not a reconstruction of real lineages; the large animals in the scene are a collage of different ages, not one moment in time, and the sequence of epochs does not imply progress toward any goal. No human-evolution ladder is shown: a hominin appears as one primate-like form among others.
Controls Drag / one finger: orbit; wheel / pinch: zoom; buttons jump to preset cameras (keys 1-4). Space pause, S one generation. Speed = generations per second.Scenarios set climate, isolation and mutation together; every slider can be changed afterwards. Only a sample of the agents is drawn (up to 100 per habitat, 40 on Low); the numbers in the panel count every agent. Large static animals are scenery; small animals are simulated agents; tint = species, brightness = coat-colour trait, size = size trait.
The science
Genotype and phenotype. Each agent carries six heritable values in [0,1]: size, speed, coat lightness, metabolism (insulation), limb length and fertility. In this model the phenotype equals the genotype (no environmental noise), so the narrow-sense heritability is h² = 1.
Selection. Each habitat patch has an optimum z* (colder → larger body and more insulation; scarce food → faster, longer limbs; coat matches the background). Fitness w = exp(−meank (zk − z*k )² / 2sk ²). Parents are drawn in proportion to w·(0.5+fertility). The breeder's equation R = h²S predicts the change in the mean; the page checks it.
Population size. Per patch and species N' = N + rN(1 − (N + αNother )/K) (logistic with Lotka–Volterra competition). With α = 0 each species reaches its own K; with α close to 1 one species can exclude the other.
Mutation and drift. Each gene mutates with probability μ by a Gaussian step σm . In small populations allele frequencies wander by sampling alone (Var ≈ p(1−p)t / 2N); the drift demo shows the 2000-fold difference in effect.
Speciation and extinction. Each habitat has three sub-patches. A barrier keeps mating inside a patch; when the mean genomes of patches differ by more than dcrit (Euclidean distance, model value) the lineage splits and the tree gets a node. Crossing two lineages further apart than dcrit fails (reproductive isolation). A lineage with no agents left is extinct; the shock button drops carrying capacity to 25% for 30 generations.
Honest simplifications. No sex, age or ploidy (genes are copied from either parent), no epigenetics, no real genomes or fossils; epochs only choose which body plans are drawn and shift the climate; the tree records model lineages, not real species. Sources (by type): population-genetics and evolutionary-biology textbooks, phylogenetics references.
Models built with Blender (terrain, organisms, trees, coral) and rendered with Three.js.