How to make 8 direction sprites from a 3D model
- 1
Add your model
Drop a GLB or FBX (Mixamo FBX works), or try the sample robot. For an FBX whose textures are separate files, drop the images with it.
- 2
Set the shot
Choose 4, 8 or 16 directions, the camera angle, the clip, frames per clip and the frame size. Turn on Pixel art for hard edges and a small colour palette.
- 3
Download the sheet
Save the transparent PNG sheet with its JSON frame map, or a ZIP with every frame as its own PNG, ready for Godot, Unity, Phaser or PixiJS.
Which camera angle to pick
| Camera angle | Best for |
|---|---|
| Side view (0 deg) | Platformers, fighting games and side-scrollers. Often 2 or 4 directions are enough. |
| Isometric 2:1 pixel (26.57 deg) | Pixel-art isometric games. Flat ground lines run 2 pixels across for 1 pixel up, the "isometric" most pixel art uses. |
| Isometric 30 deg | Isometric RPGs and strategy games rendered from 3D, and a common default in sprite tools. |
| True isometric (35.26 deg) | Equal foreshortening on all three axes, as in engineering drawings and some tile engines. |
| Top-down RPG (45 deg) | Classic top-down action RPGs with 8 directions, where you still see the front of the character. |
| Straight down (90 deg) | Twin-stick shooters, vehicles and top-down tiles, where only the outline and the top matter. |
How the sheet is laid out
Each row is one direction and each column is one frame of the clip. Row S shows the model facing you, then the model turns in equal steps: with 8 directions the rows are S, SE, E, NE, N, NW, W and SW, 45 degrees apart. E faces the right of the screen and N shows the back. If row S shows the back or the side of your model, change "Model front faces".
The camera is orthographic, so there is no perspective, and it is fitted once for the whole clip and every direction. The model keeps the same size and position in every frame, which stops sprites from jittering in a game. "In place" cancels the sideways travel of the root bone, so a walk cycle with root motion stays in the middle of its frame.
Frames are spread evenly over the clip as a loop: 8 frames of a 1 second walk are taken at 0, 0.125, 0.25 seconds and so on, and the JSON frame rate (8 fps here) plays it back at its real speed. With padding, every frame gets empty pixels around it so neighbours never bleed into each other when the sheet is filtered.
Pixel art sprites from 3D
Pixel art mode renders the model at low resolution with no smoothing (the frame size divided by the pixel size), then scales it up with nearest-neighbour, so every pixel stays a hard square. Edges are either fully solid or fully transparent, with no soft alpha.
The colour limit builds one palette of 4 to 64 colours for the whole sheet with median cut, then snaps every pixel to its nearest palette colour. One shared palette keeps the colours the same from frame to frame and direction to direction. Flat colour lighting gives a cleaner cel look; shaded lighting keeps a key light from the upper left.
Using the sprite sheet in a game engine
The JSON follows the TexturePacker "JSON (Hash)" layout: a frames object with each frame rectangle, plus meta with the image name and size. Phaser 3 loads it with this.load.atlas, and PixiJS reads it as a spritesheet, including the animations list (one animation per direction).
In Godot 4, add the PNG to a SpriteFrames resource with "Add Frames from Sprite Sheet" and set the grid to the number of columns (frames) and rows (directions). In Unity, set the texture to Sprite (2D and UI), Multiple, and slice it in the Sprite Editor with Grid By Cell Size at the frame size (use the padding as offset and twice the padding as the gap). The ZIP has every frame as its own PNG for engines that prefer single images.