Polygon and triangle budgets
How many triangles an asset or a frame can afford, with dozens of published examples from real games, platforms and asset types, and a method for setting a budget yourself.
A triangle budget is the number of triangles you allow an asset, or a whole frame, to use so the game hits its target frame rate on its target hardware. It is a planning number, not a fixed rule: the full budget also covers draw calls, materials, texture memory, overdraw and LODs, and on engines with virtualised geometry the triangle part changes a lot.
This page explains what is being counted and why, then collects more than a hundred published numbers from real games, platforms and asset types. It ends with a method for setting a budget yourself.

#Triangles versus polygons
Your modeling app shows quads and n-gons, but engines count triangles. Every quad or n-gon is split into triangles on export or import (see triangulation). That is why most technical numbers you will meet are stated in triangles:
- Meta's headset budgets are given as triangles per frame (Meta Horizon Developers: Device Optimization Comparison).
- Unreal's LOD tools reduce meshes by "Percent Triangles" (Unreal Engine Documentation: Static Mesh Automatic LOD Generation).
- Blender's Decimate modifier calculates its Ratio using triangles, so a quad mesh can keep more faces than the ratio suggests (Blender Manual: Decimate Modifier).
- Nanite, Unreal's virtualised geometry system, stores meshes as clusters of 128 triangles (SIGGRAPH 2021: Nanite: A Deep Dive).
- VRChat's documentation now says "Triangles" and notes that the word "Polygons" was used incorrectly in the past (VRChat Creator Documentation: Performance Ranks).
A quick conversion: a clean quad mesh has about twice as many triangles as faces. A "2,000 poly" quad prop is roughly a 4,000-triangle asset. Always ask which unit someone means.
Press articles and studio marketing usually say "polygons". Often nobody knows whether that means triangles, quads, the in-game LOD0 or the authoring model. The tables below keep the unit exactly as each source states it.
#Other limits besides triangles
Triangles are the easiest number to read in a viewport, so they are often blamed for performance problems they did not cause. In practice a scene usually hits other limits first.
Draw calls. Each object the game renders costs the CPU a request to the GPU, and Meta notes this cost is "largely independent of the complexity of the object being rendered" (Meta Horizon Developers: WebXR Performance Optimization Workflow). Meta's own example: submitting 1,000 single triangles as separate draw calls would likely drop a Quest app below 72 frames per second (Meta Horizon Developers: WebXR Performance Optimization Workflow). A thousand triangles is a small load, while a thousand draw calls is a large one. See draw calls.
Materials. Objects can be combined into one call when they share a material (Meta Horizon Developers: WebXR Performance Optimization Workflow). Every extra material on a prop is something that cannot be batched with its neighbours. This is a big reason environment artists use trim sheets, texture atlases and master materials and instances.
Texture memory. A low-poly mesh with a 4K normal map can be larger on disk than a dense mesh. Epic measured a 19,066-triangle mesh with 4K base colour and normal maps at 31.04 MB, against 27.83 MB for a 1.5-million-triangle Nanite version using a shared detail normal map (Unreal Engine Documentation: Nanite Technical Details). See texture formats, compression and mipmaps.
Overdraw. Pixels drawn more than once cost GPU time. Epic notes that "smaller objects that are closely stacked together create more overdraw than larger ones" (Unreal Engine Documentation: Nanite Technical Details), and Fortnite's team found that the empty, alpha-masked parts of foliage cards add overdraw (Unreal Engine tech blog: Bringing Nanite to Fortnite Battle Royale in…). Google's Android guide adds that triangles smaller than about 10 pixels in area are inefficient on mobile GPUs (Android Developers: Geometry). See overdraw and foliage and vegetation.
LODs and shadows. Distant objects should switch to cheaper versions; see level of detail. Shadows have a cost of their own: on Fortnite, large non-Nanite meshes rendered shadows into Virtual Shadow Maps more slowly than equivalent Nanite meshes (Unreal Engine tech blog: Bringing Nanite to Fortnite Battle Royale in…).
Instances. Even with Nanite, instance data has a price: Brian Karis gives 457 MB for the transforms of 10 million instances alone (SIGGRAPH 2021: Nanite: A Deep Dive).
#Budgets with Nanite
When Epic revealed Unreal Engine 5 in 2020, it promised "there are no more polygon count budgets, polygon memory budgets, or draw count budgets" (Unreal Engine blog: A first look at Unreal Engine 5). Nanite splits meshes into clusters and streams in only the detail the screen can show, in its own rendering pass that bypasses traditional draw calls (Unreal Engine Documentation: Nanite Virtualized Geometry). The current documentation is more careful. It says "practical limits still remain" for instance counts, triangles per mesh, material complexity, output resolution and performance, and that these must be measured on your own content and hardware (Unreal Engine Documentation: Nanite Virtualized Geometry).
Nanite also does not run everywhere. It needs DirectX 12 with Shader Model 6 class hardware, and it does not support stereo VR rendering or forward rendering (Unreal Engine Documentation: Nanite Virtualized Geometry). If you build for mobile, a standalone headset or any platform without Nanite, classic budgets apply in full. See virtualised geometry.
#Published examples
The tables in this section only contain numbers from a published source. Read three things before you compare two rows:
- Unit. Triangles, "polygons" or vertices, exactly as the source says. "Polygons" in a press quote is ambiguous.
- Scope. A per-frame budget, a platform limit, one LOD0 asset and a marketing headline are different kinds of number.
- Source quality. Rows marked (compiled) come from a long-running Polycount forum thread where members collected figures that artists posted on ArtStation and elsewhere (Polycount forum: Polycounts in next gen games thread!). They are real reported numbers, but this handbook could not open each original post, so treat them as second-hand.
Unless a row says otherwise, assume the number is the highest-detail version (LOD0) the player sees, not the sculpt.
#1. Platform and frame-level budgets
| Platform / project | Number | Unit as stated | What it measures | Source |
|---|---|---|---|---|
| Meta Quest 2 | under 750K; under 100 draw calls | triangles | Recommended per frame, 72 Hz target | (Meta Horizon Developers) |
| Meta Quest 3 | under 1.5M; under 200 draw calls | triangles | Recommended per frame; 90 Hz recommended | (Meta Horizon Developers) |
| PC VR (Rift, PC SDK) | 1–2M; 500–1,000 draw calls | triangles or vertices | Maximum per frame, older guidance | (Meta Horizon Developers) |
| Apple Vision Pro, immersive scene | no more than 500,000 | triangles | Apple's general guideline for the whole scene | (WWDC24) |
| Apple Vision Pro, shared space | 250,000 | triangles | Apps running alongside other apps | (WWDC24) |
| Apple Vision Pro, "safe target" | around 100,000 in view | triangles | Leaves "plenty of headroom" | (WWDC24) |
| Android phone, Google's Armies demo | about 210,000 per frame at about 30 fps | triangles | A Unity demo with hundreds of animated soldiers | (Android Developers) |
| Android phone, any single mesh | below 65,535 | vertices | 16-bit index limit guaranteed on all mobile GPUs | (Android Developers) |
| iPad 2 (2011) | around 100,000 | vertices | Where driver costs "become apparent" with complex shaders | (Unity Documentation) |
| Roblox | 20,000 per individual mesh | triangles | Hard limit; avatar items have separate budgets | (Roblox Creator Hub) |
| Fortnite / UEFN | 500+ with one LOD flagged; LOD0 over 30,000 warns | vertices | Asset validator thresholds | (Fortnite Documentation) |
| Microsoft Flight Simulator 2024 | 1,500,000 at LOD0 | triangles | Maximum for a whole aircraft, including cockpit, cabin and livery | (Microsoft Flight Simulator 2024 SDK Documentation) |
| PS5, UE5 "Lumen in the Land of Nanite" | about 1 billion source, about 20M drawn per frame | triangles | 2020 Nanite tech demo | (CG Channel) |
| Same demo, Karis's analysis | about 25M rasterised; 896,322 instances before culling, 3,668 after | triangles | One frame of the demo | (SIGGRAPH 2021) |
| Same demo, standard UE4 path | over 1 billion | triangles | What the same frame would have cost without Nanite | (SIGGRAPH 2021) |
| PS5, Witcher 4 UE5 tech demo (2025) | about 500k tree instances; 60 fps | instances | Nanite Foliage forest; trees of 1–10M polygons each | (Unreal Engine Documentation; PlayStation.Blog) |
| The Matrix Awakens (UE5, 2021) | 7 million instanced assets; 7,000 buildings | instances | A city of "sixteen kilometers square" streamed with Nanite | (Unreal Engine blog) |
| Street Fighter V (compiled) | 700,000–900,000 total; stage 400,000–500,000 | polygons | Whole scene at 60 fps | (Polycount forum) |
| Nier: Automata (compiled) | 2 million; 500 draw calls | polygons | Environment budget | (Polycount forum) |
| The Division (compiled) | 5–6 million | triangles | Scene at 60 fps | (Polycount forum) |
What the table shows. Frame budgets span more than two orders of magnitude, from roughly 100,000 triangles on a headset you wear to tens of millions drawn per frame on a console running Nanite. The headset and mobile numbers are close to each other: Vision Pro, Quest 2 and Google's phone demo all sit between 200,000 and 750,000 triangles. Fighting games and arena scenes can spend more per object because the camera sees little else. Nanite projects stop counting triangles per frame and start counting instances, which is why the Witcher 4 and Matrix numbers are instance counts. Even those vary by report: Epic's documentation gives about 500,000 tree instances for the Witcher 4 forest (Unreal Engine Documentation: Nanite Foliage), while a 2026 report on Nvidia's path-traced version describes "approximately 1 million trees" (TechSpot: Nvidia shows The Witcher 4 forest demo…).
For the Nintendo Switch and last-generation consoles (PlayStation 4, Xbox One), no official per-frame triangle budget could be verified. Treat any single figure quoted for these platforms with suspicion, and use the method in How to set a budget yourself.
#2. Examples by game type
| Game type | Game / project | Asset | Number | Unit | Context | Source |
|---|---|---|---|---|---|---|
| Mobile | Google Armies demo | Soldier | about 360 | triangles | Hundreds on screen at once | (Android Developers) |
| Mobile | Google Armies demo | Cannon tower | about 3,000 | triangles | Fills a large part of the screen | (Android Developers) |
| Mobile / VR | Google CircuitVR demo | Robot | 11,000 | triangles | Only one object on screen, so it gets more | (Android Developers) |
| Mobile (legacy guidance) | Unity manual | Character mesh | 300–1,500 | polygons | "will give good results" on mobile | (Unity Documentation) |
| Desktop (legacy guidance) | Unity manual | Character mesh | 1,500–4,000 | polygons | "ideal range" for desktop | (Unity Documentation) |
| Social VR, standalone | VRChat on Quest / Android | Avatar, "Good" rank | 10,000 | triangles | Also 1 material slot, 1 skinned mesh | (VRChat Creator Documentation) |
| Social VR, PC | VRChat on PC | Avatar, "Excellent" rank | 32,000 | triangles | 4 material slots | (VRChat Creator Documentation) |
| User-generated | Roblox | Any single mesh | 20,000 max | triangles | Upload limit | (Roblox Creator Hub) |
| Stylised, UGC | Fortnite / UEFN | Large complex prop | 9,000 max at LOD0 | "poly count" | Epic's Fortnite-ready table | (Fortnite Documentation) |
| Stylised | Fortnite (compiled) | Character | 23,041 at LOD0 | triangles | (Polycount forum) | |
| Stylised | Fortnite Chapter 4 | Tree, non-Nanite / Nanite | about 10–20k / 300–500k | vertices | Two versions of the same tree | (Unreal Engine tech blog) |
| Stylised | Crash Bandicoot N. Sane Trilogy (compiled) | Critters | 17,264–24,678 | triangles | (Polycount forum) | |
| Open world | Horizon Zero Dawn | Thunderjaw (machine creature) | 550,000 | polygons | Director Mathijs de Jonge, 2015 | (Wccftech) |
| Open world | Mafia III / Definitive Edition | One building | about 20,000–30,000 | triangles | Lead environment artist | (mafia.2k.com) |
| Open world | Mafia: The Old Country | One building | more than 1,000,000 | triangles | Same studio, UE5 | (mafia.2k.com) |
| Open world | Witcher 4 UE5 tech demo | Tree | roughly 1–10 million | polygons | Nanite Foliage; about 500k instances | (Unreal Engine Documentation) |
| Linear AAA | Killzone Shadow Fall (PS4) | Character, closest LOD | about 40,000 | polygons | 7 LODs down to 150 | (Guerrilla Games) |
| Linear AAA | Killzone 3 (PS3) | Character | 10,000 | polygons | 3 LODs, 1K textures | (Guerrilla Games) |
| Linear AAA | The Order: 1886 (compiled) | Character | 100,000 | polygons | (Polycount forum) | |
| Linear AAA | Resident Evil 2 remake (compiled) | Character | about 137,000 | triangles | Hair alone about 30,600 | (Polycount forum) |
| Linear AAA | Final Fantasy VII Rebirth | Cloud (battle model) | about 220,000 | polygons | Lead character artist | (PlayStation.Blog) |
| Fighting | Street Fighter V (compiled) | Character | 80,000 | polygons | At 60 fps | (Polycount forum) |
| Racing, simulation | Gran Turismo 7 | Car | 500,000 | polygons | Official Gran Turismo account | (GTPlanet) |
| Racing, simulation | Forza Motorsport 4 | Car | 800,000 | polygons | Guinness record, 2011 | (Guinness World Records) |
| Racing, simulation | iRacing | Dallara car / Skip Barber car | 26,000 / about 10,000 | polygons | Art lead, 2010; source models about 500,000 | (iRacing.com) |
| Racing, arcade | Need for Speed: The Run | Car | about 25,000 | triangles | "including the four wheels and driver" | (Speedhunters) |
| Racing, open world | Forza Horizon 3 (compiled) | 2017 Acura NSX | 217,000 | triangles | (Polycount forum) | |
| Flight simulation | Microsoft Flight Simulator 2024 | Whole aircraft | up to 1,500,000 | triangles | "strive to be well below" | (Microsoft Flight Simulator 2024 SDK Documentation) |
| Space simulation | Star Citizen | Idris frigate | 3,322,169 | polygons | Guinness record, 2016 | (Guinness World Records) |
What the table shows. Game type changes the budget mainly through how many things share the screen. Google's two demos show this within one source: a lone robot gets 11,000 triangles, a soldier in a crowd gets 360 (Android Developers: Geometry). Platforms built for user content (Roblox, VRChat, UEFN) publish hard numbers because they cannot review every upload by hand. Racing and flight games spend the most on a single object because the vehicle fills the screen for the whole session. The open-world rows show the largest change: a Mafia building grew from about 25,000 to over a million triangles once the studio moved to Nanite (mafia.2k.com: The Technology Bringing Mafia: The Old…).
#3. Examples by asset type
| Asset type | Game / project | Asset | Number | Unit | LOD / context | Source |
|---|---|---|---|---|---|---|
| Small prop | Fortnite / UEFN | Simple / complex small object | 400 / 1,200 max | "poly count" | LOD0 maximum | (Fortnite Documentation) |
| Small prop | Fortnite / UEFN | Small prop | 900 at LOD0, 60 at LOD3 | vertices | Recommended | (Fortnite Documentation) |
| Small prop | Rainbow Six Siege (compiled) | Magazine | 1,000 | triangles | (Polycount forum) | |
| Small prop | Vampyr (compiled) | Wheelbarrow | 3,140 | triangles | (Polycount forum) | |
| Small prop | This page's worked example | Barrel, 0.9 m | 332 | triangles | LOD0 at 3 m, 1080p | see below |
| Medium prop | Fortnite / UEFN | Simple / complex medium object | 900 / 4,000 max | "poly count" | LOD0 maximum | (Fortnite Documentation) |
| Medium prop | Vampyr (compiled) | Bookcase / bed / cash till | 6,531 / 11,218 / 12,316 | triangles | (Polycount forum) | |
| Hero / large prop | Vampyr (compiled) | Grand piano | 23,449 | triangles | (Polycount forum) | |
| Hero / large prop | Rise of the Tomb Raider (compiled) | Ballista | 30,000 | triangles | (Polycount forum) | |
| Hero / large prop | Mafia III (compiled) | Environment props | 1,404–41,766 | triangles | Range across a portfolio | (Polycount forum) |
| Modular piece | Thief (2014) (compiled) | Wall module | about 850 | triangles | (Polycount forum) | |
| Modular piece | Assassin's Creed Origins (compiled) | Stone module, 6 × 6 m | about 4,000 | triangles | (Polycount forum) | |
| Building | Mafia III (compiled) | Building | 37,718 | triangles | (Polycount forum) | |
| Building | Mafia III vs Mafia: The Old Country | One building | 20,000–30,000 vs over 1,000,000 | triangles | Studio statement | (mafia.2k.com) |
| Building | The Matrix Awakens | 7,000 buildings | "thousands of modular pieces" | — | Nanite city | (Unreal Engine blog) |
| Rock | Epic's Valley of the Ancient sample | Rock mesh, low poly with 4 LODs | 19,066 | triangles | Nanite off; 1.34 MB package | (Unreal Engine Documentation) |
| Rock | Same sample | Same rock, high poly | 1,545,338 | triangles | Nanite on; 19.64 MB package | (Unreal Engine Documentation) |
| Rock | Fortnite / UEFN | Small / medium / large rock | 600 / 1,200 / 2,500 | vertices | LOD0 recommended | (Fortnite Documentation) |
| Statue | UE5 demo (2020) | Statue sculpt | 33 million | triangles | Imported from ZBrush, instanced 500 times | (CG Channel) |
| Tree | Fortnite / UEFN | Small / medium / large tree | 1,700 / 5,000 / 15,000 | vertices | LOD0; LOD3 is 150 / 1,200 / 2,000 | (Fortnite Documentation) |
| Tree | Fortnite Chapter 4 | Tree, non-Nanite / Nanite | about 10–20k / 300–500k | vertices | (Unreal Engine tech blog) | |
| Tree | Witcher 4 UE5 tech demo | Forest trees | roughly 1–10 million each | polygons | Nanite Foliage | (Unreal Engine Documentation) |
| Tree | Epic's Nanite Foliage example | One tree | 41 million | triangles | 12 unique parts, 2,160 part instances | (Unreal Engine Documentation) |
| Vehicle | Need for Speed: The Run | Car | about 25,000 | triangles | With wheels and driver | (Speedhunters) |
| Vehicle | Mafia III (compiled) | Sports car | 26,006 | triangles | (Polycount forum) | |
| Vehicle | Call of Duty: Black Ops III (compiled) | Futuristic car / VTOL | 29,150 / 67,764 | triangles | (Polycount forum) | |
| Vehicle | DRIVECLUB (compiled) | Car | 250,000 | polygons | (Polycount forum) | |
| Vehicle | Fortnite / UEFN | Small / medium / large vehicle | 1,200 / 6,000 / 9,000 | vertices | LOD0 recommended | (Fortnite Documentation) |
| Vehicle | Star Citizen | Small fighter / largest carriers | about 300,000 / about 7 million | polygons | Press report, 2013 | (GameWatcher) |
| Weapon | Rainbow Six Siege (compiled) | HK417 rifle | 15,000 | triangles | (Polycount forum) | |
| Weapon | The Division (compiled) | FN FNX-45 pistol | 15,000 | triangles | (Polycount forum) | |
| Weapon | Ghost Recon Wildlands (compiled) | QBB-95 machine gun | 13,421 | triangles | (Polycount forum) | |
| Weapon | Fortnite (compiled) | Stylised mailbox weapon | 7,404 | triangles | (Polycount forum) | |
| Weapon | Final Fantasy VII Rebirth | Buster Sword | about 8,000 | polygons | 50–100 in the 1997 battle model | (Siliconera) |
| Creature | Horizon Zero Dawn | Thunderjaw | 550,000 | polygons | Very large machine enemy | (Wccftech) |
| Character (comparison) | Killzone Shadow Fall | Character LOD chain | 40,000 → 20,000 → 10,000 → 3,200 → 800 → 350 → 150 | polygons | Seven LODs by distance | (Guerrilla Games) |
| Character (comparison) | Final Fantasy VII Remake | Cloud | about 110,000 | polygons | Hair is about half the model | (PlayStation.Blog) |
| Character (comparison) | Horizon Zero Dawn (compiled) | Aloy's hair | 100,000 | triangles | (Polycount forum) | |
| Character (comparison) | Metal Gear Solid 4 | Most characters, incl. face | about 5,000–10,000 | polygons | Face sculpt for baking about 500,000 | (ModDB) |
Unreal's LOD Group presets show how Epic expects categories to differ. These are LOD settings, not triangle targets (Unreal Engine Documentation: Static Mesh Automatic LOD Generation).
| Unreal LOD Group | Number of LODs | Triangles kept per LOD step | PixelError | Source |
|---|---|---|---|---|
| SmallProp, LargeProp, Deco | 4 | 50% | 10 | (Unreal Engine Documentation) |
| LevelArchitecture | 4 | 50% | 12 (plus SilhouetteImportance 4) | (Unreal Engine Documentation) |
| HighDetail | 6 | 50% | 6 | (Unreal Engine Documentation) |
| Vista, Foliage | 1 | n/a | n/a | (Unreal Engine Documentation) |
What the tables show. Without Nanite, shipped AAA assets cluster in recognisable bands. Modular pieces sit in the hundreds to low thousands of triangles, because they repeat everywhere (modular kits). Furniture and medium props sit around 5,000–12,000. Hero props, weapons and arcade cars land around 13,000–30,000. First-person weapons get a lot for their size because they fill the screen the whole time. Simulation vehicles, creatures and Nanite assets jump by one to two orders of magnitude. Epic's UEFN table is much tighter than any AAA example because it targets phones as well as consoles. Unreal also gives architecture extra weight on silhouette, and that "high detail" assets get more LOD steps and a tighter error. See also hero assets, props and filler and modeling rocks, trees and terrain pieces.
#4. Historical growth
| Era / platform | Game | Asset | Number | Unit | Source |
|---|---|---|---|---|---|
| PS1 (1996) | Crash Bandicoot | Crash | 512 | polygons | (Wikipedia; All Things Andy Gavin) |
| PS1 (1996) | Crash Bandicoot | Whole view | about 800 (about 1,300 in Crash 2 and 3) | polygons | (All Things Andy Gavin) |
| PS1 (1996) | Tomb Raider | Lara Croft | 350 | polygons | (Game Informer) |
| PS1 (1997) | Final Fantasy VII | Cloud, battle model | about 900 | polygons | (PlayStation.Blog) |
| PS1 (1997) | Gran Turismo | Car | about 300 | polygons | (TheSixthAxis; GTPlanet) |
| PC (2003) | NASCAR Racing 2003 | Car | about 1,000 | polygons | (iRacing.com) |
| PS2 (2001) | Metal Gear Solid 2 | Snake | over 4,000 | polygons | (GamingBolt) |
| PC (2004) | Half-Life 2 | Alyx | 6,000 | polygons | (GamingBolt) |
| PS2 (2003) | Tomb Raider: The Angel of Darkness | Lara Croft | over 5,000 | polygons | (Game Informer) |
| PS2 | Gran Turismo 3 and 4 | Car | about 3,000 | polygons | (GTPlanet) |
| PS3 / Xbox 360 (2008) | Tomb Raider: Underworld | Lara Croft | 32,000 | polygons | (Game Informer) |
| PS3 (2008) | Metal Gear Solid 4 | Most characters | about 5,000–10,000 | polygons | (ModDB) |
| PS3 (2008) | Metal Gear Solid 4 | Background, per load | 150,000–200,000 | polygons | (ModDB) |
| Xbox 360 (2009) | Forza Motorsport 3 | Car | "10 times as many" as Forza 2 | polygons | (GameSpot) |
| PS3 (2010) | Gran Turismo 5 | Car | about 500,000 | polygons | (TheSixthAxis) |
| PC (2010) | iRacing | Dallara | 26,000 | polygons | (iRacing.com) |
| PS3 (2011) | Killzone 3 | Character | 10,000 | polygons | (Guerrilla Games) |
| Xbox 360 (2011) | Forza Motorsport 4 | Car | 800,000 | polygons | (Guinness World Records) |
| PS4 (2013) | Killzone Shadow Fall | Character, closest LOD | about 40,000 | polygons | (Guerrilla Games) |
| PS4 era (2016) | Mafia III | Building | about 20,000–30,000 | triangles | (mafia.2k.com) |
| PS4 (2020) | Final Fantasy VII Remake | Cloud | about 110,000 | polygons | (PlayStation.Blog) |
| PS5 (2022) | Gran Turismo 7 | Car | 500,000 | polygons | (GTPlanet) |
| PS5 (2024) | Final Fantasy VII Rebirth | Cloud | about 220,000 | polygons | (PlayStation.Blog) |
| UE5 / Nanite (2025) | Mafia: The Old Country | Building | over 1,000,000 | triangles | (mafia.2k.com) |
| UE5 / Nanite (2025) | Witcher 4 tech demo | Tree | roughly 1–10 million | polygons | (Unreal Engine Documentation) |
What the table shows. A hero character grew from a few hundred polygons on the PS1 to over 200,000 on the PS5. That is roughly a 250-fold increase for Cloud alone across 27 years (PlayStation.Blog: Final Fantasy VII Rebirth: The polygonal…). The biggest single jump in each series tends to come with normal-map baking and a new console, not steady yearly growth: Killzone's characters quadrupled between PS3 and PS4 (Guerrilla Games: Killzone Shadow Fall Demo Postmortem). Since Nanite, environment assets are growing faster than characters. A whole PS1 view in Crash Bandicoot held about 800 polygons (All Things Andy Gavin: Making Crash Bandicoot – part 3); one Quest 3 frame is asked to stay under 1.5 million triangles (Meta Horizon Developers: Device Optimization Comparison).
#Rule-of-thumb tables (unsourced, use with care)
Many blogs publish per-asset ranges. The two below are typical. Neither cites a source, and they disagree, so use them only as a sanity check against the sourced tables above.
| Asset type | Mobile | PC / console | VR | Source |
|---|---|---|---|---|
| Small prop | 300–2K | 2K–10K | 500–5K | (Tripo blog) |
| Large prop | 2K–8K | 10K–30K | 5K–15K | (Tripo blog) |
| Environment asset | 1K–10K | 5K–50K | 2K–20K | (Tripo blog) |
| NPC character | 5K–15K | 20K–50K | 10K–30K | (Tripo blog) |
| Hero character | 15K–30K | 50K–100K+ | 25K–60K | (Tripo blog) |
| Prop | 300–1,500 | 1,000–10,000 | "keep low" | (Sloyd glossary) |
| Character | 3,000–10,000 | 20,000–80,000 | — | (Sloyd glossary) |
Forum advice varies just as much. One Unity forum user in 2014 suggested keeping main characters under 10,000 polygons on mobile and between 70,000 and 120,000 on PC, Xbox One and PS4 (Unity Discussions: Poly count for character?). Note "polygons", not triangles. At the far extreme, the Polycount Low Poly Challenge in 2010 limited a player model, vehicle or whole scene to 1,024 triangles each as a deliberate art constraint (Polycount forum: LPC vol2 #4 - TRON).
#How to set a budget yourself
You can work out a defensible budget from three things: how big the asset gets on screen, how many such assets are visible at once, and the platform's frame budget.
#Step 1: find the screen size
Unity defines LOD transitions as the object's height "as a percentage of the screen height" (Unity Documentation: LOD Group). You can estimate it with basic trigonometry. With a vertical field of view θ, the visible height at distance d is 2 · d · tan(θ/2).
Take a barrel 0.9 m tall with a 0.3 m radius, a 60° vertical field of view and a 1080-pixel-tall screen (see cameras, lenses and field of view).
- At 3 m, the visible height is 2 × 3 × tan 30° ≈ 3.46 m.
- That gives 1080 / 3.46 ≈ 312 pixels per metre.
- The barrel is about 281 px tall (26% of screen height), and its radius is about 94 px.
#Step 2: spend triangles where the silhouette needs them
A round object made of n straight sides deviates from a true circle by s = r · (1 − cos(180°/n)). Keep that error under about one pixel and the player will not see facets.
| Sides | Error at 94 px radius |
|---|---|
| 12 | about 3.2 px |
| 16 | about 1.8 px |
| 24 | about 0.8 px |
| 32 | about 0.45 px |
So 24 sides are enough at 3 m. With six height segments for the bulge and hoops and two 24-sided caps (22 triangles each), LOD0 is 6 × 48 + 44 = 332 triangles. Flat areas, such as the lid, need no extra geometry; let the normal map carry the small detail.
That lands close to the published bands above: under UEFN's 400-poly cap for a simple small object (Fortnite Documentation: Fortnite-Ready Assets Best Practices), and far below Vampyr's 3,140-triangle wheelbarrow (Polycount forum: Polycounts in next gen games thread!). A plain barrel is a simple shape.
#Step 3: build the LOD chain from screen size
Halve the screen size and you can halve the sides for the same pixel error:
| LOD | Distance | Radius on screen | Sides | Height segments | Triangles |
|---|---|---|---|---|---|
| LOD0 | up to 3 m | 94 px | 24 | 6 | 332 |
| LOD1 | from 6 m | 47 px | 16 | 6 | 220 |
| LOD2 | from 12 m | 23 px | 12 | 3 | 92 |
Unreal's presets allow more error than one pixel; small props use a PixelError value of 10 (Unreal Engine Documentation: Static Mesh Automatic LOD Generation). That is a reminder that one pixel is a strict target. Relax it for props players never inspect.
#Step 4: check against the frame
Now work from the top down. Say you build a VR room for Quest 3, with a recommended ceiling of 1.5 million triangles and 200 draw calls per frame (Meta Horizon Developers: Device Optimization Comparison). If about 250 meshes are visible at once, the average is 6,000 triangles each. But 250 meshes already exceed 200 draw calls before you count materials, so the main task is merging and instancing rather than trimming triangles. This is the common outcome: the draw call and material budget binds before the triangle budget does.
#Common mistakes
- Counting quads. Your "polys" may be half the real triangle count.
- Comparing headline numbers. A "500,000-polygon car" and a "25,000-triangle car" may not be measured the same way.
- Budgeting only the hero. One 50,000-triangle prop seen once costs less than a 2,000-triangle prop scattered 500 times.
- Spending triangles on flat areas. Triangles belong on the silhouette and on curves that catch light; flat panels can be very low.
- Forgetting materials. Five materials on one prop can cost more than doubling its triangles. See draw calls.
- Tiny triangles. On mobile, triangles under about 10 pixels in area waste GPU work (Android Developers: Geometry).
- Masked foliage on Nanite. Masked materials carry a significant shading cost in Nanite (Unreal Engine tech blog: Bringing Nanite to Fortnite Battle Royale in…).
- Assuming Nanite everywhere. It does not support stereo VR rendering or forward rendering (Unreal Engine Documentation: Nanite Virtualized Geometry).
#In different tools
- Blender: enable Statistics in the viewport overlays to read triangle counts. The Decimate modifier shows the remaining face count after reduction (Blender Manual: Decimate Modifier). See decimation.
- Unreal Engine: the Static Mesh editor shows triangles per LOD, and LOD Group presets set LOD behaviour per asset category (Unreal Engine Documentation: Static Mesh Automatic LOD Generation).
- UEFN: check the final vertex count in the editor rather than in your modeling app (Fortnite Documentation: Fortnite-Ready Assets Best Practices); the validator flags single-LOD meshes from 500 vertices (Fortnite Documentation: Simplify Static Meshes in Fortnite).
- Unity: the LOD Group component sets transitions by percentage of screen height (Unity Documentation: LOD Group).
#Further reading and watching
References
- · Device Optimization Comparison · Meta Horizon Developers, 2026 · docs · accessed 2026-10-20
- · Static Mesh Automatic LOD Generation · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
- · Decimate Modifier (Blender 3.6 Manual) · Blender Manual, 2023 · docs · accessed 2026-10-20
- · Nanite: A Deep Dive · SIGGRAPH 2021, Advances in Real-Time Rendering in Games, 2021 · talk · accessed 2026-10-20
- · Performance Ranks · VRChat Creator Documentation, 2026 · docs · accessed 2026-10-21
- · Performance Guidelines (PC SDK) · Meta Horizon Developers, 2026 · docs · accessed 2026-10-20
- · Simplify Static Meshes in Fortnite · Fortnite (UEFN) Documentation, 2026 · docs · accessed 2026-10-21
- · WebXR Performance Optimization Workflow · Meta Horizon Developers, 2026 · docs · accessed 2026-10-20
- · Nanite Technical Details · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
- · Bringing Nanite to Fortnite Battle Royale in Chapter 4 · Unreal Engine tech blog · article · accessed 2026-10-20
- · Geometry · Android Developers (game optimisation guide) · docs · accessed 2026-10-21
- · A first look at Unreal Engine 5 · Unreal Engine blog, 2020 · article · accessed 2026-10-20
- · Nanite Virtualized Geometry · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
- · Nanite Foliage · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
- · The Technology Bringing Mafia: The Old Country to Life (Dev Diary 2) · mafia.2k.com · article · accessed 2026-10-21
- · Optimize your 3D assets for spatial computing · WWDC24 (session 10186), 2024 · talk · accessed 2026-10-21
- · General specifications · Roblox Creator Hub, 2026 · docs · accessed 2026-10-21
- · Polycounts in next gen games thread! · Polycount forum, 2014 · forum · accessed 2026-10-21
- · Practical guide to optimization for mobiles (Unity 2018.3 Manual) · Unity Documentation, 2018 · docs · accessed 2026-10-21
- · Aircraft Modeling General Principles · Microsoft Flight Simulator 2024 SDK Documentation, 2026 · docs · accessed 2026-10-21
- · Watch Epic Games' amazing new Unreal Engine 5 demo · CG Channel, 2020 · article · accessed 2026-10-20
- · The Witcher 4 Unreal Engine 5 Tech Demo on PS5 revealed · PlayStation.Blog, 2025 · article · accessed 2026-10-21
- · Introducing The Matrix Awakens: An Unreal Engine 5 Experience · Unreal Engine blog, 2021 · article · accessed 2026-10-21
- · Nvidia shows The Witcher 4 forest demo running path tracing on an RTX 4070 · TechSpot, 2026 · article · accessed 2026-10-21
- · Modeling Characters for Optimal Performance (Unity 2017.2 Manual) · Unity Documentation, 2017 · docs · accessed 2026-10-21
- · Fortnite-Ready Assets Best Practices · Fortnite (UEFN) Documentation, 2026 · docs · accessed 2026-10-21
- · UPDATED: Horizon: Zero Dawn's Thunderjaw Consists Of 550k Polygons & Stands 24×9 Meters Tall · Wccftech, 2015 · article · accessed 2026-10-21
- · Killzone Shadow Fall Demo Postmortem · Guerrilla Games, 2013 · talk · accessed 2026-10-21
- · Final Fantasy VII Rebirth: The polygonal evolution from 1997 to the modern remake project · PlayStation.Blog, 2024 · article · accessed 2026-10-21
- · Gran Turismo 7's Car Models Use 500,000 Polygons Each · GTPlanet, 2022 · article · accessed 2026-10-21
- · Most polygons per car in a racing videogame · Guinness World Records, 2011 · web · accessed 2026-10-21
- · I love cars · iRacing.com, 2010 · article · accessed 2026-10-21
- · Behind The Scenes>> Creating The Cars For Need For Speed The Run · Speedhunters · article · accessed 2026-10-21
- · Most polygons in a playable spaceship · Guinness World Records, 2016 · web · accessed 2026-10-21
- · Star Citizen asset cost for ships anywhere from $35,000 to $150,000 · GameWatcher, 2013 · article · accessed 2026-10-21
- · Final Fantasy VII Rebirth Character Models Compared to FFVII · Siliconera, 2024 · article · accessed 2026-10-21
- · SOFTIMAGE|XSI Case Study: Konami - METAL GEAR SOLID 4 · ModDB (repost), 2010 · article · accessed 2026-10-21
- · LOD Technical Information · Microsoft Flight Simulator 2024 SDK Documentation, 2026 · docs · accessed 2026-10-21
- · Crash Bandicoot (character) · Wikipedia, 2026 · web · accessed 2026-10-21
- · Making Crash Bandicoot – part 3 (via the blog's 'video games' tag archive) · All Things Andy Gavin, 2011 · article · accessed 2026-10-21
- · Lara Croft: The Evolution · Game Informer, 2010 · article · accessed 2026-10-21
- · GT5 Has 'Real' Cars · TheSixthAxis, 2010 · article · accessed 2026-10-21
- · Metal Gear Solid 2 – A Technical Retrospective of Hideo Kojima's Masterpiece · GamingBolt, 2020 · article · accessed 2026-10-21
- · Forza Motorsport 3 Hands-On · GameSpot · article · accessed 2026-10-21
- · Poly Count for Game Assets - How to Prepare AI 3D Models · Tripo blog · web · accessed 2026-10-20
- · Polygon Count · Sloyd glossary · web · accessed 2026-10-20
- · Poly count for character? · Unity Discussions · forum · accessed 2026-10-20
- · LPC vol2 #4 - TRON · Polycount forum, 2010 · forum · accessed 2026-10-20
- · LOD Group (Unity 6.4 Manual) · Unity Documentation, 2026 · docs · accessed 2026-10-20
Pages that link here
- How to use this handbook Guide
- Real-time vs. offline rendering Topic
- The game asset pipeline Topic
- Roles in 3D game production Topic
- Anatomy of a polygon mesh Topic
- Edge Key term
- Face (polygon) Key term
- Triangle Key term
- Quad Key term
- N-gon Key term
- UV, retopology and baking tools Reference
- AI-assisted 3D generation Topic
- Modding and user-generated content tools Reference
- Ways to build a 3D model Overview
- Procedural modeling Topic
- Topology Topic
- Edge flow Topic
- Weighted (custom) normals Topic
- The mid-poly workflow Topic
- Kitbashing Topic
- Hero assets, props and filler Topic
- Convex hull Key term
- Level of detail (LOD) Topic
- Retopology Topic
- Decimation Key term
- Sculpting rocks and cliffs Guide
- Vertex painting and blending Topic
- Virtualised geometry (Nanite) Topic
- Gaussian splatting Topic
- Level design and environment art Overview
- Performance and profiling Topic
- Frame budgets Key term
- Draw calls Key term
- Art bibles and style guides Reference
- Planning a portfolio piece Guide
- Making (and reading) an art breakdown Guide
- Interviews and portfolio walk-throughs Guide
- Exercise: your first game-ready prop Exercise
- Exercise: a modular room Exercise
- Essential talks and videos Reference
- Game art breakdowns: a curated library Reference
Last updated 2026-10-22