Hologram skins

Every player wears a hologram that covers them from head to toe. Skins come in categories, and bunnies are the default, so everyone starts as one. This page reads the bunny from its pictures, then works out how to build it in the game: its body, its rig, how it moves and how it's shaded.

Bunnies

The pictures come from the bunny study. s8-1 leads, with two loose fur streaks removed. s4-0 and s1-1 redraw j6-0 at the size e11-3 set: a mascot as tall as an adult, not a toy among the flowers.

A big cream plush bunny with tall pink-lined ears holds a black rifle pointing left, above small pink and white cosmos. A thin mint rim runs round its outline, with red and cyan fringes, and the meadow curves up behind it.
s8-1, the lead picture.
The bunny stands tall and close among cosmos, holding the rifle across its chest in two mitten paws; faint scanlines cross its body.
s4-0j6-0 in e11-3's pose
Seen from down in the flowers, the bunny strides toward us with one foot raised, showing pink pads on its sole.
s1-1j6-0 seen from the flowers
A smaller plush bunny with the rifle, ears and loose fur streaming sideways in the wind, petals flying.
j6-0The plush and the wind
A tall photographic plush bunny seen from low in lilac flowers, holding a rifle pointing left under a blue sky.
e11-3The size

Reading the bunny

What the build has to keep:

  • A mascot's shape. It stands as tall as an adult. Its round head is about a third of the body, not counting the ears, which are about as long again and pink inside. The body is pear-shaped, the arms end in round mittens with no fingers, and the big feet have four pink toe pads and a heel pad that show whenever a foot lifts. In the game the cosmos stand 20–42 cm tall, so a 1.9 m bunny has them round its knees, just as in the pictures, with no extra work.
  • Three marks for a face. Two black dots set wide and low, a tiny nose and mouth, and big round blush on the cheeks. There are no brows or lids, so feeling comes from the ears and the pose.
  • Plush at the edge, flat inside. The outline breaks into soft tufts. Inside it the fur is two tones of cream with hardly any texture, and the shaded side picks up the meadow's green.
  • The hologram shows at the edges. A mint rim just outside the outline, thin red and cyan fringes, and faint scanlines. There is no black ink line anywhere. The rifle is the pictures' classic black rifle: carry handle, A-frame front sight, slotted handguard and curved magazine, so it reads as a real gun. It is drawn soft, a little chunkier and rounder than the real one, and painted in two tones with a cool shade and a bright glint. It has the same rim and fringe, because it is a projection too. It is the gun you hold in first person as well, with the skyshell launcher under its handguard.
  • Wind. Ears and loose fur stream behind, and petals fly.
Close-up of the bunny's face: two black dot eyes, a tiny nose and mouth, round coral blush with scanlines across it, and a mint rim with red and cyan fringes along the head.
Dots, blush, and scanlines across the cheeks
Close-up of two round cream mitten paws gripping the black rifle, with no fingers.
Mittens on the grip
Close-up of a raised foot showing four small pink toe pads and one large heel pad, the fur tufted at the edge.
Pads under the foot, tufts at the edge
Close-up of the ears blown sideways, with long streaks of loose fur and petals trailing behind.
Ears and fur in the wind

Body and size

The hologram is mapped onto the player's body, so the person inside always faces the same way and holds the same pose. That settles three things:

  • One skeleton for every skin. Every category shares the person's skeleton. A skin only adds its own loose parts, for the bunny the ears and the tail, so any animation works on any skin.
  • One hitbox for every skin. Today's body is a capsule 1.9 m tall and 1 m across, and anything above 1.55 m counts as the head. The bunny's chunky body fills it better than a person would: the top of the head sits at about 1.9 m and the ears reach to about 2.4 m. Shots through the ears do no damage, and the rim ripples where a shot passes. Fortnite works the same way: by players' tests, every skin shares one hitbox. Ears that show over cover are the bunny's one cost. So every category gets the same envelope, nothing more than half a metre above the head, and no skin hides better than another.
  • You see your own paws. In first person a chubby mitten holds the gun, with one stub as the trigger finger. It is the part of the bunny every player sees all match long.

Mesh and rig

There are three ways to get a bunny into three.js:

