can a vision LLM verdict a 3D anatomical model?

2026‑05‑26 · ~8 min · experiment writeup
tl;dr Two rounds of testing, 81 trials, three defect images from a 3D anatomy app. On this small sample, Claude Opus 4.7 and Sonnet 4.6 each scored 70–72% overall, saturating at 83% with extensive context. Their per-defect failures landed in different places, which suggests an ensemble may help — but the sample is too narrow to claim that as a general result. The clearer finding is that camera angle changed scores by more than prompt wording on at least one defect.

context

Corpus is a 3D anatomical app that renders the human body in layers — skeleton, connective tissue, muscle, fat, skin — each derived from the layer beneath it. Engineering is done by a fleet of coding agents working in parallel; a human reviews the output before it ships.

The recurring failure mode looked like this:

That left a single human as the visual quality gate on every commit. The experiment asks whether a vision-capable LLM can plausibly replace that gate.

the three test defects

Three actual defective renders from a recent build. Each is a single PNG, roughly 600–1200 px per side, generated by puppeteer against the production three.js scene.

T1 — joint-capsule tori inheriting the wrong material

Bright white rings at each shoulder. Procedural joint capsules at the glenohumeral joint were assigned the bone material instead of the connective-tissue material.

T1 — skeleton front view with bright white ring artifacts at both shoulders
T1 · front view, skeleton + soft-tissue cutaway. The bright white tori at both shoulders are the defect.

T2 — muscle protruding past the skin envelope

The kd-tree skin-derivation step fails to push skin outward enough; muscle is visible at the face, anterior chest, abdomen, and limbs.

T2 — muscle layer protruding past the skin envelope at face, chest, and limbs
T2 · muscle (deep red) breaks through the skin envelope on the ventral side.

T3 — skin failing to cover the body

Hands and head fully exposed; the skin shell renders as a transparent ghost rather than a continuous envelope.

T3 — side view showing skin failing to cover hands and head
T3 · side, all-layers view. The skin layer fails to close around head and hands.

round 1 — 3 models, 1 prompt level, 27 trials

setup

the moderate prompt (T1 example)

Read <image_path> with the Read tool.

It is a render intended to show a human skeleton (white bones) with the
soft tissue layer rendered as translucent dark red behind it for cutaway
context.

Question: List anything visible that you would NOT expect to see in a
clean skeleton-plus-cutaway view. For each item:
- LOCATION (specific body region)
- DESCRIPTION (≤15 words)

If nothing is anomalous, write: NO DEFECTS DETECTED.
Answer in under 120 words. No tools other than Read.

results

modelT1 toriT2 muscleT3 skinoverall
Opus 4.70%100%100%67%
Sonnet 4.650%50%100%67%
Haiku 4.50%50%50%33%

round 1 read

The open question after round 1: does prompt phrasing matter, or is 67% the model ceiling?


round 2 — 2 models, 3 prompt levels, 54 trials

setup

scoring rubric

scorecriterion
1.00Named the primary defect with correct geometry and noun.
0.75Named the defect class with mostly-correct description.
0.50Identified the class but with imprecise geometry (e.g., “lines” for “tori”).
0.25Flagged a related or symptomatic issue.
0.00Missed entirely.

Partial credit reflects that defect detection is not strictly binary — a model that says “white lines at the shoulders” has caught the bug class even if it didn’t name the geometry correctly.

overall

modelT1T2T3overall
Opus 4.722%100%88%70%
Sonnet 4.659%58%100%72%

per-cell breakdown (points out of 3 per cell)

cellT1 minT1 modT1 extT2 minT2 modT2 extT3 minT3 modT3 ext
Opus0.500.001.503.003.003.001.953.003.00
Sonnet1.501.502.351.601.502.103.003.003.00

effect of prompt context (overall %, both models)

Opus 4.7
  Minimal    ████████████░░░░░░░░  61%
  Moderate   █████████████░░░░░░░  67%
  Extensive  █████████████████░░░  83%

Sonnet 4.6
  Minimal    █████████████░░░░░░░  68%
  Moderate   █████████████░░░░░░░  67%
  Extensive  █████████████████░░░  83%

Both models converged at 83% with extensive context. At any given context level, the difference between them was less about overall rate and more about which defects they caught.

sample outputs

Sonnet on T3 with MINIMAL prompt (trial 2, verbatim):

SHOULDER RINGS: Two large circular ring artifacts floating at shoulder/axilla, anatomically incorrect. PELVIS/HIP: Muscle mass is sparse and thin; hip region lacks volume.

3 of 3 minimal-context trials on this image named the ring artifact correctly.

Sonnet on T3 with EXTENSIVE prompt (trial 1, verbatim):

Head/Neck — Skull fully exposed; no skin coverage from crown through neck. Shoulder/Upper arm — Humerus bone protrudes visibly; skin absent on lateral shoulder. Rib cage — Entire ribcage exposed through torso.

The same model, primed to look for skin-coverage failures, produced a thorough coverage report but did not mention the rings in any of 3 extensive-context trials. Priming attention narrowed it.

Opus on T2 with EXTENSIVE prompt (trial 1, verbatim):

Face/jaw (front): Red muscle bleeds through cheek and jawline, breaking skin envelope. Neck (anterior): Large muscle mass protrudes forward past skin contour. Root cause: kd-tree outward-pull insufficient on ventral surface; skin tracks dorsal silhouette only.

Opus correctly identified anterior protrusion in all 3 trials and proposed a root-cause hypothesis. Sonnet on the same image misread the protrusion as posterior in all 3 of its trials — the same directional error every time.


what changed from round 1 to round 2

questionround 1round 2
Viable for this task?Maybe — ~67%.Up to 83% with extensive context.
Which model is best?Tied at moderate context.Still tied at extensive context — but different misses.
Does Haiku work?No, 33% with anatomical errors.Dropped.
Does prompt phrasing matter?Not tested.Yes — with a trap (see below).
Upper bound?Unknown.83% per single shot on these three defects.
Camera angle?Not tested.Changed scores by more than prompt level on at least T1.

observations

1. The two models caught different defects

On this dataset, Opus dominated spatial reasoning — which direction the protrusion runs, which side of the body is leaking. 100% vs 58% on T2. Sonnet dominated geometric detail — naming the torus artifact by its actual noun. 59% vs 22% on T1. Either model alone left defects on the table.

Caveat: three defects is not enough to argue this generalizes. It does suggest that running both models on a render and unioning the outputs is worth piloting.

2. Context helps — until it suppresses

Extensive context produced the highest-scoring cells on average. It also visibly narrowed attention: Sonnet primed to look for skin coverage stopped naming the unrelated ring artifacts that minimal-context Sonnet had caught in 3 of 3 trials. A prompt that scopes the model toward expected defects appears to reduce its catch rate on unexpected ones.

3. Camera angle matters more than expected

A torus projects edge-on from the front (looks like a line) and face-on from the side (looks like a ring). On T1, the same model often described both correctly — but only the side view let it recognize the geometry as a ring. On this defect, switching the camera angle produced a larger score delta than switching the prompt level. Whether that generalizes to other defect classes is open.

4. Variance within a cell

Implication for budget: at least in this experiment, repeated trials of the same prompt mostly reproduced the same answer. Varying prompt or model was more informative than varying the seed.


caveats

This is a small, in-house experiment, not a benchmark. Worth flagging explicitly:

proposed setup

Based on what was observed — not yet validated at scale — the next iteration to pilot looks like:

The bet is that this shrinks the human-review surface from “every render” to “audit the high-confidence flags and spot-check the rest.” Whether it actually lowers false negatives below the tolerance of a shippable product is the next thing to measure.