Commit Graph

6 Commits

Author SHA1 Message Date
type-two
9bd42dccc5 [lane D] The last two pathogens: the seeker and the turret get meshes
Completes the set. These two matter most of the five because they are the most COMMON enemies in
the game — the seeker is pepsin, eosinophil and neutrophil across four levels, and the turret is
every candida bloom and Peyer's patch.

  seeker -> amoeboid immune cell, rounded body with blunt pseudopod lobes. 3194 tris, replaces a
            6-sided cone.
  turret -> candida plaque colony, a lumpy dome of fused budding yeast. 3894 tris, replaces a
            7-sided cylinder.

Both took two MODELBEAST runs: the farm 401'd then 429'd the guest token twice under load, which
is a rate limit rather than a content failure, and the script being resumable meant the retry
only paid for what was missing.

A judgement call worth recording: the seeker's bbox aspect is 1.16, near-round, which for the
phage was the signature of a FAILED reconstruction. Here it is correct — an amoeboid cell is
round, and the detail is in the lobes rather than the silhouette. The cost is that a charging
seeker no longer has the cone's "pointy end = coming at you" read. The fiction wins: pepsin and
eosinophils are cells, not missiles, and the thing is 1 unit across at 19 u/s, so its threat is
read from motion and colour long before shape.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-26 19:39:19 +10:00
type-two
6d3bac8d41 [lane D] Real pathogens: Giardia and H. pylori get Trellis meshes
Playtest ask: "more detailed looking enemies... we have local trellis-2 and hunyuan, we can make
actual shaped pathogens". Two landed, keyed by ARCHETYPE so one mesh skins every instance of
that behaviour with no code change:
  latcher  -> Giardia trophozoite: teardrop body, broad front, ventral suction disc. 2232 tris.
              Replaces a tetrahedron, and it is the one that matters most — a latcher ATTACHES
              to your hull, so it is the only enemy the player ever sees close up.
  driller  -> H. pylori: thick corkscrew rod. 3231 tris. Replaces a cone.

Both prompts deliberately ask for BODIES and no flagella: the phage taught us image->3D webs
thin appendages into a lump, and at flat-emissive gameplay scale only the silhouette ships.
It worked — bbox aspect 3.80 (teardrop) and 2.12 (rod) against the phage's near-cubic 1.27:1.41:
0.94 failure, so these are genuinely shaped rather than blobs.

THE PIPELINE FIX that made them usable, worth recording: collapse-decimate FLOORS OUT on Trellis
output. Asking for 2500 tris gave 15871 and iterating moved it not at all; welding first made it
worse (12042 -> 78663); triangulating changed nothing. The answer is VOXEL REMESH first — it
rebuilds the surface as clean manifold topology, which is the right tool for a blobby organic and
finally gives decimate something it can collapse. 15439 -> 2232 and 78663 -> 3231, shapes intact,
4.4MB -> 91KB. Any future pathogen goes through the same path.

Not landed: seeker and turret. MODELBEAST returned 401 then 429 on both across two runs — the
guest token's active-job cap, not a content failure. The script is resumable; they need a quieter
window on the farm.

Honest limit, so nobody expects more than this delivers: at gameplay distance under flat emissive
these read mostly as silhouette, so the gain over the old primitives is real but modest. The place
it should actually show is a Giardia clamped to the hull. If we want enemies to read as DETAILED
rather than merely better-shaped, the lever is the rendering (a matcap or rim treatment on
entities), not more geometry — that is an ART_BIBLE decision, not a pipeline one.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-26 13:53:11 +10:00
type-two
5b076aef54 [lane D] Skin the yeast: the first Trellis mesh in GUTS, through the freshly-wired GLB loader
spore_pod (the Candida foe) now renders a real 3D mesh instead of an icosahedron:
  flux_local "budding yeast colony clump, fused knobbly spheres" -> bg_remove -> trellis_mac
  -> Blender decimate 197k->3019 tris + strip materials (entities are flat emissive, only the
  silhouette matters) -> web/assets/models/spore_pod.glb (213KB, texture-free).

