S2 — The lab · seventeen live instruments

2D kernel3D kernelAll live

The lab

Every figure below runs a real solver — nothing here is a video. Project I's benches run the same kernels, tests and stops as the hardware; Project II's benches run its structure engine, ported line-for-line from the research code, at four scales — one band, a row, a ring, a room.

Project I — Reincarnation machine

Lab.01–05 · two linkage kernels

Lab.01

Four-bar linkage

The 2D testbench behind Fig. 01 — position-based dynamics with a Gauss–Seidel pass, driven from the crank.

Kernel2D PBD · Gauss–Seidel
Tests36 green
RenderSVG · live coupler trace
DriveAny free node · release damping
Lab.01 / Fig. 01
Grashof 曲柄摇杆
2D PBD · Gauss–Seidel · L 66·178·127 · 板 132·100
θ 0.0°
ω 0.00 · err 0.000 · idle
拖任意自由节点 · 松手继承角速度

Lab.02

Arch ring solver

The physical S4 ring — angulated plates on a crank-slider, run as a preset of the untouched 2D kernel.

KernelSame 2D core — untouched
InstanceS4 M3×1.000 · 14 plates
StopsDual-end slot clamp · fixed step
DriveApex / feet / crank pin
Lab.02 / Fig. 12
S4 环 · M3×1.000
同一 2D 内核 · 14 板 · 槽端止程 · 定步 1/120
φ 0.0°
apex 0.0 mm · err 0.00 · idle
拖拱顶 · 四脚 · 曲柄销

Lab.03

Tendon tentacle

Seven box vertebrae on three tendons at 120° — the independent 3D kernel, rendered from the real scanned mesh.

KernelLinkageSolver3D · symmetric GS
Mesh107k tri · real scan
CameraTrackball · wheel zoom · RMB pan
DriveTendon sliders · critical damping
Lab.03
立体肌腱触手
7 方盒椎节 · 3 腱 @120° · 真实扫描网格 10.7 万三角
T 0 / 0 / 0 %
err 0.00 px · ×1.00
拖拽旋转 · 右键平移 · 滚轮缩放
肌腱
联动

Lab.04

Five-ring shell

Five ring instances breathing in phase — 85 mm pitch, foot slots auto-calibrated per ring.

FamilyS1–S5 · ladder 0 / 2 / 4 / 8
ChoreoIn-phase · ω 0.8 · step 1/120 s
Peaks0.24–0.42 mm
DriveBreathe · phase · skin · views
Lab.04 / Fig. 13
S1–S5 伏丘壳体
85 mm 等距 · 同相呼吸 · 槽端逐环标定 [0/2/4/8]
φ 0.0°
apex(S2) 0.0 mm · err 0.00 · 自转
拖拽旋转 · 右键平移 · 滚轮缩放
遮罩
相位
视角

Lab.05

Full assembly

The whole machine on one motor — one shaft swings 180° back and forth, five cranks of different radii open and close the rings, and the big arm curls on its three tendons.

BodiesReal solids · adjustable skin
DriveOne shaft · five cranks · in phase
Stroke180° reciprocating · apex ≡ 2R
ArmThree tendons · same solver as Lab.03
CaveatsSpeed not to scale · small arms static
Lab.05 / Fig. 14
整机传动
一轴五曲柄 · 同相 · 180° 往复张合
φ 0.0°
apex(S3) 0.0 mm · err 0.00 · 折叠 ↓
视角由下方按钮切换 · 点一下小触手试试
转速
相位
蒙皮
部件
肌腱
小触手摆幅频率
单环
视角

Project II — Spatial simulation

Lab.06–12 · skin-unit engine · four scales

One band

Lab.06–08 · what a unit is

Lab.06

Contractile skin units

Project II's structure system — a ceiling-hung strip contracts, surplus fabric gathers, and a pre-embedded bond map decides what it becomes: pocket, bulb, ledge or stairs.

