Last time I wrote about LOWBLOCK I said the prototype’s problem was resolution, not gameplay. The mechanics held up — passing, through balls, switching player — but at 16 pixels tall the players looked small and a bit lost on a modern screen, and worse from across a room on a TV. I ended that post saying it had led me down a path of 3D models and animation I hadn’t expected to need.
This is that path.

Buying the pack was the right call
I want to be fair to the art I started with, because I bought it on purpose. I had assumed 2D top-down football sprites would be easy to find, spent a while discovering they really aren’t, and settled on Chaser’s Gaming’s football pack because it had everything I needed and looked great. It wasn’t a placeholder I grabbed to get moving — it was the best option available, and it did its job. The prototype worked, and I could tell it was fun.
The trouble is that a 16 pixel player is a decision about screens as much as about style. It reads perfectly on a CRT at a sensible distance. On a 4K telly with two people on the sofa it’s just tiny. Everything I liked about the prototype was still there, and I couldn’t put it in front of anyone.
Scaling the art up doesn’t work — you get a bigger blurry player, not more detail. More detail means more art, and eleven-a-side needs a lot of it: running, sprinting, backpedalling, jockeying sideways, a sliding tackle, a settling first touch, a throw-in, a keeper going along his line and diving properly, each from eight or sixteen facings, in whatever kit each team turns out in. Thousands of individual drawings, and I can’t draw.
How the games I’m copying actually did it
I already knew where this was going, because it’s how a lot of late-90s games got their sprites: don’t draw the character, model him, then render him out to 2D frames. The sprite you see in the game is a photograph of a 3D scene, taken once, offline. It’s why those games could show more detail than anyone could reasonably hand-pixel, and it’s why they still look coherent — every frame is lit by the same lights and shot by the same camera.
That suits LOWBLOCK exactly. The game stays a 2D top-down sprite game. The camera doesn’t change, the simulation doesn’t change, nothing has to render 3D while you’re playing. All that changes is where the pictures come from.
So I got a rigged footballer, pointed a fixed top-down camera at him, and built something that spins him through every compass direction and screenshots each frame of a movement into a sheet. Running is captured at sixteen directions, because you’re watching it constantly and I wanted the turning to feel smooth. The brief one-off actions — shooting, passing, tackling — get eight, because the sheets have to fit inside the size limit a graphics card will accept as a single image, and that budget is real.


The model came with animations. That’s where it stalled: there weren’t many of them, and the ones there were weren’t good enough. A running cycle you stare at for ninety minutes has nowhere to hide.
Cory
Cory is our video and animation guy at work. I explained what I was doing and what I was missing, and he pointed me at the motion capture libraries where you can get proper clips — including a football set with the tackles, the keeper dives, the throw-in and the jogging cycles I’d been trying to live without.
That’s the whole unblock, and it’s worth saying plainly how much of it was just asking someone who does this for a living. I had the technique and the pipeline. What I didn’t have was any idea where good animation comes from, or what “good” even looks like when you’re comparing clips.

Where it got genuinely difficult
Naively, new animations should just play on the model. They didn’t. Dropping a clip onto him gave me a footballer tipped over sideways with his arms flung out — recognisably moving, in the sense that a car crash is recognisably driving.
The reason is that a skeleton has a resting pose, and two skeletons built by different people don’t agree on what “resting” means. Same bones, same names, same parents, but every one of them oriented differently — and differently again between the left and right sides of the same body, which is why there was no single correction I could apply to straighten him out.
What fixed it was to stop treating a clip as a set of positions and treat it as a set of changes: work out what each bone does relative to its own resting pose in the animation it came from, then apply that same change to my model’s resting pose. Motion, rather than posture. Once I’d done that, everything lined up, including the direction he faces — which I’d braced myself to fix by hand for every clip and never had to touch.
After that it was hours of unglamorous checking. Which second and a half of a tackle clip is the slide, rather than the leap into it that reads as a man diving in with both feet? He turns his body as he goes down, so his hips end up pointing somewhere other than his legs, and the sprite slides in sideways unless you rotate it back. Is a keeper’s sidestep going to his left or his right? Don’t trust the filename — play it and measure which way he actually travels. None of that is clever, and all of it is the difference between a pose that reads and one that looks broken.
Kits from one model
A team needs its own strip, and I’m not modelling a player per team. The model wears one fixed kit, so kits come from repainting his texture — which means knowing which part of it is shirt and which is bare arm. Colour alone won’t tell you, because a sleeve and the skin below it can be exactly as bright as each other.
The answer was to use the skeleton again: for every point on his texture, work out which bone owns it. Hips are shorts, upper arm is sleeve, lower leg is socks. That gives regions that follow his anatomy rather than guesswork, and each one then gets painted in the team’s colours while keeping the original’s light and shade, so the folds in the fabric survive. Stripes are worked out around his body rather than across a flat image, so they run vertically down a chest instead of wandering off round his ribs.
One model, then, and as many teams as I care to type in — the four at the top of this post are the same footballer, rendered four times.
Skin and hair wouldn’t fit that scheme, because they vary player to player rather than team to team, and a separate set of sheets for every combination of skin tone and hair colour runs into hundreds of megabytes of graphics memory for a single match. So those two are painted a neutral colour when the sheets are made, and coloured in per player as he’s drawn, with the shading recovered so nobody comes out looking like a flat sticker.
Where that leaves it
The players are about twice the size they were and carry roughly the detail I was after. The keeper dives flat as well as diagonally, defenders backpedal and jockey rather than only ever running forwards, tackles look like tackles, and every team turns out in its own strip with a change kit when the colours clash.
The part I’m quietly pleased about is that none of this reached the game itself. The simulation still works in its own abstract units and has never heard of a pixel; the swap from pixel art to rendered 3D touched the drawing code and nothing else. That was a rule I set on day one, mostly on instinct, and it’s the only reason a change this big was a fortnight rather than a rewrite.
Next is putting it in front of people, which was the point of all of it.
