3D Model to Sprite Sheet Generator

To turn a 3D model into sprites, drop a GLB or FBX below, pick 4, 8 or 16 directions, a camera angle (side, isometric or top-down), an animation clip and how many frames it gets. The tool renders every direction and frame with a transparent background and gives you one PNG sprite sheet (rows = directions, columns = frames), a JSON frame map and a ZIP of single frames. It is free and runs in your browser.

Free - no signup - your model stays in your browser

Loading the tool...

Need a character? Generate one with AI, then turn it into sprites

Describe a character or upload concept art and AI makes a 3D model. The generated model has no skeleton, so rig and animate it first (Mixamo is free) for walk cycles, or drop it here as is for one pose in every direction.

How to make 8 direction sprites from a 3D model

  1. 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. 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. 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 angleBest 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 degIsometric 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.

Make the model first

Frequently Asked Questions

GLB (binary glTF) and FBX, including Mixamo FBX files with animations. Draco and meshopt compressed GLB files work. If an FBX keeps its textures as separate image files, drop them together with the FBX; textures that are not found are left out and the page lists their names.
Pick 8 directions. The tool turns the model in 45 degree steps in front of a fixed camera and fixed lights and renders every step, so you get rows S, SE, E, NE, N, NW, W and SW. Choose 4 for S, E, N and W only, or 16 for 22.5 degree steps for smoother turning, as in Doom-style games.
Yes. Pick any clip in the model and the number of frames (1 to 32); the frames are spread evenly over the loop and become the columns of the sheet. "In place" removes root motion so the character walks on the spot. A model with no clips gives one pose per direction.
Frames can be 32 to 512 px square. Use the size your game draws the character at: 32 or 64 px for pixel art, 128 or 256 px for HD 2D games. In Smooth mode the tool renders 2 to 4 times larger and averages it down, which gives clean anti-aliased edges. Sheets are capped at 8192 px a side and 16 megapixels.
Yes. Everything outside the model is fully transparent (alpha 0), and the PNG keeps the alpha channel. In Smooth mode the edges are softly anti-aliased; in Pixel art mode every pixel is either solid or fully transparent.
It renders at a low resolution with no smoothing and scales up with nearest-neighbour. With a colour limit, it builds one palette of 4 to 64 colours for the whole sheet (median cut) and snaps every pixel to it, so the sheet really uses no more colours than you picked.
A TexturePacker-style JSON hash: every frame name with its x, y, width and height on the sheet, the sheet size and image name, an animations list per direction, the frame rate, the camera angle and the direction names. Phaser and PixiJS read it as is; other engines can use the grid size instead.
No. The model is read and rendered in your browser with WebGL, so it never leaves your device. Files up to 100 MB work; very heavy models and big sheets take longer to render on slow devices.