KernelPosition-based · Verlet + projection
Port1:1 from research code · parity ≤ 1e-9
BondsZipper lock · permanent — hysteresis
RootsHug the shaft · solid-core wall (author rev.)
DriveOne contraction ℓ · four bond maps
RenderSVG · smoothing is draw-only
Lab.06 / Project II
收缩张紧外皮单元
软皮 · 键生成刚度 · 四键谱同一收缩协议
r 0.95
step 0/1500 · 键 0 · 收缩中
芯收缩 → 皮富余 → 键扣合 · 键锁定永久(滞回)
速度

Lab.07

Skin units, solid

The same four bond maps, extruded into fabric bands with real thickness — the section cut shows the skin as material, and the whole catalog turns in space.

KernelSame 2D engine as Lab.06 · one protocol
SolidExtruded band · fabric thickness 5
CameraOrbit + presets — shared 3D rig
BondsZipper rungs on both section cuts
RenderWebGL z-buffer · bake per frame
Lab.07 / Project II
皮肤单元 · 立体带
剖面挤出 · 织物厚度 5px · 同一收缩协议
r 0.95
step 0/1500 · 键 0 · 收缩中
拖拽旋转 · 右键平移 · 滚轮缩放
速度
视角

Lab.08

Two structures, one band

One strip, two bond maps — a five-segment spectrum folds an upper and a lower structure out of a single contraction. The glued run between them is pinned to the mast every pass, so the two zippers never feel each other: drop one map and the other folds identically. Four same-form pairs plus one mixed band; set how far apart they sit.

BandFive segments: glue · free A · glue · free B · glue
EngineSame 2D kernel — the spec was always a list
DecoupleGap ≥ 29 nodes ⇒ bit-identical; ≥ 16 ⇒ < 1 px
DriveOne contraction ℓ — both structures share it
PairsSame-form × 4 + bulb over ledge
Gap16 / 29 / 48 nodes · live switch
Lab.08 / Project II
双结构带 · 一条带两个结构
5 条带 · 每条两个键谱、两条拉链各自独立 · 同一收缩协议
r 0.95
step 0/1500 · 键 0 · 收缩中
四种同形对 + 一条混排 · 间距三档 · 拖拽旋转
间距
速度
视角

A row

Lab.09 · transitions along a line

Lab.09

Series

Two transition series on one line, every band a real unit. The graded catalogue walks twelve narrow slices from bulb flange to stepped box — each bond map shifts a little, and the transition grows out of the physics, not out of an interpolation. Pinched apart walks ten bands from a single box until it is two platforms: the seam is cut, not carved — an outer ladder folds the box while a second zipper inside it holds the crack open, and every level was designed on its own and measured against the drawn target by silhouette; the numbers agreed three times while the shape was wrong, so only the picture counts. Pack them into one body to read the section, or spread them to read band by band.

PlansGraded catalogue (12 bands) · pinched apart (10 levels)
GradientBond length 0.10 → 0.32 in even steps · endpoints Lab.06 unit 2 → 4, verbatim
PinchOne box ⇒ two platforms · platform 12 px · depth 40 · final seam 28
DesignPer level — no single parameter sweeps it
ChainsOuter ladder + seam zipper + two face-corner bonds
TetherSkin-to-mast, one-sided — a ceiling, not a pin
FormingZipper reversed — the box grows rung by rung from the nose; no warp
FitSilhouette Δ 0.3–3.7 px · neighbours within 1.8×
AlignSymmetric padding ⇒ the seam centre sits at 138 + 114·r px on every level
MastGradient: the mast is the core · pinch: fixed mast, skin gathers down it
LayoutsPacked body ↔ spread row · same run, both plans
RenderShared solid bench · WebGL
Lab.09 / Project II
序列 · 目录渐变 · 蘑菇挑台 → 阶梯方箱
12 条窄带 · 键长 0.10→0.32 逐级微变 · 同一收缩协议
r 0.95
step 0/1500 · 键 0 · 收缩中
近端 = 蘑菇挑台 · 远端 = 阶梯方箱 · 编制 / 排布可切 · 拖拽旋转
编制
排列
速度
视角

A ring

Lab.10–11 · the row closed into a loop

Lab.10

Cylinder of units

