Building a new orc on parametric heads and bodies in Blender
A head and a body generated from numbers over a distance field, two passes that cut their triangles, a collarbone, and a shoulder fault that was the pose.
I rebuilt how Blobber’s creatures are modelled on 9 October. A head and a body now each come from one module and a set of numbers, and a new orc built on both costs 3,576 triangles with its head, where the old orc’s bare body is 7,999. The new orc stands in the game beside the old one as a trial and replaces nothing yet. The work is done by AI coding agents that I direct.
Why did the old heads look cartoonish?
The model kit has a parametric head. About twenty numbers make a man, an old woman, an orc, a goblin, a hound or a carrion bird.

The orc’s old head was a mound with no cranium, carrying separate balls for brow, nose, jaw and lips. They met in creases a face doesn’t have. Its eyes were one-colour eight-sided balls standing on the face with a bead for a pupil, no socket and no lid. The head had 1,590 of the model’s 9,740 triangles and 12% of a 512 px image, so a texel on the face was about 9 mm, larger than the pupil.
The new head is tools/blender/lib/face_kit.py. A generator writes a spec and calls
Face(kit, spec), build(), finish(budget) and export(). Four rules make it:
- The skin is one surface. The skull’s masses (cranium, the block of the face, brow ridge, cheekbones, jaw, chin, muzzle, nose, neck) are a distance field, melted together where flesh covers them and cut where a skull is hollow: the sockets, the temples, under the cheekbone. A coarse ball of quads is shrunk onto the field and made finer over the face.
- Anything with a hard edge in life is a piece of its own: the white of the eye, the iris, the pupil, each lid, teeth, a nose pad, a beak. Its colour ends at a mesh edge, which is sharp at any texture size. A line painted inside the texture is a blur two texels wide, about a centimetre at these sizes.
- Landmarks are found on the skin. An eye goes where a ray from inside the head leaves the skin, and then it’s sunk. The mouth is where a fan of rays at mouth height leaves the skin. The same code places a face on a flat human head and along a hound’s muzzle.
- Shadow is painted in. The game’s light is flat or from overhead, so the baked occlusion is multiplied into the base colour at 0.6. Measured, this was a small gain.
Units are metres on a man’s head: the origin is the middle of the cranium, the brow line is z = 0, the chin z = -0.126 and the cranium’s radius 0.092. A muzzle’s length is given in cranium radii.
Every part is lofted from numbers and never made from a Blender primitive, because a primitive’s face order changes from run to run. Each part is put in a canonical order before the join, so a head builds to the same bytes twice.
The study built thirty heads, the six and twenty-four variants that each change one thing. Each was pictured as many pixels tall as it would be at 2, 5 and 12 m in a view 1080 pixels high at 70 degrees. A cornea bulge, a glint and wet gloss made no difference beyond 2 m. A row of teeth behind the lips was never seen. A 512 px image in place of 256 made no difference at 2 m. What stayed was one continuous skin, eyes sunk under lids, and a finer mesh over the face, which mattered more than texture.
I thought it was a huge improvement. The hound is still a dark blob beyond 2 m, and hair in strips looks like a wreath of leaves. The old heads also won one thing: their big bright eyes read at 12 m, and a true-sized sunk eye doesn’t.
Cutting two fifths of a head’s triangles
The six heads now cost 37 to 44% fewer triangles and look the same in the before-and-after sheets at 2, 5 and 12 m. The orc’s head went from 1,816 to 1,027.
The themed orc bodies were at 9,740 to 9,907 of a 10,000 triangle budget, and a new head
cost 250 to 700 more than the old one. The earlier slimming pass, glb_slim.py, shrinks
the file and never touches a triangle.
Two passes did the work. Face.drop_unseen() poses the head seven ways (rest, blink, half
blink, look left, look right, jaw open 10 degrees and 24 degrees) and tests from 144
directions which triangles are visible. A triangle hidden from every direction in every
pose is deleted: the backs of eyes, the roots of lids, the buried ends of teeth, tusks and
ears, the skin under the hair. That saves 460 to 530 triangles a head. A jaw opened past 24
degrees could show a hole.
Then the skin is collapsed to 62% of its triangles, symmetrically, with points near the eyes, nose and mouth made dearer to remove. That saves 360 to 510 more. A high protection setting left the face untouched and faceted the skull, so it was dropped. The head budget is 1,600 seen triangles.

