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>
146 lines
2.9 KiB
JSON
146 lines
2.9 KiB
JSON
{
|
|
"audio": {
|
|
"beds": {
|
|
"esophagus": {
|
|
"gain": 0.5,
|
|
"loop": true,
|
|
"m4a": "audio/bed-esophagus.m4a",
|
|
"ogg": "audio/bed-esophagus.ogg",
|
|
"seconds": 24.0
|
|
}
|
|
},
|
|
"sfx": {
|
|
"boost": {
|
|
"gain": 0.6,
|
|
"loop": false,
|
|
"m4a": "audio/sfx-boost.m4a",
|
|
"ogg": "audio/sfx-boost.ogg",
|
|
"seconds": 0.85
|
|
},
|
|
"hit_squelch": {
|
|
"gain": 0.7,
|
|
"loop": false,
|
|
"m4a": "audio/sfx-hit-squelch.m4a",
|
|
"ogg": "audio/sfx-hit-squelch.ogg",
|
|
"seconds": 0.34
|
|
},
|
|
"pellet": {
|
|
"gain": 0.5,
|
|
"loop": false,
|
|
"m4a": "audio/sfx-pellet.m4a",
|
|
"ogg": "audio/sfx-pellet.ogg",
|
|
"seconds": 0.2
|
|
},
|
|
"pickup": {
|
|
"gain": 0.5,
|
|
"loop": false,
|
|
"m4a": "audio/sfx-pickup.m4a",
|
|
"ogg": "audio/sfx-pickup.ogg",
|
|
"seconds": 0.5
|
|
}
|
|
}
|
|
},
|
|
"matcaps": {
|
|
"mol_chrome": {
|
|
"url": "gen/matcap_mol_chrome.webp"
|
|
},
|
|
"mol_glass": {
|
|
"url": "gen/matcap_mol_glass.webp"
|
|
},
|
|
"mol_matte": {
|
|
"url": "gen/matcap_mol_matte.webp"
|
|
},
|
|
"mol_molten": {
|
|
"url": "gen/matcap_mol_molten.webp"
|
|
},
|
|
"mol_pearl": {
|
|
"url": "gen/matcap_mol_pearl.webp"
|
|
},
|
|
"tissue_wet": {
|
|
"url": "gen/matcap_tissue_wet.webp"
|
|
}
|
|
},
|
|
"models": {},
|
|
"textures": {
|
|
"wall_colon_a": {
|
|
"normal": "gen/wall_colon_a_n.webp",
|
|
"tile": [
|
|
3,
|
|
20
|
|
],
|
|
"url": "gen/wall_colon_a.webp"
|
|
},
|
|
"wall_colon_b": {
|
|
"normal": "gen/wall_colon_b_n.webp",
|
|
"tile": [
|
|
4,
|
|
15
|
|
],
|
|
"url": "gen/wall_colon_b.webp"
|
|
},
|
|
"wall_esophagus_a": {
|
|
"normal": "gen/wall_esophagus_a_n.webp",
|
|
"tile": [
|
|
4,
|
|
16
|
|
],
|
|
"url": "gen/wall_esophagus_a.webp"
|
|
},
|
|
"wall_esophagus_b": {
|
|
"normal": "gen/wall_esophagus_b_n.webp",
|
|
"tile": [
|
|
3,
|
|
12
|
|
],
|
|
"url": "gen/wall_esophagus_b.webp"
|
|
},
|
|
"wall_oral_a": {
|
|
"normal": "gen/wall_oral_a_n.webp",
|
|
"tile": [
|
|
5,
|
|
12
|
|
],
|
|
"url": "gen/wall_oral_a.webp"
|
|
},
|
|
"wall_oral_b": {
|
|
"normal": "gen/wall_oral_b_n.webp",
|
|
"tile": [
|
|
3,
|
|
20
|
|
],
|
|
"url": "gen/wall_oral_b.webp"
|
|
},
|
|
"wall_smallint_a": {
|
|
"normal": "gen/wall_smallint_a_n.webp",
|
|
"tile": [
|
|
5,
|
|
14
|
|
],
|
|
"url": "gen/wall_smallint_a.webp"
|
|
},
|
|
"wall_smallint_b": {
|
|
"normal": "gen/wall_smallint_b_n.webp",
|
|
"tile": [
|
|
6,
|
|
10
|
|
],
|
|
"url": "gen/wall_smallint_b.webp"
|
|
},
|
|
"wall_stomach_a": {
|
|
"normal": "gen/wall_stomach_a_n.webp",
|
|
"tile": [
|
|
4,
|
|
18
|
|
],
|
|
"url": "gen/wall_stomach_a.webp"
|
|
},
|
|
"wall_stomach_b": {
|
|
"normal": "gen/wall_stomach_b_n.webp",
|
|
"tile": [
|
|
3,
|
|
22
|
|
],
|
|
"url": "gen/wall_stomach_b.webp"
|
|
}
|
|
}
|
|
} |