### Godot version

4.0 beta 9

### System information

Manjaro 6.0.14

### Issue description

(3D) Rigid bodies with capsule shapes seem to have completely broken collision with static bodies with cylinder shapes, as they collide as if they were a cylinder of the same total height, and on top of that they don't topple at all when their centre of mass is over an edge.
![image](https://user-images.githubusercontent.com/47794482/208954595-ceb74474-8c05-425b-a2fa-a7c39b90e453.png)


### Steps to reproduce

Start a new project. In the 3D scene add a StaticBody3D with a cylinder collision shape and a RigidBody3D with a capsule collision shape. (Add a camera and meshes to see what's going on.) Move the RigidBody3D above the StaticBody3D so its centre of mass' downward projection doesn't hit the cylinder. Play the scene

For the minimal reproduction project: Play the scene

### Minimal reproduction project

[bug display.zip](https://github.com/godotengine/godot/files/10279550/bug.display.zip)

Vector3 cap_axis = cyl_axis * (cylinder_B->get_height() * 0.5);
	for (int i = 0; i < 2; i++) {
		Vector3 cap_pos = p_transform_b.origin + ((i == 0) ? cap_axis : -cap_axis);
		for (int e = 0; e < 12; e++) {
			const Vector3 &edge_start = vertices_A[edges_start_A[e]];
			const Vector3 &edge_end = vertices_A[edges_end_A[e]];
			Vector3 edge_dir = (edge_end - edge_start);
			edge_dir.normalize();
			real_t edge_dot = edge_dir.dot(cyl_axis);
			if (Math::is_zero_approx(edge_dot)) {
				
				continue;
			}
			
			Vector3 edge_diff = cap_pos - edge_start;
			real_t diff_dot = edge_diff.dot(cyl_axis);
			Vector3 intersection = edge_start + edge_dir * diff_dot / edge_dot;
			
			Vector3 tangent = (cap_pos - intersection).cross(cyl_axis);
			
			Vector3 axis = tangent.cross(edge_dir);
			if (!separator.test_axis(axis.normalized())) {
				return;
			}
		}
	}
	separator.generate_contacts();
}
template <bool withMargin>
static void _collision_box_convex_polygon(const GodotShape3D *p_a, const Transform3D &p_transform_a, const GodotShape3D *p_b, const Transform3D &p_transform_b, _CollectorCallback *p_collector, real_t p_margin_a, real_t p_margin_b) {