Creating a basic opacity mask at runtime based on object location

So basically I am creating a rolling ball game, and am trying to create a hole asset that can be placed anywhere in the level as many as I want. I technically have it working following this tutorial (with modifications to suit my project):

The basics are that when the ball overlaps a cylinder at the center of the hole the ground collision is turned off and the hole collision is turned on. It works great expect that out utilizes a mask over each hole that is drawn in the custom depth buffer and then used as a mask for a translucency material. The major drawback is that the floor can not receive shadows, which makes it a non viable solution for me unless:

  1. There is a way for me to create a plane that can receive shadows on top but not actually be visible in order to solve the shadow issue.

  2. Be able to use the custom depth buffer with an opaque material as an alpha mask which doesn’t work currently because the depth buffer node can’t be used with an opaque material (I don’t understand why).

My next idea is to instead somehow create an alpha texture at runtime that just draws circles onto the texture based on the location of each hole asset. Is there a way to do this? Can I use a custom buffer or something and just create the necessary texture at run time and then apply it to the ground? Maybe I’m baking up the wrong tree (haha)? Any help would be greatly appreciated as this issue seems to be asked frequently and never answered🤔.