Texture improved on every single asset across all three tasks — 12/0, p<0.001. tex_std deviation 0.40 → 0.12.
Geometry did not move. geo_mse p = 0.30 / 0.28 / 0.58 across the three tasks. 20,000 steps, 3.9B params, no significant change.
The towers did not learn to ignore each other. They narrowed the cross-modal budget 37–65% while making it 15–30× more precise, forming a spatial chain SS → geo → tex in which each stream reads the co-located token of the one before.
Two official baselines recorded in our eval skill do not reproduce on val200: TRELLIS.2-4B G3 measured 0.231 (recorded 0.091) and G4 1.159 (recorded 1.40). Both were held-out-set specific.
1 · Everything in one view
① ② ③ — attention probe: where each stream's softmax mass actually goes
④ ⑤ — three tasks, trained vs a properly-matched warm-start baseline
⑥ — head-to-head with official TRELLIS.2-4B on the same 16 assets
The towers separated, texture won, geometry stood still.
2 · Do the cross-modal attentions leverage or ignore?
Answer: leverage, selectively. Total mass is the wrong statistic — it fell, while precision rose 15–30×.
A first pass measured only total mass and concluded 'learned to ignore'. That was wrong, for two reasons. Uniform attention is not a meaningful reference — a geo token should mostly attend to geo tokens. And warm start is not a neutral baseline: three independently-trained specialists have uncalibrated cross-stream logits (the code measures them at O(1e2–1e3)), so its cross-mass is noise.
What separates 'used' from 'leftover noise' is the shape of the distribution, not its total. Both correspondences are exact: geo and tex share coordinates, so the co-located token is the diagonal; SS keys are re-roped c→2c+0.5 into the 32³ frame with token order x·256+y·16+z, so slat voxel p maps to SS cell p//2.
peak ratio = P(co-located token) ÷ mean probability over that segment. warm start sits at 0.8–1.1 on every path — perfectly diffuse, confirming it was noise.
The three that learned form a chain, not a mesh: texture needs local geometry, geometry needs local occupancy, and texture does not need to reach past geometry to the structure grid.
This resolves the apparent paradox from §3: 3.9% of attention mass moves the geo velocity 25% because that mass is concentrated on the right cell rather than spread over 4096 keys.
3 · The other direction: does slat read SS?
Coordinates held fixed, only SS content swapped — this isolates the union-attention channel from SS's dominant effect of choosing which voxels exist.
geo responds 2.33× more than tex, stable across all five noise levels.
Swapping content beats dropping the segment ~2×, so slat reads what SS says, not merely that it is there.
For texture at low noise the image condition wins over SS (ratio 0.62).
geo reads SS twice as hard as tex does, at every noise level.
4 · Coupled inference: real, learned, and too small to use
SS←slat turned on at inference for the first time, on the exact leader-lag curve the lag rows were trained on.
Net gain over production cascade: +0.0003 occ_iou (p=0.001 — certain, and negligible).
The gate sits on a sharp optimum: ×2 is flat, ×4 collapses the output entirely.
It stopped growing at step 12k and stayed flat to 20k.
Ceiling comes from the sampler: u_lag ~ U[k0/12, 1] means SS never sees a slat cleaner than t_s = 0.50.
Three measurements, one answer: real path, negligible budget.Every tile is a decoded 64³ occupancy of x̂₀ — the orange strip is the slat noise level SS actually reads at that step.
5 · Three tasks, end to end
Nothing is given — the SS tower generates its own coordinates. The 2026-08-17 figures had to carry a 'our voxel coords are GT-given' disclaimer; this one does not.
Warm-start texture is literally rainbow confetti — that is what tex_std = 139% looks like.
Geometry looks near-identical between the two arms, matching the null result.
text_to_3d produces caption-consistent objects (hooded figure, egg-shaped vase) that are not the GT asset.
Quantified by self-consistency (same caption, two seeds): text 0.215 vs image 0.482. The caption does not pin the model to one shape, so occ_iou against a single GT has a low ceiling by construction.
Normalising that ceiling out — occ_iou ÷ self-consistency — text scores 0.60 and image 0.79. The raw ratio is 0.34, the normalised one 0.76: about two thirds of the text-vs-image gap is the caption not determining a shape, not the model failing to read it.
Right-caption vs wrong-caption is significant (Δ +0.063, p=0.014) but 4.8× weaker than the same test on images (Δ +0.305).
v10 @20000.warm @0, properly matched — its own connectors, not the trained ones.
6 · Two eval-harness bugs found along the way
Conditioning was built 17% off spec. Training adds cond_seg_embed, cond_patch_pos and qwen_img_rc every step; the eval path passed none of them. Relative L2 gap 0.164/0.177/0.177 across the three streams. Every absolute number before this fix understates quality.
The baseline was mismatched. The old warm@0 arm fed trained connectors' conditioning into an untrained DiT. assemble_unified_tri loads only the three flow towers; connectors are loaded separately.
Paired comparisons (coupling arms, interleaving) are unaffected — same harness on both sides.
7 · Open questions
Geometry has not moved across v5 → v8 → v10. Three architectures, one result.
If the lag rows' u_lag range were widened to reach low t_s, would the coupled path get a useful budget — or would the row mask (anti-leak, must stay) cap it anyway?
occ_iou punishes sub-voxel misalignment hard: official scores 0.000 and 0.080 on assets whose voxel counts match GT within 1%. It may be the wrong cross-system metric.
The skill's official baselines need re-recording against val200.
tex→SS is the one path that learned nothing (1.1→1.2). Is texture genuinely indifferent to the structure grid once it can read geometry, or was it crowded out?
text_to_3d needs a metric that does not require guessing one specific asset — text-shape alignment or human preference, not occ_iou.