WayHowGoodCosts
Blobs in codeHead, body, ears, mittens and feet are soft blobs, each tied to a bone. They merge smoothly where they meet and become one mesh when the game loads. The arms are a second piece, sewn on at the shoulder, so they turn without dragging the chest.No files, a few hundred lines. The skin weights come from the blobs, and the proportions are numbers to tune, like the grass.Round shapes only, which is all the bunny has. Later categories may need modelled meshes.
Modelled in BlenderA mesh with its skeleton and weights, saved as glTF and loaded by three.js.Any shape, full control.Needs a modeller. Weights are painted by hand, and every change goes back through Blender.
Generated from a pictureTripo, Meshy or Hunyuan3D turn a picture into a mesh. Tripo and Meshy also rig it.A first mesh in minutes, from a front view with the arms out, which Nano Banana can draw.Lumpy fur in the geometry and uneven normals, which cel shading shows plainly. Licences need checking.

Blobs suit the bunny, since it is made entirely of round parts. Loading glTF stays open for categories that aren't.

Normals make the cel look

Guilty Gear Xrd's lead character modeller: "The smallest inconsistency in normals result in a super evident artifact under Cel-shading." Xrd keeps its shading in vertex normals and colours instead of textures, because those stay clean in close-ups. Blobs give us the same thing for free. The head's normals point out from the centre of the head blob, so the whole head shades as one ball, and neither the cheeks nor the seam at the neck break the shadow. The shader draws the face from that same direction, so the dots, nose and blush stay crisp at any distance and need no texture.

Bones

The body needs 17 bones: the hips, two for the spine, the neck, the head, and three for each arm and each leg. The bunny adds three for each ear and one for the tail, 24 in all. Xrd uses about 500 per character, because its animators pose every feature by hand on every frame for fighting-game close-ups. Ours are seen from a few metres away at the closest, and code drives their motion.

How it moves

Overgrowth showed that a handful of key poses, blended by code according to what the body is doing, give fluid motion for little animation work (David Rosen, GDC 2014). Our bodies already know their speed, their aim, whether they're on the ground and which way is up, so the bunny's motion can be computed from those. The network sends nothing new, and bots get it for free.

  • Running on a distance clock. Each foot follows a loop: planted under the body and sliding back at exactly the body's speed, then lifted heel first and swung forward. A clock that runs on distance covered steps the loop, so the feet never slide at any speed. Standing, jumping and landing blend in by speed and height. The plush squashes on landing and stretches on take-off, keeping its volume.
  • Aim you can read. The chest and arms turn the gun to where the player is looking, so others see where you aim. The muzzle they see is where the shot leaves.
  • Shots and hits on top. Recoil kicks the arms, and a hit makes the body flinch.
  • Ears on springs. Each ear is a chain of three bones that trails the head, pulled by gravity, the body's swings and the meadow's wind. VRM avatars swing their hair and ears with the same kind of spring bones (stiffness, gravity, drag). three-vrm runs them in three.js, though thirty lines of our own would do. Under skin gravity, "down" is each player's own down, so the ears hang right anywhere on the shell. In a flip they trail behind, which shows others which way you rolled.
  • Feet on the ground. Each foot reaches for the ground with two-bone IK, for the shell's curve now and for slopes later.
  • Poses on twos. Guilty Gear Xrd stopped interpolating between keys, because in-betweens "look more 3D". Spider-Verse animated Miles on twos to make him feel "sticky and staccato", while the camera moved on ones. In the same way, other players' poses can step 12 times a second while their bodies still glide every frame. This needs a test, since stepped poses might also make fast strafes harder to track. Your own paws stay smooth.
  • Less with distance. Far bunnies update their poses less often and stop their ear springs. A bunny a few pixels tall doesn't need a new pose every frame.

Shading

  • Plush cel. Two tones of cream with a soft edge, the light wrapping a little past the halfway line so the plush reads as soft. The shaded side takes the colour of the ground beneath, from the painter's ground map: green on the meadow, cream on a path, like the green on s8-1's shaded side. The insides of the ears and the pads are pink. Characters keep their own light, as Xrd's do (The look, Keeping players readable).
  • Tufts at the edge. Xrd draws its outlines as an inverted hull: a second copy of the mesh, pushed out along its normals, with only its back faces drawn. Break that hull into clumps with noise and the outline comes out tufted, for one extra draw. Where the hull passes over the body, an arm across the belly or the chin over the chest, it draws a soft tan line instead of the rim, and the arms and the rifle shade the body under them, so the arms read in front of it. Up close, and on your own paws, 8 to 12 shells add real fluff. Shells are the trick behind most fur in games (Lengyel and others, 2001). Beyond about 10 m the hull alone does it.
  • The hologram. The hull is drawn in mint, a little brighter than white, so the light pass makes it glow: the rim in every picture. Faint scanlines run across the body and drift slowly. The red and cyan fringe belongs in the light pass. Skins and guns mark themselves in the frame, and the finish pulls red and blue apart only where they're marked. That way only projections fringe, as on the wave. The fringe widens with speed.
  • Hits and deaths. A hit shifts slices of the body sideways for a frame or two and widens the fringe. A shot through the ears ripples the rim. On death the hologram breaks into scanlines and goes out. What shows underneath is a question for the story.
  • At range. The rim keeps the same width on screen, a pixel or two, so a bunny 100 m away is still a cream mark with a mint edge on the green. In squads, the rim's colour can mark the team.