Twenty narrow bands stood in a circle: hanging slack they close into a tube, and as they contract each one folds out its ledge — together, a platform ringing the cylinder. Four plans. By default the ledge climbs and falls once around, a stair wrapped on the tube; hold it level on one form; let the form drift bulb → box → bulb; or pinch it apart — on one side two shelves 100 px apart, on the opposite side one slab, ten steps of gap between, the same construction as the square ring's pinch with every band at one depth so the plan stays a circle. The seam centre stays level all round, so the platform reads as one band that opens and shuts, not as twenty different shelves. Set the radius yourself.

Ring20 bands · level, undulating, drifting, or pinched
HeightSame form, one lead per station — 18% ↔ 71%
Solve1 / 11 / 10 engines, 20 placements — same run
ClosurePalindrome (11 levels) or exact mirror (10) — the seam is one step wide
PinchShelves 16 px, gap 0 → 100, height in even steps — Lab.11’s construction, one reach (83 px) all round
FlatPinched: seam centre level all round (symmetric padding) — the shelves part evenly
RadiusLive slider · gaps widen with it
SkinMembrane 0–1 · 0.35 by default, 0.15 under the pinch
CeilingRing plate · fixed masts, skin gathers down them
CaveatBands do not touch each other — 2D sections
Lab.10 / Project II
圆筒环 · 收缩成环形平台
20 条窄带 · 阶梯挑台 · 高度沿圆周起伏 · 11 级
r 0.95
step 0/1500 · 键 0 · 收缩中
编制 / 形态 / 半径可调 · 顶视看环 · 拖拽旋转
编制
形态
速度
蒙皮35
半径30
视角

Lab.11

A square ring

The mast stays round; the plan does not. Each of the twenty bands reaches out a different distance — four at the corners, eight along the edges, eight on the faces — so the rim lands on a square, and since the membrane between neighbours is a ruled panel, the chord it draws is the edge itself. Only the reach changes: the box is the same height the whole way round, its ladder the same ten rungs, squeezed closer as the shelf gets shallower. Two conditions decide whether that works, and both were learnt the hard way: the end panel must end on a locked rung or the end face bows out, and the box has to fit inside the free run it lives in — when it does not, the lower buffer is pulled straight and the mouth curls the wrong way. The plan is a dial, not a fixed shape: hold the inscribed circle, push only the corners out, and the same twenty bands walk from circle to square in five steps.

Ring20 bands · three depths — 8 face · 8 edge · 4 corner
PlansFlat, undulating — or pinched, where the box splits into two shelves
LayoutOne ring, or sixteen — pitch set edge-to-edge
PlanCircle to square in five (|x|ⁿ+|z|ⁿ = aⁿ) · square side 169 px, rim within 0.9 px
Reach54 / 54 / 54 round · 56 / 64 / 89 square
BoxHeight 36 px everywhere · faces flat within 0.1 px
Ladder10 rungs on every band, pitched closer when shallow
FlatPlatform spread 0.0 px — the padding makes it, not a fit
Wave40 px swing · shape unchanged, only where it sits
PinchOne round trip: two shelves 100 px apart on one side, one slab on the opposite side, ten steps between
Shelves16 px thick, fixed — the gap opens from 0 to 100 px, so the height grows from 32 to 132 px around the ring
Why the height variesA solid box must be deeper than it is tall (the buffer rule); a 132 px box would need a 358 px square — so the slab side stays 32 px
FormingTall boxes fold their top face into the seam while forming — the faces are kept straight (a placement rule), and the fold never appears
Ten enginesOne per pair of bands, ten steps of gap from 100 px to 0 — the height drops 11 px a pair, evenly, all the way round
SquareSide 223 px (flat plan 169), rim within 0.9 px · own band of 338 nodes, own grid pitch
LevelThe seam centre stays level (symmetric padding); the two shelves part evenly above and below it
RadiusFixed: the depths are calibrated against it
CeilingRing plate · fixed masts, skin gathers down them
Lab.11 / Project II
方形环 · 靠挑出的长度做形状
20 条窄带 · 三档深度 56 / 64 / 89px · 箱高恒定 36px · 方 · 边长 169px
r 0.95
step 0/1500 · 键 0 · 收缩中
面 8·k35 · 边 8·k39 · 角 4·k52 · 每条带 10 挡 · 顶视看轮廓 · 拖拽旋转
轮廓
编制
排布
速度
蒙皮35
视角

