Chapter 8 · Section 3
The Pulsecore and the Space Layer
The BPT law
BPT Part 3.6, in "The Pulsecore as a Bubble of Data", splits a universe's beginning into three: the Nullcore on the parent's side, the Bifold, "the one fold where one universe becomes two", and the Pulsecore, "the child's data held within the Bifold". The data within is radiation, Pulsecore Data Radiance P_∂ = u/3 with u = n·kB·T, every datum moving at 𝒞→; the Bifold Record Law, Φ∂ = n·𝒞→/4, makes the skin the record of what strikes it. The skin turns with the universe's spin by Bifold Drag, v_∂ = 𝒞→·a_f/(1 + √(1 − a_f²)), its equator moving as a Kerr horizon's does, "so the data within swirls with the spin and crowds toward the equator."
Every bit carries its null. The Null Nova Condition holds N∅ = N, so the null's density in the room the data has not taken is ρ∅ = N/(χ∂ − N), "rising from nothing toward one"; when N + N∅ = χ∂, at N₁ = χ∂/2, "the Pulsecore gives its null up as space." That is the first nova, Toroidal Genesis: "the null of the Pulsecore's bits expelled as space ... the toroidal substrate, empty of data." After it the Space Growth Law, S(n) = N(n) with χ∂/2 ≤ S(n) ≤ χ∂, grows space by one place for every new bit, "its area doubling" by the Data Nova. The Pulsecore, "the singularity that was the whole of it before the Data Nova", then stays the size of the hole (Part 3.10, Dilation). Part 3.6 also predicts the Data Loop: the data "circulates up through its throat, the Null Vacuum left by the Data Nova, and back round the outside". BPT Part 3.10 closes the story: "The space remains ... The game draws that space as one thin veil from the moment the Null Nova makes it, round the universe as it grows, and after it has gone."
The established physics
A Kerr black hole of spin a = J/(M·c) turns its horizon at Ω_H = a·c/(2·r₊) with r₊ = (G·M/c²)·(1 + √(1 − a²)) (Kerr 1963; Misner, Thorne & Wheeler 1973), so in units of c/(2GM/c²) the horizon's angular velocity is v = a/(1 + √(1 − a²)). This is skinSpeed(a_f) pinpoint.js:44. The smear of a fast-turning wheel against the wagon-wheel effect is ordinary motion blur. The torus's area 4π²·(H + r)·r is textbook geometry.
The game's math
The sphere and its data. Before the Null Nova the field canvas is drawn on a sphere of radius CORE = 0.444 (scene3d.js:85), its poles on the spin axis. The data within (pinpoint.js's gas) is drawn as points scaled to CORE·0.985 (setGasPoints() scene3d.js:405) with their last flip's paths as line segments (setGasPaths() scene3d.js:415). setCoreDensity(k, novas) scene3d.js:442 sizes and brightens them by the core's fill, k = N/χ_∂:
room = 0.5 before the Null Nova, 1 after (each bit's null takes the other half)
d = clamp(k / room, 0, 1.6) / 1.6
point size = 0.014 + 0.032·d; opacity = 0.45 + 0.55·d; path opacity = 0.25 + 0.45·d
setNullDensity(ρ) scene3d.js:1193 draws the null within as a dark haze, opacity 0.85·ρ for ρ = N/(χ_∂ − N), gone at the Null Nova.
The spin drawn. The true skin turn, π·v radians a flip, is 1.4 to 2.8 radians between drawn frames and would strobe backward, so the drawing runs on its own clock (render() scene3d.js:2063–2079):
v = a / (1 + √(1 − a²)), a = min(0.999, |a_f|)
drawnSpin += 1.5 · v · spinUp · drawnMs / 1000 (radians)
ringSpin += 4π · v · spinUp · drawnMs / 1000 (the ring of arrows, two turns a second at the fastest spin)
spinUp → target with rate drawnMs / 1500 (SPIN_IDLE = 0.12 of the rate before Start, 1 after)
and the data within is turned by drawnSpin − skinTurn so it keeps with the skin. blurSkin() scene3d.js:254 smears the skin's texture along its turn: K = |Δturn|·W/(2π) pixels swept since the last frame; when K ≥ 2 each row is run twice through an exponential trail with k = e^(−2/min(K, W)). The momentum arrow is CORE + 0.15 + 1.4·|a_f| long (setSpin() scene3d.js:236); the cue arrow 0.35 + 1.0·|a_f|.
The core at its true size. Once a torus stands round it, the core eases to the hole's size: coreK → min(1, HOLE/CORE) at rate drawnMs/1500 (scene3d.js:2086). At level 6 on a desktop that is 0.0135/0.444 = 0.030 of its lone size. While coreK < 0.6 a glow sprite marks it, max(0.22, 9·CORE·coreK) across, breathing by 12 % with a period of 2π·260 ms (scene3d.js:2098).
Space. setSpace(k) scene3d.js:1181 takes space as a share of the χ_∂ places the data will need (1/2 at the Null Nova, 1 at the Data Nova, from app.js:517). The hole stays the Pulsecore's size, so the tube grows: buildSpace(k) scene3d.js:1187 solves (H + r)·r = k·(H + T)·T for the tube radius,
r = (−H + √(H² + 4·k·(H + T)·T)) / 2
so the space torus's area is exactly k of the full torus's. It grows toward its target by gap·min(1, dtMs/600) a frame (scene3d.js:1929), starting from k = 0.05. It is drawn as a veil (scene3d.js:121–128): only its far wall, near black (alpha 0.75 at most, from 3.6·SPACE_OP), with a hairline brighter rim where it is seen edge-on (smoothstep 0.86–0.99 of the grazing angle), so the sky behind space goes dark and the universe in front keeps its light. After the Physical Nova the same veil stays at full size at 0.8·SPACE_OP as the shell the physical grows into, shown while the physical is under 0.97 of it (scene3d.js:1206, 2012).
The void and its residue. At the Data Nova the hole fills with 900 points read off the field's last picture (makeResidue() scene3d.js:1303), each drifting out at 0.004 a step until it reaches the hole's edge and leaves (stepResidue() scene3d.js:1329). At each harmonic sweepHalf() scene3d.js:1322 sends every other remaining point out fast (0.06 a step) and halves the void's haze: opacity 0.55/2^(layer − 1), so the hole clears by octaves. A vortex ring at half the hole's radius turns at twice the torus's angle.
The fountain. makeFountain() scene3d.js:1268 draws 600 points circulating through the hole: in from the bottom rim (the first fifth of the loop), up the throat (the next three fifths), out over the top rim (the last fifth), at a pace clamp(4·flow.rate/rows, 0.004, 0.08) of a loop a step, twisted by the spin, each recolored from the skin's middle row when it completes a loop.
In the game
Before Start the player sees the Pulsecore alone: a sphere carrying the painted field, a gold spin arrow and a cyan axis arrow standing on it, and a ring of three arrowheads turning round it at the spin's horizon rate. The readout's epoch line reads "Pulsecore · paint the information" (app.js:1972), "Bits:" counts the painted pixels as … in the Pulsecore, and the "Spin:" line shows a_f · C. The core turns slowly, at 0.12 of its rate, until Start. The arrows are the cue of Part 8.10; "Show spin and axis" (index.php:193) hides them, and the "Spin a₁", "Spin a₂", "Genesis axis on screen" and "Axis tilt" controls set the same spin from the panel.
After Start the epoch line reads "Pulsecore · filling toward its Null Nova". The points of the data within grow larger and brighter as the core fills, the last flip's paths drawn as faint lines, the swirl of Bifold Drag visible as the data turns with the skin; a dark haze, the null, thickens with them. The "Tempos:" line reads data within … of the skin's … bits and "Capacity:" the share filled (app.js:2124–2126). At the Null Nova the haze is gone, and the banner reads "Null Nova · space is born", over "Harmonic 1 · Toroidal Genesis", with "the null of … bits leaves the Pulsecore as … places of empty space: the torus stands round it, empty" (app.js:5240–5246, a violet hue, 265). A dark violet-rimmed veil stands up round the sphere and the backdrop stars behind it go dark: that is space, empty. The epoch line now reads "Pulsecore · filling toward its Data Nova", and the veil grows step by step, one place for every new bit (app.js:517), until it is whole at the Data Nova.
At the Data Nova the sphere eases down to the size of the hole, marked by a small breathing glow, and the hole fills with residue drifting out to its rim; a vortex ring turns in it, and a fountain of points runs up through the throat and over the rims, the Data Loop drawn. At each later harmonic half the remaining residue sweeps out and the hole's haze halves, so the throat clears by octaves into the Null Vacuum. After the Physical Nova the veil stays as the shell the physical grows into, and when the full decay is over it is all that is left on screen.
The scale model
The Pulsecore is drawn at 0.444 alone and at the hole's true share of the field once the torus stands round it; the theory's Pulsecore is Planck size, so neither is to scale. The gas points are pinpoint.js's sample of the data within (Chapter 2 sets their count); the space torus is exact in area against the full torus. The residue (900) and the fountain (600) are pictures of a flow, not samples of it: each point stands for no fixed share.
Fixed numbers
| Number | Where | What it is | Kind |
|---|---|---|---|
| 0.999 | scene3d.js:2065 | spin clamp before √(1 − a²) | METHOD (avoids the extremal horizon's singular limit) |
| a/(1 + √(1 − a²)) | scene3d.js:2065 | the horizon's angular velocity | PHYSICS (Kerr 1963) |
| 1.5, 4π (radians a second per v) | scene3d.js:2071, 2077 | drawn turn of the core and of the arrow ring | DISPLAY |
| 0.12 (SPIN_IDLE), 1500 ms | scene3d.js:32, 2070 | the core's turn before Start; ease to full rate | DISPLAY |
| 2 px, e^(−2/K), two passes | blurSkin() scene3d.js:257, 266 |
motion blur threshold and trail | METHOD (motion blur against the wagon-wheel effect) |
| 0.5 (room before the Null Nova) | scene3d.js:443 | each bit carries its null | BPT (Part 3.6) |
| 1.6; 0.014, 0.032; 0.45, 0.55; 0.25, 0.45 | scene3d.js:443–446 | gas point size and brightness by fill | DISPLAY |
| 0.985, 0.97, 0.995 | scene3d.js:113, 119, 144 | gas, haze and void just inside their spheres | DISPLAY |
| 0.85 (haze opacity), 0.002 | scene3d.js:1196 | the null haze | DISPLAY |
| 0.15, 1.4, 0.35, 1.0, arrow heads | scene3d.js:243, 1583 | arrow lengths by spin | DISPLAY |
| 3 arrowheads; 0.06; 0.008; 0.7 | scene3d.js:100–106 | the spin ring | DISPLAY |
| min(1, HOLE/CORE), 1500 ms | scene3d.js:2086 | the core eases to the hole's size | BPT (the Pulsecore is the hole, Part 3.10 Dilation) |
| 0.6, 0.22, 9, 0.12, 260 ms, gradient stops | scene3d.js:2091–2098 | the core's glow | DISPLAY |
| 0.05 (space seed) | scene3d.js:1183 | space's first visible share at the Null Nova | METHOD (a torus of zero tube cannot be drawn) |
| (−H + √(H² + 4k(H + T)T))/2 | buildSpace() scene3d.js:1189 |
tube for an area share k | PHYSICS (torus area 4π²(H + r)r) |
| 600 ms, 100 ms | scene3d.js:1929 | space's growth easing | DISPLAY |
| 0.2 (SPACE_OP), 0.09, veil shader numbers (0.86, 0.99, 3.6, 0.75, 0.9, 0.16, 0.22, 0.32, 5.0, light direction), 0x8a7ad8 | scene3d.js:120–128 | the veil's look | DISPLAY |
| 0.8·SPACE_OP, 0.97 | scene3d.js:1206, 2012 | the shell after the Physical Nova | DISPLAY |
| 2500 ms | scene3d.js:1932 | space's glow at birth (held at 0 since 2026-10-29) | DISPLAY |
| 900 | makeResidue() scene3d.js:1305 |
residue points in the hole | CAP |
| 0.004, 0.06, 0.03, 0.9, 1e4 | scene3d.js:1316, 1326, 1335 | residue drift, sweep speed, start radius, parking place | DISPLAY |
| 0.55/2^(layer − 1); every other point | sweepHalf() scene3d.js:1323–1326 |
half of what remains goes at each harmonic | BPT (Part 3.6, Data Harmonics) |
| 600 | makeFountain() scene3d.js:1270 |
fountain points | CAP |
| 0.004, 0.08, ×4, ×6, 0.2/0.8, 0.9, 1.04, 0.08 + 0.55√ | placeFountain() scene3d.js:1286–1300 |
fountain pace, twist, loop shares, height, spill, radii | DISPLAY |
| 40, (0.85, 0.7, 1) | sampleThroat() scene3d.js:1283 |
dark-pixel fallback color | DISPLAY |
| HOLE·0.5, 0.02, 0.15, 0.55, colors | scene3d.js:144–148, 219 | the vortex ring and the void | DISPLAY |