Cloth Simulation deforms before hitting anything, and seems to pass right through the table and plate

I've just started learning animation in Blender, and I've come across a problem with the cloth simulation. In the attached picture, I made a table, a plate, and a piece of cloth. The cloth is simply a plane with 50 subdivisions, and I turned on cloth simulation and self collisions. I added the collision modifier to both the table and the plate. When I run the simulation, the cloth deforms before hitting anything, and seems to pass right through the table and plate. Can anybody help? Thanks!

• You might want to play around with the settings in the cloth physics. As for the table, you need to make it a Rigid Body > Passive type, in the physics tab for the cloth to collide with it. The same goes for the plate. – stphnl329 Apr 2 '20 at 3:31

In the future, including a .blend file or a minimal working example script would be ideal because then we can directly diagnose any potential issues.

In lieu of that, here is a minimal working example script using Blender 2.82a with cloth collisions, which you can build upon for your own tests.

If this script is in a file called test.py then you just have to run blender -P test.py from your command line (e.g., this is usually Terminal or iTerm if you're on a Mac OS). Then this will open up Blender, and you can play around with the settings and observe what modifiers need to be present.

import bpy

def clear_scene():
"""Get rid of the starting cube."""
bpy.ops.object.select_all(action='DESELECT')
bpy.data.objects['Cube'].select_set(True)
bpy.ops.object.delete()

def make_meshes():
"""Make Suzanne mesh, with the collision modifier."""
bpy.ops.transform.resize(value=(2, 2, 2))

def make_fabrics():
"""Make fabric that drops over the Suzanne mesh and collides with it."""
bpy.ops.transform.resize(value=(3.5, 3.5, 3.5))
bpy.ops.transform.translate(value=(0, 0, 6.0))

# Sub-divide into 50, like how you did it.
bpy.ops.object.editmode_toggle()
bpy.ops.mesh.subdivide(number_cuts=50)
bpy.ops.object.editmode_toggle()

# Turn on collisions an increase the quality of the steps.
bpy.context.object.modifiers["Cloth"].settings.quality = 10
bpy.context.object.modifiers["Cloth"].collision_settings.collision_quality = 5
bpy.context.object.modifiers["Cloth"].collision_settings.use_self_collision = True

if __name__ == '__main__':
clear_scene()
make_meshes()
make_fabrics()