You can do that with a shader.
The easiest way to start is to pass the player position into the shader as a uniform vec3.
Then in the spatial material, you can create a sort of sphere in code that affects the visibility.
For example:
uniform vec3 player_position;
void fragment() {
if (distance(player_position, pixel_position) < 10.0) {
ALBEDO = vec3(0.0, 0.0, 1.0);
} else {
ALPHA_SCISSOR = 0.5
ALPHA = 0.0
}
}
You will just have to calculate pixel_position yourself, as that is not a built-in value, I just made it up.
But there are equations to calculate the world space position of a pixel giving the screen 2D pixel value and the depth value.