[UE5] Simple vs Complex Collision and Performance Optimization

Created: 2025-12-12Last updated: 2026-07-19

Your character sinks into a mesh, or the framerate tanks the moment you place one. The cause is the shape of the collision. A visual breakdown of Simple vs Complex alongside the four Collision Complexity settings, plus a hands-on fix for a rock you sink into that keeps it cheap.

"My character sinks halfway into that rock." "The frame rate started stuttering the moment I placed a bunch of these." Both symptoms show up within a few weeks of picking up UE, and they usually trace back to the same thing: the shape you see and the shape you collide with are different.

In UE, a single mesh carries two kinds of collision: the cheap, rough Simple Collision and the accurate but expensive Complex Collision. This article sorts out the difference between the two along with the Collision Complexity setting, and shows how to fix "the rock my character sinks into" without making it expensive.

Illustration of the visible rock shape differing from the box shape used for collision

What You'll Learn

  • A mesh holds its visual shape and its collision shape separately
  • Simple = fast but rough / Complex = accurate but expensive
  • The four Collision Complexity settings, and what the default Project Default actually does
  • Why sinking into a mesh is not a reason to reach for Use Complex Collision As Simple
  • Hands-on: fixing a rock you sink into while keeping it cheap

Sponsored

The Visual Shape and the Collision Shape Are Different Things

Start with the single most important premise in UE: the shape drawn on screen and the shape used for collision are separate pieces of data.

Comparison of the rendered rock mesh on the left and the collision made of a few boxes covering it on the right

Place one complex rock and the screen shows a rock made of tens of thousands of polygons. The collision, meanwhile, is often just a few boxes roughly covering it. That's why you get mismatches like "there's clearly a gap but I can't walk through it" or "I should be able to stand in that dip but I can't."

Why keep them separate? Cost. Collision is evaluated every time movement, traces, or physics ask for it, so a character simply walking around generates a huge number of queries. Feeding tens of thousands of polygons into that grinds to a halt. So UE keeps a cheap shape on the side and uses that most of the time.

Learn how to inspect it, too. Open the Static Mesh editor and turn on Simple Collision or Complex Collision display from the Collision menu in the toolbar, and the collision shape appears overlaid as a wireframe. The display color changes depending on the situation, so identify them by the menu item name, not the color. This is the fastest route to noticing "that's not the shape I expected."

Simple Collision: Fast, but Rough

Simple Collision is collision built from combinations of primitive shapes: boxes, spheres, capsules, and convex hulls.

Diagram of the four primitive types: box, sphere, capsule, and convex hull
  • Fast: It resolves with a formula, so the computational cost is extremely low
  • Rough: It doesn't reproduce the original mesh shape. Dips get filled in and thin parts get fattened
  • Where it's used: Character movement, physics simulation, pushing against things. In other words, everything evaluated every frame

The term worth internalizing here is convex hull. It means "a shape with no concavities." Picture wrapping a rubber band around the whole mesh and taking that outline. This shape cannot represent concavities. A donut hole or the inside of a cup gets filled in; that's the nature of a convex hull.

That's why a single Simple Collision often doesn't match the shape, and in practice you combine multiple convex hulls to approximate it.

Complex Collision: Accurate, but Expensive

Complex Collision uses the rendered triangles themselves for collision.