A room

Lab.12 · the field at real scale

Lab.12

Four by four

Sixteen of the cylinders from Lab.10 hung in a room — 320 bands, one solved section. A 1.70 m figure stands on the floor beside them, and that figure is what sets the scale: everything else on this page had none until now. How far a ledge reaches is set by how much material its outermost bond captures — not by how hard the unit contracts. So this family folds more of the same strip: 202 nodes as before, but the fan spans 2.1× the catalogue's, and the slack hugging the mast is what pays for it. Each ring keeps its own clearance, and pulling the radius breathes the whole field.

Field4 × 4 rings · 20 bands each · 320 placements
SolvedOne section — the field is that section, placed
ScaleFigure 1.70 m ⇒ room 3.74 m · ring 1.04 m across
RigHalf size, hung lower — underside stays at 1.08 m
Pitch2 × (radius + peak swell 101.1) + gap · tracks the slider
Gap1.5 × the gap inside a ring — rings stay separate
PlansOne form ↔ one form per row
SkinA membrane bridges the gaps between bands · 0–1
Lab.12 / Project II
4×4 环阵列 · 一片场地
4×4 个环 · 同一键谱:阶梯挑台 · 平台 ⌀1.04 m · 房高 3.74 m
r 0.95
step 0/1500 · 键 0 · 收缩中
编制 / 形态可切 · 半径滑块连格距一起变 · 顶视看排布 · 拖拽旋转 · 人 1.70 m 作比例
编制
形态
速度
蒙皮35
半径30
视角

Between units

Lab.13 · what two, three, four, nine units can be to each other

Lab.13

Between units

Call one of those cylinders a unit — twenty bands round a mast that contract into a ring platform. This bench asks what a few of them can be to each other. Two, three, four or nine hang in Lab.12's room; the relations are measured, not styled: apart (Lab.12's clearance), touching (platform edge to platform edge, with a fabric web growing across each seam once the rims meet), stepped (the same shape carried higher on its band — up to 0.35 m), or interleaved, where a lower platform slides under a higher one and stops short of its neighbour's mast. Interleaving has a physical gate: the step must clear the folded body at its fattest moment, so some form–cluster pairs grey out rather than collide. Timing is a second axis: all at once, or wave by wave across the cluster.

UnitOne Lab.10 ring — 20 bands · 202 nodes · same bond maps
ClustersPair · triad · two-by-two · three-by-three
RelationsApart · touching · apart stepped · touching stepped · interleaved
SpacingDerived per relation from peak reach — never a styled number
Heightlead knob, 14–58 nodes ⇒ up to 0.35 m; shape unchanged
InterleaveStep ≥ body swell + 6 px · greyed out where it fails
TimingTogether, or one wave every 150 steps — one solver per unit
SeamsTouching, level: a 16 cm fabric web bridges each seam
SwitchingRelation re-places without re-solving; form, timing or level count re-solves
ScaleLab.12's room and 1.70 m figure, whatever the cluster size
Lab.13 / Project II
单元关系 · 几个单元能是什么关系
2 个单元 · 交叠 · 错层 · 芯心距 0.59 m · 平台 ⌀0.89 m · 2 级,每级高差 ≥ 0.35 m · 平台盖过去 0.30 m
r 0.95
step 0/1500 · 键 0 · 收缩中
编制 / 关系 / 时序 / 形态可切 · 换关系不重解 · 半径连间距一起变 · 拖拽旋转
编制
关系
时序
形态
速度
蒙皮35
半径30
视角

People

Lab.14–15 · behaviour reaching the units

Lab.14

A person walks through

