Optimized LOD Selection in Look-Through Scenarios
For real-time rendering, it is essential to save on detail whenever possible to reduce the rasterization load. One method of doing so is to use lower-detail LOD versions for objects that are not clearly visible (e.g., far away, moving quickly). In state-of-the-art engines, objects may also be efficiently culled completely if they fail the hierarchical z-buffer test. However, large groups of small objects (e.g., leaves, twigs, blades of grass) are too numerous and expensive to do Hi-Z testing against, and even if we do it, often a small hole remains between those occluders that viewers can see through. Hence even though such foliage restricts visibility, the objects it obscures cannot easily be culled. But we can use this restricted visibility in every frame to mark objects that lie behind vines/trees/bushes and render them with a reduced level of detail. If done right, the differences should be unnoticeable to a spectator of the scene.
We can't just cull the objects behind foliage because we can often still see through parts of it. But we can probably reduce their level of detail without anybody noticing.
Your job would be to find methods for identifying such see-through scenarios (e.g., by manually marking the tops of trees, large grass fields, vines and detecting objects that are obscured by them) in every frame. Furthermore depending on the scenario and occluder density, you should find a method to select the levels of detail you can choose for the partially invisible objects behind them, such that the viewers are unable to notice the difference. This should be confirmed by you in a small user study as well. You should create scenes with few and many such see-through scenarios, and measure the performance gain that you can achieve by using lower-detail geometry.
This topic is also research work. If successful, we hope to turn it into a computer graphics conference submission with your name on it.
- Knowledge of English language (source code comments and final report should be in English)
- Good knowledge of C++ is required
- Knowledge of any available rendering API is required
The project should be implemented in a framework that allows testing the new LOD selection method and evaluating its effects on the viewer (at what point do they notice that the LOD has been swichted for a lower detail level?). Ideally, you will be able to load demanding, large-scale scenes.
Optionally, the LOD method could be combined with our procedural geometry city generation library (see images above). Using the procedurally generated geometry would fit this problem extremely well, because every building is generated procedurally with increasing levels of detail (e.g. house shape first, then split into multiple floors, then add windows, etc.) which lends itself extremely well to a fine-grained LOD approach.