I’m beginner with a three.js, so sorry in advance for my, maybe, stupid question.
First, that question isn’t stupid at all - second, it also sounds like exactly the opposite of stupid - and a fun problem to solve.
But, unfortunately, I don’t think there’s any super easy solution for that - personally I wouldn’t use visuals, since they depend on the screen resolution, shadow resolution, fov, and a bunch of other error-prone and expensive moving parts.
Raycasting and partitioning sounds like an effective approach though (esp. since you’ll have to approximate minimum detectable area anyways - and with rays you can just subdivide the surface to adjust the level of approximation.)