Well basically you need 1 math function - WorldToUV. Say your map is 5x5 kilometers and you make a 1024×1024 canvas. If you drop your house or whatevever object in the middle, i.e. 0 in x and y, your WorldToUV would translate this tp 0.5x0.5 (WorldToUV is just (WorldPosXY + HalfMapBounds) / MapBoundsXY. Might need to invert Y, not sure). Now you use this to draw a white rectangle into a canvas which you then stick into a rendertarget.
Your grass material will now do the same. Take the pixel position, convert it into UV and sample your rendertarget. Since you drew white boxes for houses you now just invert that and you got your opacity value.