PulseCore

Chapter 8 · Section 2

The Lattice of the Level

The BPT law

BPT Part 3.6 (Data Novas and Dimensional Evolution) names the second nova Dimensional Genesis: "the Data Nova (the Dimensional Nova), marks the first true expansion of data beyond containment: the Pulsecore's data pours out onto the space the Null Nova made and lays its lattice over it, generating new independent geometric axes. Space stood empty before; here it is first measured, its dimensionality the lattice of the data that fills it." The size of that lattice is set by the Bifold Containment Law: the skin's holographic capacity is χ_∂ = A/(4·ln 2·ℓp²)·ℨᵇ, and the Data Nova comes when the data within fills it, N ≥ χ∂. Since χ∂ = (4·2^L)² is a perfect square, the data meets it exactly at n₂ = ⌈√χ∂ − 1⌉ = 4·2^L − 1 Tempos, and the lattice it lays is 4·2^L cells a side, 16·4^L in all. At level 0 that is BPT Part 8.8's minimal closed torus, four cells round each loop.

The same Part numbers the layers by Data Harmonics: Harmonic 1 the empty torus (Toroidal Genesis), Harmonic 2 the data lattice (Dimensional Genesis), Harmonic 3 the physical (Temporal Genesis), Harmonic 4 spacetime (Spacetime Genesis), and after saturation Harmonic Novas that "no longer create dimensional axes" but are "custodians of harmony, refining resonance and stabilizing the scaffold". Counted from the Physical Nova, Harmonic h arrives at t_h = (1 − 3/h)·2^L Tempos, and the Layer Count Law, h⥣(L) = 3·2^L, gives how many a universe reaches before its final well. BPT Part 3.11 adds what the lattice is for: the ripples the physical grows from "are the unevenness of that data on the lattice, densest along its lines and densest of all at its nodes. So the web that grows from them is laid out by the scaffold: its filaments follow the lattice's lines and its clusters gather at the lattice's nodes." BPT Part 4.7 (The Harmonic Fold and Universal Lattice) reads the same lattice as a Toroidal Lattice (G) of repeating nodal patterns.

The established physics

None: a game method. Showing a grid finer than the screen as a uniform sheet is ordinary sampling: lines closer than a few pixels cannot be told apart.

The game's math

The level's lattice. setLatticeLevel(L) scene3d.js:1223:

N       = 4 · 2^L                                 (lines a side, the Bifold Containment Law)
px      = max(320, min(canvas width, canvas height))
fit     = round(π · 0.8 · px / 8)                 (the tube's round on screen, about π·0.8 of the view, one line every 8 px)
latDraw = max(4, min(fit, N))
latFine = clamp(log₂(N / latDraw) / 12, 0, 1)

On a desktop with an 800 px tall view, fit = round(2.513·800/8) = 251; at level 6, N = 256, so latDraw = 251 and latFine = 0.002. On a phone 390 px wide, fit = 123; at level 4, N = 64 is drawn in full. At level 28, N = 1.07 × 10⁹ and latFine = 1: the lattice reads as a sheet. latFine reaches 1 once N ≥ 4,096·latDraw, near level 18 on a desktop.

latticeGeometry(scale, reach) scene3d.js:1229 lays latDraw circles round the ring and latDraw round the tube, 0.985 of the tube's radius (just under the skin), each circle in 64 or 128 segments, and only as far round the tube from the hole (v = π) as reach allows. drawMask(fill, space, reach, outside) scene3d.js:1347 paints the same latDraw lines into a 1024 × 512 grey mask that becomes the skin's alpha map before the physical layer: the data shows along the lines, a fill of 0.72 between them, and lines too fine to draw raise the fill by 0.6·latFine. The line width is max(1, round(0.16·1024/latDraw)) mask pixels.

The lattice actually drawn. From the Data Nova on, render() scene3d.js:2113–2121 calls radiatingLattice(phase, reach) scene3d.js:1109 at most every 50 ms. That function rebuilds the lattice's geometry whenever it was not already radiating, with fixed counts: NU = 24 lines round the tube, each in 64 segments, and 2·RINGS = 12 rings round the ring, each in 128 segments. The rings ride outward with the lattice's phase (v = π − 2π·((j/12 + phase) mod 1)); the lines wind round the ring by the data's pitch summed over the rows they cross from the throat (the twist table, from flow.js's shear). So setLayer(2) lays the level's latDraw lattice, and on the next drawn frame the radiating 24 and 12 take its place. The level's lattice stays in the mask and in latFine, which dims each drawn line by (1 − 0.5·latFine) (scene3d.js:1963).

The scaffold weight. scaffoldWeight(rows, cols) scene3d.js:1150 is BPT Part 3.11's scaffold in numbers: for every field cell, how strongly the drawn lattice runs through it. Each of the 24 lines and 12 rings is a Gaussian e^(−d²/2) a cell wide, summed over ±3 cells, so a line scores about 1 and a node about 2. app.js reads it to lay the Data Nova's data (app.js:1111) and the first matter (app.js:1219), so the data is densest along the lines and densest of all at the nodes, as the theory says.

