Repository: godot
Issue: Collision Normals are not being accurately reported from move_and_collide() on non CSG meshes
Labels: bug,documentation,topic:physics

### Godot version

4.0 Beta 3

### System information

Windows 10; AMD Ryzen 7 3700X 8-Core Processor

### Issue description

This issue is a bit hard to describe. Essentially, When colliding on corners or shapes, the surface normal does not get reported by move_and_collide() accurately. Let me give some examples.
# Chapter One:
## If the player's collision hull is a rectangle (stretched square), the following normals are reported:
### Cube collision hull on StaticBody3D Corner
![image](https://user-images.githubusercontent.com/23440295/196256473-47d0a4a8-1a3b-45fd-9b51-6a4e44bc8560.png)
Notice how, despite colliding at a corner, only one of the two normals is reported. (two collisions are detected but only one normal is logged) This behavior is inconsistent with the same shape but as a csg. (It works correctly on CSGs)
### Cube collision hull on CSGBox3D Corner:
![image](https://user-images.githubusercontent.com/23440295/196257152-a46950be-8bd2-49bf-b5ed-cb76486444ef.png)
## If the player's collision hull is a cylinder, the following normals are reported:
Normals are correctly reported on cylinder shapes, but not from the side (I will get to that in chapter 2).
### Cylinder shape on a StaticBody3D Corner:
![image](https://user-images.githubusercontent.com/23440295/196258070-040c81b7-b7cc-4ae1-bc65-4423adaf9b55.png)
Correctly detects it here for some reason. It correctly detects them on both the Static body and the CSG.
### Cylinder shape on a CSGBox3D Corner:
![image](https://user-images.githubusercontent.com/23440295/196260906-c60dd786-7fd1-464e-8d35-de13cff39711.png)
## If the player's collision hull is a capsule, the following normals are reported:
Capsules have the same issues as the square, but the round shape of the capsule prevents the player from actually moving because the wrong collision normal causes the next move_and_collide() to return a collision and therefore stop.
### Capsule shape on StaticBody3D Corner:
![image](https://user-images.githubusercontent.com/23440295/196261615-f50b824d-7be3-4267-9e20-af3e0df17955.png)
### Capsule shape on CSGBox3D Corner:
![image](https://user-images.githubusercontent.com/23440295/196261705-24b13c9e-91cc-43ff-9a60-d2353746cdc6.png)
# Chapter 2
Presumably for the same reason as the capsule collision on StaticBody3D corner from chapter 1, a similar issue can occur on walls. This only happens with cylinder shapes.
![image](https://user-images.githubusercontent.com/23440295/196262371-9642851f-e1f6-4b67-b5c8-d498d1f36148.png)
As you can see, we are on the corner of a wall. The collision normal reports suggest that we are not on a wall because they all report the floor. However, we cannot move. We can't move because move_and_collide() detected a collision for some reason. Move and collide often suffers from issues of detecting collisions and stopping even if the direction of motion would not cause a collision. In this example, the collision is presumably detected instantly because the player is intersecting the corner of this wall, so it stops motion. However, a wall collision normal isn't reported so there isn't much I can do about it.


# I made [this video](https://youtu.be/fMYeTkOOefs) that shows these issues in action

### Steps to reproduce

1. Download the project.
2. Change the collision shape at will to test each condition.
3. Click run and walk up slopes to test.

### Minimal reproduction project

https://github.com/Gamepro5/Custom_CharacterBody3D_Movement_System/tree/1be17d8578a6975d9f35d317cdff8b30553d82df