@hii There's certainly nothing stopping a renderer from having transparent objects! So the occluder need not be opaque. However, note that the visibility function is always binary, even if the line segment connecting two points passes through a transparent object. This is because the visibility function represents intersections with other primitives; it does not take the material/appearance of the primitive into account.
Is it possible for the occluder to be not opaque?
@hii There's certainly nothing stopping a renderer from having transparent objects! So the occluder need not be opaque. However, note that the visibility function is always binary, even if the line segment connecting two points passes through a transparent object. This is because the visibility function represents intersections with other primitives; it does not take the material/appearance of the primitive into account.