Warpact Play free
Dev log · Art pipeline

Building low‑poly game‑ready 3D assets using AI models

Warpact dev · September 2026 · 6 min read
I posted on Hacker News recently about how I use AI models to create low‑poly, game‑ready assets (that thread), and a few people said they'd be interested in a tutorial — so I'm writing this post in response. The unit below is a real unit in Warpact — the full 3D model is 791 triangles.
Painted concept of the four-pod anti-air missile truck
1 · Concept
Single-color truck silhouette reference
2 · Silhouette
Raw truck mesh in wireframe, 2,552 triangles
3 · Image-to-3D · 2,552 triangles
Cleaned truck mesh in wireframe, 791 triangles
4 · Cleanup · 791 triangles
Final textured anti-air missile truck
5 · Final 3D model

When I started building Warpact, I experimented with a number of image‑to‑3D AI models, including ones that claim to produce low-poly, game-ready assets. None of them actually did what they claimed. If you don't need the details exactly right, or you can live with a high poly count, you can get away with using these models as they are. But we were building a cross-platform RTS, so we needed low-poly assets to keep the game performant on constrained Android devices.

After quite a bit of experimentation and several subscriptions later, I found a pipeline that works well.

1. Concept — generate wide, pick one

I start with an image generation model and create several different design concepts based on my vision for the unit. I give it an intended poly budget, colors and a detailed description of the unit, and ask for four concepts per image. I keep iterating until I find a concept I like, then pick it and iterate on it a few more times until I'm happy. Asking for multiple concepts per image saves me time and tokens compared to generating one concept per image.

Four anti-air missile truck candidates on one generated sheet Chosen four-pod launcher truck, painted concept
Four candidates, winner at bottom left · developed concept with four box pods and open launch mouths

2. Strip it to a silhouette

The final concept you generate will have a lot of detail: rivets, door handles, tire tread. If you pass that image directly to an image-to-3D generator, it will spend the poly budget on the wrong parts. For a low-poly asset you don't need every detail modelled in the mesh — much of it you can bake into the textures instead. So edit the concept down to a single-color, shadowless reference image. This typically takes me two to three image-edit passes. Some tips:

Painted concept of the four-pod anti-air missile truck Simplified truck with surface details flattened to painted marks Single-color truck silhouette reference with reduced shadows
Concept → details painted flat → single-color generator input

3. Image-to-3D with smart topology

Take the silhouette to Hunyuan 3D's low-poly generator — 3d.hunyuanglobal.com/lowpoly — and turn smart topology on. That is the setting that gives you a clean quad mesh instead of a dense shell, and it is where the stripped silhouette pays off: there is no surface detail left for the generator to spend faces on. My input came back as 1,443 faces, mostly quads — 2,552 triangles — reading as boxes, wedges and ten-sided wheels rather than a triangle soup. Download it and discard the PBR textures it ships with; all you want from this step is the geometry, which gets textured properly in step 5.

Raw smart topology mesh in wireframe, 2,552 triangles
Raw download: 2,552 triangles with bevel strips along the edges

I also tried having an agent hand-build this mesh from primitives against the same silhouette. Sometimes it works well, sometimes it doesn't — do what works for the particular shape.

4. Cut what the camera never sees

Once I have the mesh from Hunyuan, I ask an agent to clean it up in Blender, doing a few passes to cut unnecessary mesh where it isn't needed. For instance, the edges had chamfers I didn't need, as well as geometry on the bottom of the unit that would never be visible in game. For this step I used an internal tool I vibe-coded that lets me manipulate the mesh easily and annotate it to communicate my feedback to agents precisely. By the end of this step the triangle count had dropped by about 50%, hitting my target face count.

AI annotation proposing removal of chamfer strips: 477 faces, 908 triangles Hollowed underside after hidden-face deletion
AI bevel selection: 477 faces, 908 triangles · underside after hidden-face deletion
StageTriangles
Raw smart-topology mesh2,552
Hidden faces deleted (211 faces, by hand)2,222
Chamfer strips collapsed to sharp edges1,114
Sliver cleanup + pod bracket — final791
Cleaned truck mesh in wireframe, 791 triangles
The cleaned mesh: 791 triangles

5. One multi-view texture pass

Now that I had a clean mesh, I set the model up to be textured. I've had the best results here with Meshy's tools. Meshy's retexture tool accepts up to four reference views and keeps your UVs and geometry untouched. You can texture from a single image, but I find image models more precise and controllable, so I tend to have one generate multi-view images from the single final concept image, and then use those with Meshy's texture tool.

Front three-quarter texture reference generated from the concept Rear three-quarter texture reference generated from the concept
Two of the multi-view texture references generated from the final concept

Then I upload the mesh to Meshy and texture it with their texture tool and the multi-view images. The texture comes back on your unchanged 791-triangle mesh. Meshy also allows free retries on a texture, so if you don't get the right result you can retry up to 12 times on a paid plan. I also set the textures to 8K — the highest resolution option — so that all the detail gets included.

Final textured anti-air missile truck
The textured Syndicate anti-air missile truck: 791 triangles

Finally, I download the textured model and have an AI agent optimize it (downscaling the textures and so on) for in-game use. The downloaded model is fairly large (~50 MB) because of the 8K textures, so the agent downscales and optimizes it for the game.

The finished 791-triangle missile truck in Warpact, firing two missiles at an incoming jet
The finished asset in the game: the 791-triangle truck firing on an incoming jet

The tools I use in the pipeline: Codex CLI + built-in image generation (concepts, silhouette, texture refs, model optimization & cleanup) · Hunyuan 3D smart topology (mesh) · Blender + a custom AI editing UI (for cleanup) · Meshy multi-view retexture (for texture).