Diagram showing that a rock's dip, which a convex hull fills in, is evaluated exactly as the triangles describe it under Complex
  • Accurate: It nearly matches the visuals. Dips and holes collide exactly as they look
  • Expensive: Cost rises with the number of triangles to check (in practice there's spatial culling so it isn't brute force, but it's an order of magnitude above Simple)
  • Where it's used: Bullet trajectory checks, line-of-sight checks, and other traces that only run occasionally

"Only run occasionally" is the point. A single raycast per shot can afford to be accurate. Character movement, on the other hand, is constantly evaluating collision, so using Complex there sends the cost through the roof.

Note that whether a trace looks at Simple or Complex is also controlled by the Trace Complex checkbox on the Line Trace node. It isn't "automatically decided by use case." It's decided by both the mesh's setting and the trace's specification.

Sponsored

The Four Collision Complexity Settings

What decides "which one do I use" is Collision Complexity in the Static Mesh asset's Details panel. This is a common source of confusion, so let's lay it out visually.

Table diagram of what each of the four settings assigns to the two use cases, collision and trace

The important part is that UE splits the use cases into two: colliding, standing on, being pushed (Collision), and shooting a line to query something (Trace). The settings decide what gets assigned to each.

SettingCollision sideTrace sideWhen to use it
Project DefaultFollows project settingsSameThe default. Leaving it alone is correct for most meshes
Simple And ComplexSimpleComplexWhen you want it stated explicitly (this is normally what Project Default resolves to)
Use Simple Collision As ComplexSimpleSimpleWhen you want traces cheap too. Line-of-sight accuracy drops
Use Complex Collision As SimpleComplexComplexOnly when surface accuracy for standing on it is mandatory, such as terrain

The thing to notice is what the default resolves to: Simple And Complex. "Cheap Simple for movement, accurate Complex for line-of-sight" is exactly the split you want, and it's there from the start. Which means you generally don't need to touch it.

One more thing worth knowing: a mesh set to Use Complex Collision As Simple can no longer run physics simulation with Simulate Physics. It's off the table for rolling barrels and flying debris.

The trap in Use Complex Collision As Simple: Only the LOD 0 mesh is used as Complex. Even when LODs switch at a distance, collision stays at full precision. "It's far away, so it must be cheap" doesn't hold.

Don't Flip to Complex Just Because You Sink

This is the most common accident. "I sank into the rock, so I set Use Complex Collision As Simple and it fixed it." It does fix it, but that rock is now an object that faces tens of thousands of polygons on every query. With one rock you won't notice. It bites once you've placed a lot of them and have several characters walking around on top.

The right fix for sinking isn't switching to Complex, it's rebuilding the Simple shape. That's what we'll do next.


Hands-On: Fixing a Rock You Sink Into, Cheaply

Obstacles in an action game, terrain decoration in an open world, rubble in a horror game. "My character sinks to the waist when standing on that rock" happens in every genre. Here we'll fix that rock without falling back on Complex.

Setup: Prepare one Static Mesh of a rock or piece of rubble with an uneven top surface, place it in the level, and try standing on it with your character. A Starter Content rock or a mesh you imported yourself both work.

The symptom comes in two forms depending on the shape. If the Simple Collision sits inside the actual surface, you sink; if it covers a larger volume, you float or hit an invisible wall. Both have the same cause: the collision shape differs from the visuals.

TargetSettingNotes
Any rock or rubble Static MeshCollision Complexity = Project DefaultDon't change it. This is our starting point
CharacterThe standard Third Person templateCapsule radius and height stay at defaults

Step 1: Look at the shape first. Open that mesh in the Static Mesh editor and turn on Simple Collision display from the toolbar's Collision menu (Complex Collision is a separate item, so confirm by name to avoid mixing them up). You'll most likely see a single box wrapping the entire rock, or one rough convex hull. Every bump on the top surface being ignored is the source of the mismatch.

Diagram showing a single large box around the rock that doesn't match the rock's actual outline, with the character floating or sinking

Step 2: Throw away the current Simple Collision. Run Remove Collision from the Collision menu. This only removes the Simple Collision; the mesh itself and the Complex data remain.

Step 3: Auto-generate convex hulls. Choose Collision → Auto Convex Collision and a panel appears at the bottom. There are only two things to touch here.

ParameterMeaningStarting value
Hull CountThe upper limit on hulls to generate (you won't necessarily get this exact number)Start at 8
Max Hull VertsVertex count per hull16 (leave at default)
Hull PrecisionHow fine the approximation isLeave at default (results change, so keep it fixed when comparing)

Press Apply and multiple convex hulls are generated following the rock's shape. The bumps that a single box couldn't represent become representable through subdivision.

Diagram of eight convex hulls combined along the rock's shape instead of a single large box

Step 4: Fill in the gaps by hand. If a specific dip still doesn't match, add one primitive with Collision → Add Box Simplified Collision. Adding it just puts a large box in the center, so select it in the viewport and move, rotate, and scale it into place. You don't need to be precise everywhere. Getting the places the character touches right is enough.

Step 5: Save. Save the Static Mesh asset. Forget this and your work disappears the moment you close the editor.

Hit Play and stand on the rock. If your standing position, previously off, now roughly matches the visible surface, it worked. Convex hulls are approximations so it won't match perfectly, but landing inside the range where nothing feels off in play is enough.

When it doesn't work, check with the Collision display still on.

  • Still off → raise Hull Count to 16, raise Hull Precision, or add one primitive to that spot
  • Blocked by an invisible wall → the hulls are bulging out. Increasing the count tightens the fit
  • Thin plates or shapes with holes can't be reproduced → convex hulls are bad at those. Building it from primitives by hand can be faster
  • It got expensive → each hull is a collision candidate. Check that you haven't added too many

Two things to take away.

  • Accuracy only matters where the character touches: Nobody notices if the back or the top of the rock is a bit off. Trying to make the whole thing accurate is what makes it expensive
  • More Hull Count is not better: Each hull is a collision candidate, so more hulls means more cost. Stop once the shape fits, and the number you need depends on the mesh

Only for things like terrain, where you truly need to walk exactly along the surface, should you consider Use Complex Collision As Simple. But there's one thing that's easy to get wrong: rendering LODs and distance culling do not reduce collision cost. Collision stays live even off-screen, so if you really want that cost gone, you need to unload the Actor or the level itself (→ Level Streaming).

Terrain built with UE's Landscape is a different story. Landscape has its own Collision Mip Level setting, and the Static Mesh discussion here doesn't map onto it directly.

Sponsored

Bonus: Good to Know for Later

"Does it collide" and "what does it collide with" are separate settings. This article covered the shape of collision. Per-target reactions like "hits the player but bullets pass through" belong to Collision Presets and channels, an entirely different layer (→ Collision channels and presets). When fixing the shape doesn't produce the collisions you expect, look there.

Character movement collides with a capsule, not the mesh. A Character uses its CapsuleComponent for movement, so whether it fits through a narrow corridor is determined by the capsule's radius and height (no amount of mesh shaping changes it). Per-body-part hit detection is a separate matter, and typically uses the Bodies in a Skeletal Mesh's Physics Asset.

Collision on a Nanite mesh is separate data. Nanite is strictly a rendering mechanism; collision still uses Simple/Complex as before. "I turned on Nanite so collision gets optimized automatically" isn't the case, and you still design collision yourself (→ How Nanite works).


Summary

When you're unsure about collision settings, work through it in this order.

SituationWhat to do
Placing an ordinary meshLeave it on Project Default. Do nothing
Character sinks or snagsRebuild the hulls with Auto Convex Collision
Still doesn't fitAdd just one primitive by hand
Terrain where surface accuracy is mandatoryUse Complex Collision As Simple. But LODs and culling don't reduce collision cost, so narrow the range by unloading the Actor or the level instead
You only want accurate line-of-sightDo nothing (traces already look at the Complex side by default)

Cheap and accurate are things you pick per use case. UE's defaults already contain that split, so the first thing to suspect isn't the setting, it's the shape of the Simple Collision. Fix that and most "I'm sinking into it" problems resolve while staying cheap.

That rock you've got placed right now: want to take a look at its collision shape?