Eye Refinement — Model Fidelity

How the forged cast's eyes are being fixed: a single measured pass that snaps, recesses, retextures and lids every eyeball. Part of the golden-body (Path B) effort.
Status — SHIPPED cast-wide (all 323 models), verified on the live deployment.
Four distinct bugs were each measured and fixed: (1) ball-center — the eye BONE sat behind MakeHuman's true eye joint → correct to the joint; (2) oversized eyeballs (R/IPD 0.279) → native size (0.243×IPD); (3) bug-eyed flat faces — a fixed bone offset couldn't fit varying forge face depths → per-character eyelid-surface recession (the eyeball's front pole sits just behind each character's own lid); (4) stale glbs → ?v= cache-bust. Per-character/species iris colors are live (humans realistic, aliens by species). The dark blotches around the eyes are the forged skin texture — a separate issue (baked lighting + green-collar bleed), the next fidelity pass.

The problems

The forged characters ride a shared 163-bone golden body; the eyeballs are recovered as a separate mesh weighted to the eye.L/eye.R bones. Several defects stacked up:

Bulging out of the socket
The eyeball sat proud of the face plane — a glossy ball stuck to the surface.
Floating above the crown
Size-reforged files carried the eyeball detached at z≈1.05, above the head top at 1.01 — it post-dated the earlier fix, so it was never re-snapped.
Dark hollow "alien" sockets
Black lash geometry smeared around a dark ball, reading as a hole rather than an eye.
No whites, no lids
No visible sclera or eyelids — a dark iris filled the whole opening.
aegis_7 before and after, front and profile
aegis_7 — before/after, front & profile. After: eyes in the socket, recessed (no bulge), lidded, catchlight.

The fix — one self-contained pass

Every step is measured against the mesh, not eyeballed. Tool: art-gen/eye_refine.py.

  1. Snap — re-home each eyeball centroid onto its own eye.L/eye.R bone (fixes floating/forehead eyes on any re-forged file).
  2. Size — MakeHuman-native. Measured from base.obj: the eyeball is a perfect sphere sized to a fixed ratio of the interpupillary distance (radius = 0.243 × IPD), centred on the joint-l/r-eye marker. We scale the eyeball to that exact ratio rather than an arbitrary shrink.
  3. Set back into the socket. Sink the eyeball a fraction of its radius into the head so it sits behind the lid plane — not the earlier "recess" that measured the brow ridge and shoved the eyeball forward until it protruded in profile.
  4. Retexture — mostly white. Small colored iris ring (so the sclera dominates the narrow lid opening), dark pupil, crisp limbal ring, near-white sclera, tight catchlight. The sclera is emissive so it reads white even recessed in socket shadow.
  5. Delash — remove the near-black lash geometry that smeared as "alien eyelids".
  6. Eyelids — MakeHuman's own. The base mesh already carries anatomical eyelids (and riggable upperlid/lowerlid joints for future blinking). Rather than reinvent them with a procedural drape (which read odd and bumped out in profile), the eyeball is sized and recessed to sit correctly behind the base's real lids.
eyeball with white sclera and colored iris
The eyeball alone: white sclera, saturated iris, dark pupil, catchlight — the look the lid must frame, not cover.

Result — white sclera + colored iris + human lid

brown and blue iris close-ups plus profile
Recipe v2 close-up: brown and blue irises, visible white sclera, catchlight, subtle upper lid; profile stays recessed (no bulge).

Generalization

The same pass, unchanged, across skin tones — the skin-sampled lid and emissive sclera hold up on a pale android and on dark skin (where the whites read especially clean).

android, dark skin, and a less-hooded variant
Pale android (blue), dark skin (brown), and a less-hooded variant (more white showing).

← processed characters (live) · golden-body deformation measurements → · bulk & height tuner (live, all species) →