The first bench with a behaviour layer. One person walks through Lab.12’s room — passing, crossing, standing, looping, pacing, or wherever you click — and every second of presence marks the floor within reach. Each unit reads the floor it owns; once that floor has held presence long enough on average, the unit comes down; whether it stays down after they leave is a switch — follow, where it withdraws, or lock, the hysteresis the project argues for. The units are smaller and more numerous than Lab.12’s so that what forms is a group, not a point. The person faces somewhere and has a body: the trace lands only inside a 180° field of view, nothing comes down within a clearance distance of the body (a platform there would hit them — those units are held back, marked with a rose ×), and while walking a lane straight ahead stays clear, so structure grows along the sides of the path and, when they stop, as an arc in front of them. As a demo it runs fast — two seconds of standing brings the arc down, six seconds after the person leaves it is gone — with the author’s July prototype (2 %/s decay, a 15 s threshold) still one slider away; reach, field of view and clearance are the behavioural knobs.

FieldLab.12’s room and field · 4×4 / 6×6 / 8×8 · unit scaled with pitch (4×4 = Lab.12 verbatim)
TracePresence-seconds on a 0.1 m floor grid, within reach of the person · on the bench it caps at the threshold and fades away linearly (fade slider); the prototype’s own rule is 2 %/s with no cap and no zero
ReadingBy cell (Voronoi = the aisle lines) or footprint only · mean over the cells a unit owns
FormingMean over the floor a unit owns ≥ threshold × floor share ⇒ down (floor share 25–100 %, default half — at 100 % only units wholly inside the wedge ever form) · purple ring grows from mast to rim
ResponseFollow — the structure tracks the reading and withdraws once people leave (default; 2 s to form, gone 6 s after they leave) · Lock — bonds stay locked, the hysteresis the project argues for (the prototype: threshold 15 s, decay 2 %/s)
Reach0.22–2.0 m, default 1.5 m (how far they look; Hall’s near social distance) · the prototype’s 1.0 m is one slider away
FacingField of view 60°–360°, default 180° — the trace lands only where they look · body faces the last direction walked; standing, the head turns (a glance every 1.5–6 s within ±110° of the body, a demo device) so a long stand spreads the arc
ClearanceD = platform radius + body 0.22 + clearance 0.15 m (an elbow) · no trace within D, units whose mast is within D are held back (rose ×) · while walking a lane 2D wide ahead stays clear · off = the 09-04 reading
BehavioursPassing · diagonal (aisle-wise steps) · dwell 20 s at an aisle crossing · loop ×6 · pacing ×8 · free (click the floor) · hold the person to drag — every route keeps to the aisles; a unit centre is a mast
ResultUnder the prototype’s own numbers with facing and clearance on: passing forms none · a 20 s stand forms an arc of 3 ahead (+3 half) · pacing lines the corridor without filling it · loop a ring
Not hereWhich form a unit takes — the behaviour → form rules are the author’s to write
Lab.14 / Project II
一个人走过
平面 · 行为 → 地面痕迹 → 一群单元成形
成形 0 / 64
t 0:00 · 半成以上 0 · 最高读数 0.0 s · 地面最深 0.0 s · 闸住 0 ·
影响半径 1.50 m · 视野 180° · 让位 D 0.62 m · 阈值 2 s × 占比 50% · 散掉 6 s · 按格读 · 绿盘 = 当前读数 · 紫环 = 结构位置(跟着读数涨落,人走了收回去)
行为
格数
读法
响应
影响半径 1.50 m
视野 180°
阈值 2 s
占比 50%
散掉 6 s
步速 1.2 m/s
时间

人有朝向、有身体:痕迹只落在视野扇形里(默认 180°,身后的不记);让位距离 D = 平台半径 + 身体 + 让位(默认一肘 0.15 m)——D 以内的地面不记,芯在 D 以内的单元闸住(莲粉 ×:平台下来会打到人,跟随档退回去、锁定档不升);走着时正前方一条 2D 宽的道也不记,结构只长在路两侧。视线与朝向分开:朝向是身体(走的方向,走廊沿它开),视线是头(扇面沿它转)——站着时每隔几秒看向别处(身体前方 ±110° 以内),久站的那道弧就跟着视线散开;走着时看向前方。「占比」= 脚下有多大比例的地面被看够了就下来(默认一半):单元读的是整片地面的均值,100% 时只有整片都在扇面里的才成形,扇面边上盖住一半的永远到不了。视野拉到 360°、让位关掉、转头关掉、占比 100% = 09-04 的旧口径。

