LOD (Level of Detail) signifie gérer des objets dans différentes échelles d'affichage, qui pourraient être divisées en deux parties. Cependant, vous pouvez en utiliser un et cela suffira dans la plupart des cas.
Afficher / masquer les calques (groupe d'objets du même type) en fonction de la magnitude (échelle d'affichage).
Méthode basée sur la géométrie algébrique, appelée Généralisation (qui est un algorithme pour simplifier les polygones). regardez l'image suivante
La méthode la plus célèbre et la plus efficace pour généraliser (simplifier) un maillage polygonal est connue sous le nom de théorème de polyèdre de Descartes-Euler (équation 4.5 désolé si je fais référence à un livre, ce que je pouvais faire de mieux) et est utilisée par la plupart des bases de données spatiales par exemple des modules PostGIS dans PostgreSQL. Il supprime simplement les petits côtés d'un polygone et en fait un très arrondi (image ci-dessus).
Pour implémenter LOD dans un jeu, vous devez enregistrer et gérer l'échelle de votre carte (scène) pendant les opérations de zoom avant / arrière. L'échelle passe de zéro à l'infini et vous devez la diviser en un nombre particulier de plages, par exemple quelque chose comme ceci:
- 1 / zéro = infini à 1/50
- 1/50 à 1/100
- 1/100 à 1/1000
- 1/1000 à 1 / infini = 0
Ensuite, vous devez définir quels types de vos objets (calques) doivent être visibles ou invisibles dans chacune des plages ci-dessus. Par exemple, un petit type d'objet comme une vanne de prise d'eau ne devrait pas être visible lorsque l'utilisateur est dans la quatrième plage, car il sera très petit à cette échelle et ne pourra pas être discriminé, donc peu importe si vous sautez le dessin sur le écran.
Ainsi, lorsqu'un utilisateur utilise un zoom avant et un zoom arrière pour modifier le grossissement, il se déplace dans les limites ci-dessus de l'une à l'autre plage, et votre jeu utilise ces échelles d'affichage pour gérer le niveau de détails en affichant ou en masquant des objets sur la scène. Cela fait une solution discrète que les objets s'estompent soudainement pendant votre opération de zoom arrière, mais avec les échelles d'affichage et les plages d'agrandissement définies avec soin, l'utilisateur ne ressentira rien.
Le groupe de 4 gammes ci-dessus n'est qu'un exemple et vous devez trouver le meilleur pour votre propre cas par essais et erreurs. Il n'y a pas de règle pour ça.
Parfois, les jeux utilisent leurs propres méthodes LOD, Subway Surfer pour l'instant, montre un petit rectangle sans texture pour montrer un bâtiment de loin, et en se rapprochant soudainement, il obtient de la texture, le joueur le ressent. Vous n'avez pas parlé de votre système de projection, ce qui est très important, vous n'avez pas non plus parlé du type de jeu que vous créez.
Supposons cependant que vous implémentiez un jeu 3D complet avec openGl et que vous souhaitiez filtrer certains maillages avant de les transférer sur du matériel graphique, je suis sûr que cela vous aidera à réduire les opérations de liaison / dissociation avec des objets tampons et des tableaux de vertex (VBO, VAO) tout en traitant d'OpenGl.
Utiliser uniquement une gestion des couches ou simplement implémenter la généralisation d'Euler
Dans la plupart des cas, il n'est pas nécessaire d'implémenter un algorithme de généralisation, et le filtrage des objets fonctionne et vous permet d'obtenir l'efficacité (taux de rafraîchissement) dont vous avez besoin, mais cela dépend totalement, au cas par cas. Bien qu'il s'agisse d'un algorithme simple qui supprime simplement les petits côtés d'un polygone, vous devez définir un seuil qui est le produit de la magnitude et d'un nombre constant, de sorte que les plus grands côtés sont filtrés d'un point de vue beaucoup plus éloigné.
Oublier le changement de couche et n'implémenter que l'algorithme de généralisation Eulers, fournit une méthode très soignée et continue dans laquelle vous vérifiez simplement chaque côté et chaque ligne par rapport à un seuil prédéfini et ne les affichez que dans le cas où ils sont assez grands pour être discriminés à l'écran.
PS: le grossissement est un nombre flottant> 0 qui est égal à 1 / échelle et l'échelle est généralement <1 car une échelle 1: 1 signifie que vous avez des longueurs réelles dans votre jeu.