There are a number of ways to optimize the Umbra 3 Runtime visiblity query time. The different methods are listed below in the order we recommend you to try them:
1. Increase the value of the Smallest Occluder computation parameter
This will result in more coarse representation of the occlusion geometry and much less work for the query to do. It is important to note however, that the quality of the culling will be lower. In other words, more objects will be reported visible.
2. Utilize Object Grouping
Utilize object grouping to group together objects that are commonly visible together. The object grouping aggressiveness is controlled by Umbra::ComputationParams::OBJECT_GROUP_COST and Umbra::ComputationParams::WORLD_SIZE computation parameters.
When using object grouping the mapping from Umbra target indices returned from the visibility query to user IDs is one-to-many instead of one-to-one. This has to be taken into account in the runtime integration.
Object grouping will only be effective with very large scenes with tens of thousands of objects.
BTW, remember to include the objectgrouper library in your application's list of library dependencies if you're using static Umbra computation libraries.
3. Accurate occlusion distance
Reduce the distance until which accurate occlusion results are gathered, by defining the distance as the fifth parameter for Umbra::Query::queryPortalVisibility().
Note that reducing the accurate occlusion distance can have dramatic effect on the culling quality.