Optimisation du rendu (drawcalls)
Optimiser le rendu grâce à des techniques plus avancées, basée sur du culling plus agressif que le frustum culling.
Plusieurs pistes sont envisagées, l'une est basée sur un algorithme utilisé dans Minecraft : https://tomcc.github.io/2014/08/31/visibility-1.html
L'idée est d'essayer d'éliminer les chunks qui ne sont pas visibles en avance en fonction de la position de la caméra et la façon dont les chunks sont connectés entre eux (par exemple un chunk ayant un mur sur tout son long ne considérera pas de visibilité entre les deux faces opposées à ce mur).
Une autre piste (qui peut être complémentaire) consisterait à faire de l'occlusion culling sur la carte graphique :
https://medium.com/@mil_kru/two-pass-occlusion-culling-4100edcad501
L'idée serait d'effectuer le rendu en deux temps, en ayant connaissance des objets rendus lors de la frame précédente :
- Les objets visibles lors de la frame précédentes seraient rendus (en partant du principe qu'ils ont de forte chances d'être toujours visibles) s'ils sont toujours dans le frustum, à l'aide d'un compute shader.
- Un hierarchical depth buffer (mipmaps conservatives) serait construit à partir du depth buffer généré à l'étape précédente.
- Un compute shader calculerait alors la visibilité (frustum culling et occlusion culling à partir du hierarchical depth buffer) de tous les objets et préparerait le rendu des objets restants (n'étant pas visibles à l'étape précédente).
L'information de quels objets sont visibles est alors réutilisé lors de la frame suivante.
0 Comments
No comments yet. Be the first to share your thoughts!
