On begining I want to say "thank you" for this nice engine. I realy love LÖVE

In my project I have level like this:

And I want to limit the field of view of player to let him "see" only things not curtained by sprites. Like on screen below:

I feel that I should use raycasting to find visible part and i'm think about using shaders to cover invisible part (for example: grain effect). But I don't have an idea how to do that. Is it even possible to do it using raycasting + shaders? Or maybe my idea is wrong and there is a better way to obtain this feature?
Any constructive answer will welcome.
Thanks
Jakub