Backface Culling of Meshlets for Skeletal Animation
In real-time rendering, we want to render as little as possible and detect invisible scene portions quickly so we can avoid rendering them and focus on the important triangles (the ones that are visible). A very common technique for visibility culling that cuts rendered geometry almost in half is backface culling. Backface culling can be easily activated for individual triangles by configuring the rendering pipeline. But with the arrival of mesh shaders, we have another option: we can split our rendered models into small geometry packets, called meshlets. When we render our scene with mesh shaders, we can detect entire meshlets (e.g., 126 triangles) that are facing away from the viewer and cull them all at once. It is a little bit harder than triangle backface culling because it involves analyzing the normals in each meshlet and computing a cone to test against in the mesh shader, but it is not too complicated.
Example of a mesh, split into multiple meshlets.
However, what is still unsolved is how we can effectively do this for objects with skeletal animation. In skeletal animation, every vertex on the surface of the object moves according to the influence of one or multiple bones. This means that individual triangles in the mesh will be stretched, rotated or moved, and that of course affects their orientation (triangle normal). So we cannot easily compute a single cone for doing backface culling. To enable meshlet backface culling for meshes with skeletal animation, we need a way to find a good upper bound on the range of angles that normals in a meshlet can take on between animation key frames N and N+1. These bounds can then be used to construct an individual cone to use between those key frames for meshlet backface culling.
This is also research work. If successful, we intend to send your work to a high-impact computer graphics conference, with your name on it. Ideal if you consider a career in the field of computer graphics.
Your task will be to first do some background research into correct skinning, mesh shaders and backface culling of meshlets. Next, we want you to use your mathematical and geometry skills to find a way for bounding the angles that normals in a meshlet can take on between two individual key frames. This should be done for a state-of-the-art skinning and animation technique (e.g. using multiple bones for skinning, correct interpolation between frames). Finally, you should implement your solution and evaluate its robustness and its advantages (that is, performance gain from meshlet backface culling on meshes with skeletal animation).
- Knowledge of English language (source code comments and final report should be in English)
- Strong knowledge of geometry, mathematical background
- Knowledge of C++ and at least one modern rendering API
- More knowledge is always advantageous
The project should be implemented as a standalone application where we can compare the performance gain that your method enables in real-time rendering of meshes with skeletal animation.
|Example of meshlets generated for static object||218.52 KB|