Your comments

To be honest, for such transport systems simple conveyor with physics is not enough. For stable behavior rigidbody must have only one degrees of freedom. The axis of degrees of freedom must be adjusted with movement direction of the conveyor. Here are some examples:vid
vid

When collision happens between Surface and MaterialFlowObject, set MaterialFlowObject.transform.parent = surface.transform. When object leave the collider, set transform.parent back.

For example: 



private void OnCollisionEnter(Collision other)
{
if (!_isDynamic) return;
if (other.gameObject.TryGetComponent(out Entity entity))
{
entity.transform.parent = transform;
}
}

private void OnCollisionExit(Collision other)
{
if (!_isDynamic) return;
if (other.gameObject.TryGetComponent(out Entity entity))
{
if (entity.transform.parent == transform) entity.transform.parent = _pool.Object.transform;
}
}

Sorry, we are developing the program for commercial purposes and cannot share the source code.

I have written IK for industrial robots. Works perfectly!

2022-01-25 23-22-40.mp4