如果物体过小，需要增加模拟频率（btDiscreteDynamicsWorld::stepSimulation的参数）。60帧的推荐运动物体大小在0.2米 - 5米。
Avoid very small and very large collision shapes
The minimum object size for moving objects is about 0.2 units, 20 centimeters for Earth gravity. If
smaller objects or bigger gravity are manipulated, reduce the internal simulation frequency
accordingly, using the third argument of btDiscreteDynamicsWorld::stepSimulation. By
default it is 60Hz. For instance, simulating a dice throw (1cm-wide box with a gravity of 9.8m/s2)
requires a frequency of at least 300Hz (1./300.). It is recommended to keep the maximum size of
moving objects smaller then about 5 units/meters.
Avoid large mass ratios (differences)
Simulation becomes unstable when a heavy object is resting on a very light object. It is best to keep the
mass around 1. This means accurate interaction between a tank and a very light object is not realistic.
Combine multiple static triangle meshes into one
Many small btBvhTriangleMeshShape pollute the broadphase. Better combine them.
Use the default internal fixed timestep
Bullet works best with a fixed internal timestep of at least 60 hertz (1/60 second).
For safety and stability, Bullet will automatically subdivide the variable timestep into fixed internal
simulation substeps, up to a maximum number of substeps specified as second argument to
stepSimulation. When the timestep is smaller then the internal substep, Bullet will interpolate the
This safety mechanism can be disabled by passing 0 as maximum number of substeps (second
argument to stepSimulation): the internal timestep and substeps are disabled, and the actual
timestep is simulated. It is not recommended to disable this safety mechanism.
For ragdolls use btConeTwistConstraint
It is better to build a ragdoll out of btHingeConstraint and/or btConeTwistLimit for knees,
elbows and arms.
Don’t set the collision margin to zero
Collision detection system needs some margin for performance and stability. If the gap is noticeable,
please compensate the graphics representation.
Use less then 100 vertices in a convex mesh
It is best to keep the number of vertices in a btConvexHullShape limited. It is better for
performance, and too many vertices might cause instability. Use the btShapeHull utility to simplify
Avoid huge or degenerate triangles in a triangle mesh
Keep the size of triangles reasonable, say below 10 units/meters. Also degenerate triangles with large
size ratios between each sides or close to zero area can better be avoided.
The profiling feature btQuickProf bypasses the memory allocator
If necessary, disable the profiler when checking for memory leaks, or when creating the final version
of your software release. The profiling feature can be switched off by defining #define
BT_NO_PROFILE 1 in Bullet/src/LinearMath/btQuickProf.h