Hi people,
I want to do something a bit like L4D’s AI Director. I want to have graffiti, posters, etc that change according to the situation. However I don’t want the player to ever see it change, because that would break immersion. Unfortunately the stuff I saw on the forum about testing if an object is visible didn’t pan out… apparently the API considers an object to be visible even if it’s occluded. ![]()
The physics raycasting method has obvious flaws, because the quality depends upon the number of raycasts you make. For this purpose false positives are okay (saying it’s visible when it’s not), but false negatives would be bad.
My current thoughts are as follows:
- When really far away assume it’s not visible, nobody will care if 2 pixels on screen change.
- When medium far away use raycasting after checking it’s within the view frustrum. The further away something is the closer to parallel the raycasts will be, therefore the more accurate.
- When close check if within the view frustrum. Do raycasts to the bounds of the object, and unless all raycasts hit the same collider assume it will be visible. This means if it’s fully blocked by a floor or wall you can’t see it, otherwise assume you can.
Another possibility is to use a portal type approach to check if a whole area is visible, but I don’t like the idea of the designer having to manually set up portals PVSs because there could be mistakes. I don’t see a way to automatically calculate the partially visible set using Unity.
Any better suggestions? Pros or cons to my suggested method?