Quick answer: Concave (Trimesh) shapes only collide reliably when they’re on a static body. Give dynamic RigidBodies convex shapes (or multiple convex sub-shapes), and reserve Trimesh for level geometry.
A barrel RigidBody falls through a Trimesh-shaped terrain. Trimesh is fine on the static terrain — but the barrel itself needs a convex shape, not Trimesh, for the contact to register properly.
Why Trimesh Is Static-Only
ConcavePolygonShape3D (Trimesh) is essentially a triangle soup with no notion of “inside”. Two concave-vs-concave checks are ambiguous and unreliable. Physics engines support concave-vs-convex but not concave-vs-concave.
Convex for Dynamic Bodies
For the barrel use a ConvexPolygonShape3D — or for complex shapes, several convex sub-shapes (a CollisionShape3D per chunk) to approximate it. The mesh editor’s “Create Convex Collision Sibling” and “Create Multiple Convex Collision Siblings” do this automatically.
Trimesh on Statics Only
Level terrain, walls, props that never move — Trimesh on a StaticBody3D is correct and accurate. The dynamic body is what needs convex.
Performance Bonus
Convex-vs-anything is also dramatically faster than concave-vs-anything. Using convex on dynamic bodies isn’t just “the only thing that works” — it’s also the right choice for performance.
Verifying
The barrel rests on the terrain and bounces correctly. Other dynamic bodies with convex shapes interact properly. The terrain’s Trimesh stays accurate for player/projectile collision.
“Trimesh = static level geometry. Convex (or compound convex) = dynamic bodies. Don’t mix them up.”
For destructible props, multiple convex sub-shapes approximate the visual mesh closely without the concave-vs-concave problem.