Free · runs in your browser · files stay on your device

Impostor Generator: Bake an Octahedral Impostor

Drop a model, such as a tree, a rock or a building. The page renders it from 64 to 256 directions on an octahedral grid, packs the views into an albedo atlas and a normal + depth atlas, and shows the impostor next to the real model so you can orbit both. Download the PNG atlases, the JSON settings and a ready three.js shader. One quad, one draw call. Nothing is uploaded.

Loading the impostor generator...
Demo with a sample file, recorded in this tool.

How to bake an impostor

  1. 1

    Drop the model

    A .glb/.gltf, .obj (with its .mtl), .fbx, .stl or .ply. Cut-out leaves (alpha test) and vertex colours are kept. Or try the sample tree.

  2. 2

    Pick the layout

    Hemisphere for things only seen from above the ground (trees, rocks, buildings), full sphere for things seen from below too. Choose 8x8, 12x12 or 16x16 views and a 1K, 2K or 4K atlas.

  3. 3

    Bake and compare

    The views render on your GPU in a few seconds. Orbit the real model and the impostor side by side, look at the atlas, and switch the preview to albedo or normals.

  4. 4

    Download

    A ZIP with albedo.png, normal_depth.png, separate normal and depth PNGs, impostor.json and impostor-three.js, or each file on its own.

What the download holds

Two atlases with one cell per view direction, the settings that describe them, and a shader that draws them on one quad:

albedo.pngThe colour of the model from every view, one cell per direction, with transparent background. Colours are spread past the edges so mipmaps do not get dark halos.
normal_depth.pngRGB = the surface normal in the model's own space, A = depth (how far in front of or behind the centre the surface is). Used for lighting and to make the view blend sharper.
normal.png, depth.pngThe same data split into two plain images, for engines or shaders that want them apart.
impostor.jsonLayout (hemisphere or full), views per side, atlas and cell size, padding, centre and radius, and the source triangle and draw-call counts.
impostor-three.jsAn ES module for three.js (r150 or newer, WebGL2): loadImpostor('./') returns a mesh of 2 triangles that picks and blends the 3 nearest views and lights them.

The limit, plainly: an impostor is a picture, so it is meant for the far distance. Close up, the blend between views and the missing parallax show; use the real mesh or an LOD there. Animated models are baked in one pose.

Need a tree, rock or building first?

Make a 3D model from a text prompt or a photo with AI, then bring it here for its far-distance impostor. The AI generator uses credits; this tool does not.

More free 3D tools

Impostor generator FAQ

An impostor is a flat card that stands in for a 3D object far from the camera. Instead of drawing thousands of triangles, the engine draws one quad that turns to face the camera and shows a pre-rendered picture of the object from that direction. Done well, it looks like the real model at a distance for a tiny fraction of the cost, which is how big forests and crowds stay fast.
An octahedral impostor stores the object seen from many directions spread evenly over a sphere (or the upper half of one). The directions are laid out on a square grid by folding an octahedron flat, so the atlas has no wasted space and every direction has neighbours. At run time the shader finds the three views nearest to the camera and blends them, so the impostor turns smoothly instead of popping between angles.
Use LODs (simplified meshes) for the middle distance, where the shape still matters, and an impostor for the far distance, where the object is only a few hundred pixels tall. Trees, bushes, rocks and buildings in big outdoor scenes are the usual case. The LOD generator on this site makes the mesh levels; this page makes the last level.
Hemisphere puts all the views above the horizon, so each view is closer to the next and the result is sharper for the same atlas. Use it for anything that sits on the ground and is never seen from below. Full sphere covers every direction, for objects that float, fly or can be seen from underneath.
12x12 views on a 2048 px atlas is a good start: each view is about 170 px and the largest gap between views is shown after the bake. More views mean smoother turning but smaller cells; a bigger atlas keeps cells sharp but uses more memory. 8x8 on 1024 px suits small background props; 16x16 on 4096 px suits hero trees seen from closer up.
The PNG atlases and impostor.json are plain files, and the layout is the common octahedral one (hemisphere or full, views per side, padding). They can be read by an octahedral impostor shader in Unity, Unreal or Godot, but the shader there must use the same layout and the same normal and depth packing, which the JSON describes. The ready-made shader on this page is for three.js.
Kept: the colour from materials, textures and vertex colours, cut-outs from alpha test or alpha maps, and the surface normals and depth. Dropped: animation (the bake uses the model as it stands), lighting and shadows from your scene (the impostor is lit at run time instead), reflections, and see-through glass, which is rendered as cut-out.
Yes. The tool is free with no signup, and the files it makes, including impostor-three.js, are free for personal and commercial use with no attribution. Everything runs in your browser on your own GPU, so your model is never uploaded. Files up to 300 MB and 2 million triangles work.

Impostors are baked in your browser on your own GPU. Downloads are free for personal and commercial use, no attribution needed. Unreal Engine, Unity, Godot, Unigine, Blender and three.js are named only to describe compatibility; The3DAI is not affiliated with or endorsed by them.