First real GLB through the loader wired in 0ac11ae: verified in-engine — loaded, merged,
normalized to a unit bounding sphere (r=1.0000), 6056 verts, scaled to the archetype radius,
rendering emissive amber. assets.get('models','spore_pod').geometry lights up the hook.

flora stays a procedural CapsuleGeometry on purpose: its concept IS a smooth rod, so a
5.7k-tri capsule GLB would be pure download for zero visual gain. The pipeline is for shapes
a primitive can't fake — which is exactly the yeast cluster.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:53:30 +10:00
jing
a99f733452 [lane A] MODELBEAST dresses the molecules: 5 matcaps, and the canal picks space-filling
The right axis wasn't "generate or don't" — it was WHICH HALF. Geometry stays
procedural because a molecule's shape is already known exactly. **Material is
exactly a generation problem**, and it's the whole difference between a textbook
diagram and a game object. So MODELBEAST made the materials.

5 greyscale matcaps, flux_local, 69 seconds, $0.00, 68 KB total:
  mol_glass (O,N) — the big win: oxygen is a red glass marble with internal glow
  mol_matte (C)   — graphite soot; carbon reads as the scaffold it is
  mol_chrome (Co) — B12's cobalt is now a chrome bearing in a cage
  mol_molten (P)  — ATP's phosphate tail is incandescent AND pulses (uTime, free)
  mol_pearl (H)   — satin white; hydrogens stop shouting

The trick is Lane D's own law applied to spheres: author the LUMINANCE, tint
in-shader. derive_maps already greyscales every matcap, so one glass ball serves
oxygen AND nitrogen at their own CPK hues — 5 balls dress the whole periodic
table we care about. They pack into one strip atlas indexed per-vertex by aMat,
so **a molecule is still exactly 1 draw call** however many materials it's made
of (7 molecules = 7 draws, unchanged). ?matcap=0 falls back to the built-in
fake-lit path: the assets-optional law holds.

SPACE-FILLING WINS FOR PICKUPS, and the canal decided it, not me. New
`repr: 'space-filling'` draws every atom at its real van der Waals radius with no
sticks. A/B'd at real pickup size against the real L2 wall, same camera:
ball-and-stick goes spindly and dissolves; the solid blob holds its silhouette —
and it's CHEAPER (21k vs 26k tris, no bond cylinders). Recommendation to B:
space-filling in flight, ball-stick for hero/UI/collect close-ups where the
chemistry is worth reading. Evidence: round2_molecule_materials.png (3-way).

Two defects found by rendering it, both mine, both fixed:
- Tint x luminance darkens TWICE: CPK carbon is 0.4 and a matte ball averages
  0.5, so soot x soot vanished — the first pass sank glucose, caffeine and the
  cobalt into the background. Floored the matcap at 0.22, the same floor the
  fallback's key light always had.
- The molten matcap was my own bad prompt: I asked for an "incandescent white hot
  CORE" and got exactly that — a black ball with a hot spot, so phosphorus lost
  its orange. Re-rolled for the whole sphere to glow (attempt 2 of the <=2
  PIPELINE allows). Lesson for the kit, next to the organ/tissue one: a matcap is
  a LUMINANCE LOOKUP, so a dark-dominant ball makes a dark-dominant object.

Also corrected the doc's own framing — v1 said "I'm authorised to burn GPU and
I'm not going to", which was the wrong axis, not just the wrong tone.