The layers. setLayer(n) scene3d.js:1243: at n = 2 the lattice is laid at once at opacity 0.95; at n = 3 the physical starts (physT); from n = 4 each Harmonic Nova adds a thin ring just outside the space layer, at radius R + TUBE·scale·(1 + 0.05·min(n − 4, 12)) + 0.008, hue (37·(n − 4)) mod 360, keeping the newest 24. Their opacity breathes as 0.45 + 0.3·sin(0.12·(frame − born)) (scene3d.js:2140). applySkin() scene3d.js:1370 sets the skin's glow and the lattice's target opacity by layer: 0.85 with the data alone; 0.5 at the physical with stars, 0.1 from the fourth harmonic; the lattice 0.55, or 0.12 behind the stars. The lattice's opacity glides 5 % of the way to its target each frame.

In the game

The lattice appears at the Data Nova, Harmonic 2. Teal-cyan lines (0x35e8e0) run round the tube and rings ride outward from the throat, growing out of the hole over 10 steps and fading in over 6, while the skin shows the data brightest along them. The rings keep moving outward and the lines wind with the data's flow, so the lattice is seen streaming, the scaffold the data is laid on. The banner of this nova says what it is: "Data Nova · the data erupts", over "Harmonic 2 · Dimensional Genesis", with "every bit the Pulsecore held bursts onto the lattice at pulse speed · not yet matter: the scaffold of space" (app.js:5240–5246). The "Layer:" readout reads 2 of … · Harmonic 2 · Dimensional Genesis (updateLayerHud() app.js:2113), out of the Layer Count Law's 3·2^L.

When matter comes at the Physical Nova the lattice dims behind the stars, and the clusters and filaments that grow are seen to lie along its lines and gather at its nodes, the BPT Part 3.11 web. From Harmonic 4 on, each Harmonic Nova adds one thin colored ring just outside the veil of space, each a hue 37° on from the last, all breathing slowly; they are the layers of coherence BPT calls custodians of harmony, laid outside rather than adding a direction. The "Grid lines" checkbox, "The lattice in 3D, the cell grid in 2D" (index.php:225), shows or hides the lattice (setShowLattice() scene3d.js:362).

The scale model

At a level whose lattice has fewer lines than the screen can part, the mask shows every line. Past that each mask line stands for N/latDraw of the level's lines, and latFine turns the finest lattices into an even sheet. The drawn cyan lines stand for none of them in particular: always 24 and 12, at level 1 and at level 202 (2 × 10⁶¹ lines a side).

Where the game and the theory differ

  • BPT Part 3.6 lays a lattice of 4·2^L lines a side at the Data Nova. The game computes that count (setLatticeLevel()) and keeps it in the mask, but the lines drawn from the Data Nova on are a fixed 24 round the tube and 12 rings at every level.
  • BPT Part 3.11 lays the web out by the level's scaffold. scaffoldWeight() builds the scaffold from the same fixed 24 lines and 12 rings, so where the data and the first matter are laid is the same pattern at every level, set by a drawing count.
  • BPT's Layer Count Law gives 3·2^L harmonic layers. The game steps each new harmonic ring outward only up to the 16th, min(n − 4, 12), and keeps the newest 24 rings.

Fixed numbers

Number Where What it is Kind
4·2^L scene3d.js:1224 lines a side BPT (Part 3.6, Bifold Containment Law)
320 (px floor), 800 (fallback) scene3d.js:1225 the smallest view the fit assumes CAP
π·0.8 scene3d.js:1225 the tube's round as a share of the view DISPLAY
8 px scene3d.js:1225 one line every 8 px DISPLAY
4 (latDraw floor) scene3d.js:1226 at least the level-0 lattice BPT (4·2⁰)
12 (in log₂/12) scene3d.js:1226 octaves until the lattice is a sheet DISPLAY
0.985 scene3d.js:1110, 1230 the lattice just under the skin DISPLAY
64, 128 scene3d.js:1111, 1233 segments per line and per ring METHOD (tessellation)
1024 × 512 scene3d.js:166 the mask's resolution CAP
0.72, 0.7, 0.6, 0.16 drawMask(), applySkin() fill between lines, sheet gain, line width share DISPLAY
NU = 24, RINGS = 6 (12 rings) radiatingLattice() scene3d.js:1111 the drawn lattice's lines and rings, at every level CAP
50 ms scene3d.js:2117 rebuild interval of the radiating lattice METHOD (frame budget)
NU = 24, NR = 12 scaffoldWeight() scene3d.js:1151 lines and rings that seed the data and the matter CAP
±3 cells, e^(−d²/2) scene3d.js:1161, 1166 each line a Gaussian a cell wide METHOD (smoothing width)
0.95, 0.55, 0.12, 0.85, 0.5, 0.1 setLayer(), applySkin() lattice and skin brightness by layer DISPLAY
0.05 (glide) scene3d.js:1963, 1964 easing of lattice and skin brightness DISPLAY
0.05·min(n − 4, 12) scene3d.js:1255 each harmonic ring's step outward, stopping at the 16th CAP
24 scene3d.js:1257 harmonic rings kept CAP
0.008, 0.006, 6 × 160, 37°, 0.85, 0.65, 0.75 scene3d.js:1255 harmonic rings' gap, width, segments, hue step, color, opacity DISPLAY
0.45, 0.3, 0.12 scene3d.js:2140 harmonic rings' breathing DISPLAY
6 steps, 10 steps scene3d.js:2124, 2115 lattice fade-in and reach growth DISPLAY