「响应」两档:跟随 = 结构追着读数涨落,人走了收回去(演示默认);锁定 = 键锁死不回退,那是项目立论的滞回。按住那个人可以拖着走,松手就站在原地(预设的路线随之作废,点「重播」重来)。自由模式:点地面,人走过去;停着就是驻留;「离场」从最近的门出去。台架跑的是演示值:站 2 s 就触发,人走后 6 s 散光。作者 2026-07-20 原型的三个数(落格 +1 · 每拍衰减 2% · 超过 15 就固化)= 阈值滑块拉到 15,那套要等几十秒才看得出变化。影响半径是行为的量,做成旋钮。

Lab.15

A few people

Lab.14 replayed one person along a preset path; this bench is live. Click the floor to place people (up to eight), hold one to drag it, or let them wander on their own — at an indoor 0.7 m/s, a hop of half a metre to two, then eight to forty-five seconds standing; a demo device rather than a behaviour rule, but paced like people in a room, not like particles. The floor records presence as they move and the units form in front of you. Where two reaches overlap the floor counts both people, so a pair standing together forms the unit underfoot twice as fast, and a small crowd reshapes more of the room than one person ever could. Same mechanism as Lab.14, same knobs, nothing re-tuned.

PeopleUp to 8 · click empty floor to place · hover for the grab cursor, hold to drag · − removes the last
WanderIndoor pace 0.7 m/s · a hop of 0.5–2 m (now and then 3.5) · then 8–45 s standing · seeded · a demo device, not a rule
MechanismLab.14’s, untouched: presence-seconds within each person’s field of view, outside their clearance · trace decays · mean ≥ threshold brings the unit down · a unit within anyone’s clearance is held back
ResponseFollow (default) — units withdraw when people leave · Lock — they stay, which is the project’s hysteresis
OverlapReaches add: two people on one spot form the unit underfoot in half the time
Field4×4 / 6×6 / 8×8 on Lab.12’s field · unit scaled with pitch
Not hereCats, and any rule for how a real person moves — those are the author’s to write
Lab.15 / Project II
几个人在场
平面 · 放人 · 拖 · 自走 → 单元实时成形
成形 0 / 64
t 0:00 · 2 人(走 0 · 站 2)· 半成以上 0 · 地面最深 0.0 s · 闸住 0
影响半径 1.50 m · 视野 180° · 让位 D 0.62 m · 阈值 2 s × 占比 50% · 散掉 6 s · 按格读 · 绿盘 = 当前读数 · 紫环 = 结构位置(人走了收回去) · 点地面放人 · 按住拖
格数
读法
响应
影响半径 1.50 m
视野 180°
阈值 2 s
占比 50%
散掉 6 s
步速 0.7 m/s
时间

人有朝向、有身体:痕迹只落在每个人视野扇形里(默认 180°);让位距离 D = 平台半径 + 身体 + 让位(默认一肘 0.15 m)——D 以内的地面不记,芯在任何一个人 D 以内的单元闸住(莲粉 ×:平台下来会打到人);走着时正前方一条 2D 宽的道也不记。视线与朝向分开:朝向是身体(走廊沿它开),视线是头(扇面沿它转)——站着时每隔几秒看向别处,走着时看向前方。「占比」= 脚下有多大比例的地面被看够了就下来(默认一半)。视野 360°、让位关掉、转头关掉、占比 100% = 09-04 的旧口径。

「响应」两档:跟随 = 结构追着读数涨落、人走了收回去(演示默认);锁定 = 键锁死不回退(项目立论的滞回)。点空地放一个人(最多 8 个);悬停到人身上变抓手,按住就能拖着走,松手站在原地。「自走」= 演示用的慢走:每次只挪 0.5–2 m(偶尔远一次),到了站 8–45 s,步速 0.7 m/s——不是行为规则。几个人的影响圈重叠处每秒记几份——两个人站在一起,脚下的单元早一倍成形。