Guides
Optimise Roblox meshes: triangles, RenderFidelity, CollisionFidelity and textures
Make Roblox meshes cheaper: triangle budgets, RenderFidelity, CollisionFidelity (Box, Hull, Default, Precise, Tunable), texture sizes and mesh reuse.
3 min read

Quick answer
How do you optimise meshes in Roblox?
Keep triangle counts low, leave RenderFidelity on Automatic so distant meshes simplify, set CollisionFidelity to Box or Hull unless players need precise contact, size textures to the object, and reuse meshes instead of importing near-duplicates. Turn off CanCollide and CanTouch on decoration players never touch.
Where a mesh costs you
Every MeshPart has four costs: triangles to render, a collision shape for physics, textures in memory, and a download when it's unique. Optimising means trimming each one to what the object actually needs.
1. Triangles
The import limit is 20,000 per mesh, and most props should be far below it. The biggest gains are usually upstream: model or retopologise lower in the first place (low-poly models for Roblox).
2. RenderFidelity: automatic level of detail
MeshPart.RenderFidelity decides whether a mesh simplifies with distance. On Automatic, the default, Roblox's Meshes docs list the bands:
- under 250 studs: highest detail;
- 250–500 studs: medium;
- 500 studs or more: lowest.
Leave it on Automatic for almost everything. Setting it to Precise keeps full detail at every distance, which is rarely worth it. This is Roblox's built-in form of level of detail. It works best on clean meshes, because simplifying messy topology spreads the mess.
3. CollisionFidelity: the expensive one people forget
Physics doesn't use your visible mesh. It uses a simplified shape set by CollisionFidelity:
- Box: a bounding box. It's the cheapest, and right for small props and anything players don't climb.
- Hull: a convex hull. It's cheap, but fills holes and openings.
- Default: an approximate shape that supports concave areas.
- PreciseConvexDecomposition: the closest fit and the most expensive to compute.
- Tunable: adds a CollisionPrecision slider, so you can trade precision against cost without switching modes.
To see what you've got, turn on Collision fidelity in the viewport's Visualization Options. For decorations players never touch (bushes you walk through, distant scenery), also turn off CanCollide and CanTouch.
4. Textures
Roblox accepts textures up to 4096×4096, and its guidance is to size by object: 256 px for 5×5 studs, 512 for 10×10, 1024 for 20×20. A full PBR set is four or five images per mesh, so give background props colour only. Tint shared textures with SurfaceAppearance.Color instead of uploading colour variants (PBR textures in Roblox).
5. Reuse
Each unique mesh and texture is a separate download. Ten placements of one tree mesh, rotated and scaled, cost far less than ten different trees. Packages make reuse easier across places.
Measure, don't guess
Roblox's performance guide covers the MicroProfiler and Developer Console memory stats. Test on a phone, not just your PC. That's where mesh costs show up first.
Lighter meshes from the start
Most mesh optimisation is undoing density that never needed to exist. Vi3W retopologises every model from high to low poly before export, so you start from a clean, light mesh rather than a raw million-triangle one. Try it free.
Frequently asked questions
Does polygon count in a mesh affect lag?
Yes. Triangles cost rendering time, and dense meshes with detailed collision also cost physics time. The effect shows up first on players' weakest devices, usually phones. One heavy mesh rarely matters, and hundreds of them do. Keep counts low, let RenderFidelity simplify at distance, and use Box or Hull collision wherever you can.
Questions about reducing part lag
The thread's useful answers still hold. Simpler collision (Box) costs less memory than detailed collision. A MeshPart is usually cheaper than a pile of unions. Every unique mesh and texture has to be downloaded, so reuse assets. Avoid partial transparency where you can.
Last reviewed