Bunny lab

A first bunny, built the way this page proposes: blobs merged into one mesh, 24 bones, motion worked out from speed, direction and aim, and the plush and hologram shading. Each choice is a switch, so takes can be compared on the same bunny, and bots can wear whichever wins.

Building the bunny…

Path
Gait
Poses
Ears
Light
Normals
Edge
Fur
Scanlines
Glow
Rim
Rifle

24 bones– triangles– drawsmesh built in –– fps

Drag the picture to turn the camera. 30 m and 100 m use the game's 78° view. Fur shells draw only at 4 m and in first person (Eye). Light and normals change every bunny at once; the other switches belong to each bunny, so bots can mix them.

Worth judging:

  • The gait at 10 m/s, the game's running speed: Run, Hop or Waddle.
  • Ones, twos and threes, up close and at 30 m.
  • The ears in the wind, in a flip and while strafing.
  • The edge at 100 m: ink against mint, and whether the tufts still read.

The plan

StepWhatStatus
Bunny labThe bunny in code, with each take a switch (above).built
Bunnies for botsEvery bot wears the lab's bunny, with the mint rim, in place of the capsules (Skin in the pause menu). It holds your rifle, its body turned across it so the rifle points where it aims, and its head looks at its target. A soft shade under its feet falls on the ground, the grass and rooftops, and shrinks as it jumps.built
Paws in first personBig plush arms on the rifle, chunky on purpose, made from blobs like the bunny: the right mitten on the grip with a stub on the trigger, the left on the launcher's grip, pumping it. First person cheats, as view models do: it doesn't have to match the bunny seen from outside, so the left forearm is laid along the gun's underside, its top edge tucked under the launcher and the magazine, and leaves the view at the bottom. Arm and gun read as one mass with nothing showing between them in any pose; the launcher hangs from a rail, with a side rail behind the opening it loads through. Cream cel lit from above, with a warm shade under each round part, a soft tan line inside its edges, the tufted mint rim and the fringe. Paws in the pause menu turns them off. Shells are still to come.built
The dash as a boundA dash (Shift) on the ground is one long hop over its burst: a quick push with the feet behind, a tucked flight, the feet swinging forward to land. It is sized when it starts from the speed the dash gives, about 7 m and half a metre up at a run, 4 m and 0.3 m from standing, which is what a real bound that long would rise under the game's gravity. In the air a dash is a stretch. Dash in the lab shows it.built
The hologram in the light passThe red and cyan fringe and the scanlines on bunnies only, as in the lab, and the glitch on hits. Bunnies mark their pixels as they draw, so walls and grass in front of them stay clean.built
TestsPoses on twos against smooth ones, ears over cover, and readability at 50 and 100 m.proposed

The lab's bunny is about 39,000 triangles and 24 bones, skinned on the graphics card. Its ten fur shells and the two rim passes draw the mesh twelve more times, about 500,000 triangles in all, which is why shells stay close. The grid the blobs are sampled on sets the triangle count, so bots wear three: the full mesh while a bunny stands taller than 320 pixels on screen, about 17,000 triangles down to 110 pixels, and about 7,600 below that, with no shells. A bunny off screen isn't posed or drawn. The Frame readout in the pause menu will give real numbers.

Sources

Marked "secondary" where the claim comes from a press report or third party rather than the developers or authors themselves.

Games

  • Guilty Gear Xrd, Junya Motomura, "GuiltyGearXrd's Art Style: The X Factor Between 2D and 3D", GDC 2015: transcript and slides
  • Overgrowth, David Rosen, "An Indie Approach to Procedural Animation", GDC 2014: GDC Vault
  • Fortnite, one hitbox for every skin (secondary, players' tests): GGRecon

Animation

Fur

  • Lengyel, Praun, Finkelstein and Hoppe, "Real-Time Fur over Arbitrary Surfaces", I3D 2001: project page
  • NVIDIA, fur with shells and fins, 2007: PDF