eyes=dict(glow=n) in a head’s spec lights the iris alone, as a second material named
M_<name>_glow, the name the game’s glow script already looks for. A flat colour looked
like a yellow disc close up, so the iris gives off its own baked colour and keeps its dark
rim. The orc is at 1.2 and the goblin at 0.7. At 5 m under the lamp the orc’s lit eyes are
clear, and at 12 m they are two faint warm pixels. Setting 0 and rebuilding undoes it.
The orc’s lips had read as two sausages. They are now ridges of the skin whose colour fades into the face, with the mouth’s dark as a strip between them that rides the jaw. The blink only half closed because the cornea stood proud of the lid. The cornea’s bulge went from 0.16 to 0.10 and the lid to 1.17 eye radii, so the lid clears it.
Shooting a skin onto a skeleton for bodies
body_kit.py makes a body the way face_kit.py makes a head. Five study bodies, each
wearing its head, cost 3,011 to 3,613 triangles.
The old bodies had no ribcage, pelvis or shoulder girdle, and their limbs were plain tapers. The triangles were in the wrong places: 1,941 of the orc’s 7,999 were in its two hands and 656 in its two legs.
- Proportions give a skeleton: heights and lengths of trunk, neck and limbs, shoulder and hip width, bulk, muscle, fat, posture, hand and foot size.
- Masses on that skeleton (ribcage, pelvis, shoulder yoke, the muscle groups, bony landmarks) are a distance field.
- The skin is rings shot outward from the bones onto the field, with a ring at each landmark: 24 points round the trunk, 12 round an arm, 16 round a leg, and three fanned loops at an elbow and a knee.
- Limbs leave the trunk through holes cut in the trunk’s grid, so the skin is one surface. The head is welded to the neck.
- Weights come from each joint’s plane, by rule.
- Skin is dry, with roughness 0.44 to 0.62 where the old bodies are 0.36.
The same two passes cut the triangles. The man is 4,650 as built, 4,124 after a protected collapse to 78%, and 3,530 after the unseen faces go.
The variants settled some questions. One loop at a knee is a knife edge, and three level loops can’t be told from three fanned ones. Painted muscle equals modelled masses on the lean man at 5 m, but on the orc only masses give the chest a shadow. Fingers, grouped fingers and mittens are the same at 2 m and beyond.
I love the style of this approach. Its fault was the shoulder: an arm raised overhead tore the skin, and nothing tried in the weights stopped it.
Building an orc family from rows of numbers
The new orc comes from one generator for its whole family,
tools/blender/SK_creature_orcoid/gen_orcoid.py. The family owns 20 bones, nine sockets
(skull, a pauldron and a bracer a side, breast, pack, hip, weapon), five clips and the
hide’s pattern. A member is a row of numbers: its proportions, head, colours, own parts and
default weapon.

I didn’t want the old silhouette, one huge arm and shoulders as high as the head. I wanted something slightly monstrous but still human. A is 1.96 m, long-armed, deep-chested and lean. B is 2.02 m, bellied, with three fingers. C is 1.98 m, stooped and starved. I liked all three. A is installed, and B and C are kept for the family’s big and gangly members.
The shoulder got a collarbone a side. The clavicle is the chest’s child and the upper arm’s parent, and it takes a share of every turn of its arm. The tear went. A count of folded triangles with the arms overhead, forward and across fell from 98 to 70 on the orc and from 94 to 43 on the man.
The new hand is 0.35 the width of the old kit’s standard fist. Weapons are sized by the ratio of fists, so they came out as toys until the fit data gave this creature a multiplier of 1.9. The clip check also needed a change. It fails a build when anything held touches the hand, and a hand that is part of one continuous skin always touches the haft it grips. A gripped haft is now allowed inside the palm, within the fist’s span.
Was that a hole above the tusks?
I saw a weird hole above the tusks, then thought it might be shadow. It was shadow.
The mouth was pictured five ways before anything changed: as built, with the baked shadow taken out of the colour, with the mouth’s and nostrils’ dark switched off, with no hidden faces removed, and as bare mesh. No back face showed and the mesh was closed. Three dark things were stacked. The snub nose cast a shadow on a short upper lip. The lip was painted as dark as that shadow. The nostrils were cups set inside the ball of the nose, so each showed as a ragged dark scrap directly above a tusk. The fix was paint and placement: nostrils on the front of the nose, lighter lips, paler skin between.
Hard-edged rectangular patches on the torsos looked like a texture fault. Rendered with colour only and no light, the texture was clean. They were cast shadows on fans of long thin triangles the edge collapse had left, cut along triangle edges because the review light was a sun half a degree across. The fans were removed and the sun widened to 3 degrees.
Why did only the right arm fold badly?
The right arm looked off raised straight up and the left didn’t. A body built symmetric should fold the same on both sides.

The suspects were ruled out one at a time: the weapon hand, the bone rolls, the collarbone’s share of the turn (36 alternatives searched), the weights, the collapse, the hidden-face pass, and the camera and light. Of 191 points round the right shoulder, 184 have a left partner within 0.1 mm.
The pose wasn’t mirrored. Every sheet and film since the shoulder work began had raised the right arm through the front and the left arm out through the side. Given the same pose, the two arms fold the same. Raising an arm through the front is the harder case, because the trunk’s skin round the armhole was being wound round the shoulder with the arm. Two numbers in the kit took folded triangles at the right shoulder from 24 to 8 on the orc. On the goblin’s thin arm it’s no better, 14 before and 18 after.
Next
Themes, states and armour for the new orc. The themes code draws its detail in fixed metres for the old orc’s skull and fist, and it skins, bakes and rigs by itself, which would bypass the body kit’s weights.