Crucible2.5D · native laboratory notes

Crucible2.5D · Food surface and recording studio

Six food compositions, an optional shaded surface, recording controls and the limits of the material analogues.

The six additions use IDs 144-149, preserving all existing scene IDs and loaders. Load/reset follows the recording studio's paused-start contract. The food surface view changes appearance; shape changes still come from MPM/SPH, gravity, heat, collision and the user's drag tools.

ID / scene Camera center; zoom (px/world) Initial temperature Continuing heater First take
144 Food Studio (0, -0.45); 220 Food 330 K; oil 320 K Off Hold the paused display: curved sausage, layered burger, open crumb loaf and oil well. Run for settling, then heat one item.
145 Sausage Heat & Tear (0, -0.12); 205 385 K (0, 0.25), radius 0.62, 535 K Run to dry the notched middle; Spring Drag the right tip slowly right/down. The left eyelet loops around a visible skewer.
146 Open Crumb Loaf (0, -0.12); 205 355 K (0, -0.46), radius 1.90, 505 K Watch shell and pore walls as the real drying and vent fields evolve. After heating, pull a rim to inspect the exposed interior.
147 Cheese Pull & Press (0, -0.12); 190 Cheese 450 K; press 300 K Off Run for the right press. Pull the left lower bulb down/right to stretch its neck while the eyelet rests on the peg.
148 Burger Close-up (0, -0.12); 220 360 K (0, -0.65), radius 1.85, 515 K Watch cheese edges sag and the patty brown. Spring Drag the upper bun downward for manual compression.
149 Oil Skillet (0, -0.12); 205 320 K Off Record the three falling oil droplets, their impacts and the resting shallow pool.

The camera values are suggested framing for a 1280 x 720 viewport. Scene 144 is the clean paused hero arrangement; scene 145 is the focused tearing setup. Heating is a controlled radius source where specified, including direct heating of the material; these scenes are not measurements of pan-only heat conduction. Scenes 144-148 use gravity -1.5 m/s² for both solvers, making the large 2D specimens easier to film without immediate collapse under their own weight. Scene 149 keeps normal -9.81 m/s² gravity for its droplet impacts.

Materials and appearance

All shaped MPM objects use the configured particle spacing. The curves and rounded corners contain no overlapping duplicate particle blocks. The sausage band uses the same lattice and outer distance as the adjoining meat, so its material interface does not become a fake exposed shell. Shell seeds also follow real holes and notches. Base stiffness changes are per-spawn and the existing RecordingObjects guard restores the global spawn parameters. The meat and lower bun/loaf base stiffness is 32,000; the upper bun is 28,000; the cheese layers use 11,000 and pull/press samples 12,000; the tear band uses 12,000. Existing v3 stiffness multipliers still apply. These scene-specific values keep the samples legible at this specimen scale without changing any material catalog default or constitutive shader.

Recording controls and limits

Use the food view for the appearance take and Material history / Temperature for the mechanism take. Pause before selecting a drag target; resume to apply forces. Pull gradually with a brush smaller than the whole specimen. The sausage's right end is near (1.35, -0.03) and the cheese bulb near (-0.98, -0.59). A sufficiently large or fast pull may dislodge the eyelet, separate fragments or flatten a sample; none of these outcomes is overridden.

Compare hot/cold behavior by resetting, disabling the continuing heater where present, and applying the existing cooling control before the pull or press. For the cheese press, move the weight aside while paused when filming only the pull. For the burger, use the board as the lower support and pull the top bun downward; there is no hidden presser.

These are 2D analogues using existing constitutive laws. There are no added muscle fibers, fat transport, fermentation chemistry, calibrated culinary temperatures, or hidden 3D connectivity. A damage value does not by itself guarantee an open geometric crack. The renderer must preserve real gaps and detached droplets; it must not animate deformation or fill missing pores.

Validation

The catalog and dispatch checks should cover all six names and IDs. Run the existing native scene smoke checker explicitly with the new IDs after building:

python tools/check_recording_scenes.py --scenes 144 145 146 147 148 149 --frames 180

Also capture paused frame 1 for the hero arrangement and interactive pulls for 145/147. The smoke check covers native loading and finite state; it does not verify a user-driven tear or establish material calibration. No existing test expectations need changing for these additive scenes.

Surface controls and reproducible captures

Use build-local/Release/Crucible2.5D.exe. The previous executable and pre-pass shader/data bundle are retained outside this checkout in the AIO portfolio-work checkpoint. The historical build target is still noita_gish.

Open Presets → Recording studio → Food beauty studio, or the matching Appearance section. Food skin selects the optional renderer. Use simulated cooking reads stored cure/drying state; disable it for the explicitly labeled Cooking appearance preview. Extra char appearance, Pore detail, Skin gloss, and Rounded depth change presentation only. Choose the original grid, dark studio, or warm studio backdrop. The original surface finishes and particle/temperature/history diagnostics remain selectable.

The original surface is captured on the first enabled food-render frame after reset. Enable this mode before deforming a sample if you want newly exposed edges distinguished from its original casing. Offscreen births use the existing material shell seed when available. Porosity detail and char are independent; one is not evidence of the other.

./build-local/Release/Crucible2.5D.exe --scene 144 --no-settings
./build-local/Release/Crucible2.5D.exe --scene 148 --frames 2 --hidden --no-ui --no-settings --width 1920 --height 1080 --capture burger.bmp
./build-local/Release/Crucible2.5D.exe --scene 145 --frames 300 --food-pull --hidden --no-ui --no-settings --capture pull.bmp

--food-pull drives the existing Spring Drag force along a repeatable target in scene 145 or 147. It never writes particle positions. --food-cook 0.6, --food-char 0.4, and --food-porosity 0.8 are appearance previews, not simulated cooking interventions. --studio-backdrop 0|1|2 and --surface-finish food|original allow matched image comparisons. Capture size is optional; default 1280×720.

Observed recording limits

The food board retains its composed solids after 180 running frames. At 480 frames, the heated burger keeps its layers while cheese spreads and the buns develop openings; mean patty browning rises from 0.18 to about 0.37.

The restrained sausage force pull stretches the body without separating the notched connector. A stronger 600-frame pull opens gaps near the grabbed end, where the interior shading becomes visible; this is not a calibrated fracture test. The cheese pull can open and slip from its peg by 300 frames, while its press sample spreads beneath the falling weight. Film a shorter take for the intact strand, or show the breakaway as an explicit limit.

The renderer regression passes 68 checks covering simulation-buffer immutability, GL state restoration, cooking/history changes, exposed edges, scene reset, appended particles, viewport resizing and offscreen births. Finite native runs of all six scenes and the force-pull probes reported no nonfinite particle state. These checks establish implementation behavior, not food calibration.