qa GREEN; 16/16 texture provenance verified (synced the FIXED batch json up
first this time, so the box couldn't clobber it on the way back).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 21:31:24 +10:00
jing
3a6dbc30a3 [lane A] Complete the biome texture set (oral + colon) + a provenance gate
Generated on MODELBEAST flux_local, on-device, $0.00. Lane D's pipeline used
unchanged; **D owns these — ratify, retune or bin them.**

Why A did D's job: the six-biome tint contact sheet could only judge 3 of 6
biomes for real (oral/large_intestine/appendix had no pack and fell back to
procedural), and you cannot ratify a tint against a stand-in. All six are now
textured — the set ART_BIBLE §Biome palettes promises.

- wall_oral_a/b, wall_colon_a/b + normals. Seams 6.35/9.30/14.06/6.37 -> 1.01/
  1.08/0.74/1.36 (D's "indistinguishable" band; the shipped pack's weakest is
  2.39). Means normalised to ~0.50 by D's derive_maps, untouched.
- appendix wears the colon pack at its own gold tint (TEXTURE_SHARE in
  world/index.js) — anatomically it IS colon tissue, and it's ART_BIBLE's
  "one texture, two biomes" law for zero bytes. Distinct from the temporary
  slug map; keep it when that dies.
- oral_a took three subjects. v1 named an ORGAN ("tongue") and FLUX drew the
  organ's silhouette — D's "one urchin of villi" in a field's clothing. v2 named
  the tissue but papillae are 3D projections, so perspective gave it a vanishing
  point that tiles into starbursts. v3 asks for squamous cell pavement: flat by
  construction. Rule for the kit: prompt the SURFACE, not the FEATURE.
  Evidence: docs/shots/laneA/round2_oral_prompt_evolution.png

PROVENANCE DEFECT FOUND AND FIXED (-> Lane D):
batch_textures.json recorded, for 4 of 6 walls, the prompt from the framing
experiment D tried and rejected — not the prompt that made the shipped pack.
record() only runs on generation, so reverting a prompt while keeping its image
(exactly what D correctly did: "four winners kept untouched rather than churned")
drifts the record silently. Proved by regenerating esophagus_a at seed 1101 under
both prompts: the code's prompt reproduces the shipped wall, the recorded one
gives the bland wood-grain D described rejecting. Evidence:
docs/shots/laneA/round2_provenance_probe.png. Records re-pointed at the code's
prompt (images untouched — they were never wrong).
New: gen_textures.py --verify-provenance + qa.sh gate 5b, so it cannot rot again.

qa GREEN incl. the new gate; 11/11 provenance verified; all six biomes eyeballed
in engine (docs/shots/laneA/round2_tint_*.png).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 17:44:58 +10:00
jing
efea7d98f3 [lane D] Round 1: first texture pack + audio proof, exact-tiling pipeline
Textures (6 walls + normals + wet matcap, $0, ~64s on the m3ultra MPS):
- FLUX ignores "seamless tiling" (seam_error 3.7-17.9); a 4-way cosine
  partition-of-unity blend of the four half-rolls fixes it exactly -> 0.87-1.32
- levels-normalised the pack to one exposure (means were 0.18-0.32); these are
  detail maps multiplied into a biome tint, so per-prompt exposure read as a
  broken tint rather than as dark tissue
- prompt-kit experiment rejected + recorded: PROCITY's "uniform coverage" clause
  in the STEM cured centred subjects but flattened the pack; framing words now
  live only in the two subject prompts that needed them

Audio (1 bed + 4 sfx, 4.2s render, 0.61/10MB, ogg+m4a dual-ship):
- bed-esophagus 24.000s, loop seam 0.32 (wrap step 3x smaller than inner step)
- cascaded lowpass poles: one-pole at 900Hz left 16kHz only ~25dB down = hiss
- rewrote the spectrogram sheet (per-clip peak, log freq) — the first one was a
  saturated rectangle, and evidence you can't read is not evidence

assets.js: miss ledger + misses() — Lane A found that a drifted slug falls back
procedurally forever with no error. Each distinct miss now announces itself.

Also: shot_sink.py (canvas -> docs/shots/laneD, correctly named) and a dev
texture viewer that imports the stub world read-only for the eyeball law.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 14:17:17 +10:00