Quel est l'état de l'art en LOD géométrique dans les jeux?

15

Comment les jeux modernes font-ils un niveau de détail géométrique pour les maillages d'objets tels que les personnages, le terrain et le feuillage? Ma question comporte deux parties:

  1. À quoi ressemble le pipeline d'actifs? Les artistes fabriquent-ils un modèle high-poly qui est ensuite décimé? Si oui, quels algorithmes de décimation sont les plus populaires? Les maillages LOD sont-ils parfois faits à la main?
  2. Comment les moteurs effectuent-ils la transition entre différents LOD d'objet au moment de l'exécution? Y a-t-il des transitions douces ou progressives?

La réponse pourrait être «différents studios utilisent des techniques différentes». Dans l'affirmative, veuillez identifier certaines des pratiques les plus courantes. Ce serait également bien si vous pouviez me diriger vers des livres blancs / diapositives qui couvrent des exemples spécifiques.

ap_
la source
1
Les avancées de SIGGRAPH 2014 dans le rendu en temps réel ont une discussion très intéressante sur les surfaces de subdivision de Call of Duty. Tu devrais y jeter un coup d'oeil. Au lieu d'avoir un maillage en poly élevé qui est fait en poly inférieur, ils ont défini des formes analytiquement et ajouté plus de triangles au besoin
Alan Wolfe
Nous pouvons parler de l'état de l'art dans les algorithmes LOD et les structures de données ici, mais si la question est de savoir comment les jeux modernes le font spécifiquement, vous pourriez avoir plus de chance de demander dans gamedev.se: gamedev.stackexchange.com
Pseudonyme
3
Je doute que. Le jeu dev est très léger graphique. Il s'agit principalement de questions d'unité et de java avec des questions de recherche de chemin et de fréquence d'images fixes: p
Alan Wolfe
1
@Alan, Activision a utilisé beaucoup d'algorithmes à la pointe de la technologie pour créer un vrai jeu stratégique 3D et non sn isométrique Sprite base one que je suis d'accord avec cela, mais ils ont fait un excellent travail en COD mais il est toujours un peu lent et paresseux même aux premiers niveaux avec un petit nombre d'actifs (je parle de leur jeu mobile sur un Iphone 5s). Je pense que vous devez apprendre les fonctionnalités expertes d'OpenGLES et les couches sous-jacentes pour réussir à écrire un tel jeu.
Iman
Je parle de leur version console de Call of Duty au cas où cela clarifierait les choses.
Alan Wolfe

Réponses:

22

Pour la géométrie LOD, la plupart des jeux basculent simplement entre un certain nombre de maillages LOD prédéfinis. Par exemple, "Infamous: Second Son" utilise 3 mailles LOD ( Adrian Bentley - "inFAMOUS: Second Son engine postmortem", GDC 2014 ) et "Killzone: Shadow Fall" utilise 7 mailles LOD par personnage ( Michal Valient - "Killzone: Shadow fall" démo post-mortem ", Devstation2013 ). La plupart d'entre eux sont générés, mais les plus importants (comme le personnage principal) peuvent être fabriqués à la main. Les maillages sont souvent générés à l'aide d'un middleware Simplygon populaire, mais parfois ils sont simplement générés par des graphistes dans leur package 3D préféré.

Les jeux avec une grande distance de tirage utilisent en outre des imposteurs pour le feuillage, les arbres et les bâtiments élevés ( Adrian Bentley - "inFAMOUS: Second Son engine postmortem", GDC 2014 ). Ils utilisent également des niveaux de détail hiérarchiques, qui remplacent un ensemble d'objets par un. Par exemple, dans "Just Cause 2", les arbres sont d'abord rendus individuellement sous forme de maillages LOD normaux, puis individuellement sous forme d'imposteurs et enfin sous la forme d'un maillage forestier fusionné unique ( Emil Persson, Joel de Vahl - "Populating a Massive Game World", Siggraph2013 ) et dans Les parties éloignées du "Sunset Overdrive" du monde sont remplacées par un seul maillage généré automatiquement hors ligne ( Elan Ruskin - "Streaming Sunset Overdrive's Open World", GDC2015 ).

Un autre composant d'un système LOD est la simplification des matériaux et des shaders. Par exemple, "Killzone: Shadow Fall" désactive l'espace tangent et le mappage normal pour les LOD distants ( Michal Valient - "Killzone: Shadow fall demo postmortem", Devstation2013 ). Ceci est généralement implémenté en désactivant globalement un ensemble de fonctionnalités de shader par LOD, mais pour les moteurs avec des graphiques de shader, où les artistes peuvent créer des shaders personnalisés, cela doit être fait manuellement.

Pour les transitions LOD, certains jeux changent simplement de maillage et certains utilisent le tramage pour des transitions LOD fluides - au niveau du commutateur LOD, deux maillages sont rendus: le premier disparaît progressivement et le second se fane ( Blog Simon Schreibt - "Assassins Creed 3 - LoD Blending" ). Les techniques classiques de maillage progressif du processeur ne sont pas utilisées car elles nécessitent une mise à jour et un téléchargement coûteux du maillage vers le GPU. La tessellation matérielle est utilisée dans quelques titres, mais uniquement pour affiner un niveau de détail le plus détaillé, car il est lent et en général, il ne peut pas remplacer les niveaux de géométrie prédéfinis.

Les LOD de terrain sont traités séparément afin d'exploiter ses propriétés spécifiques. Le LOD de géométrie du terrain est généralement implémenté à l'aide de clipmaps ( Marcin Gollent - "Création et rendu de paysage dans REDengine 3" ). Les LOD des matériaux de terrain sont traités de la même manière que les LOD maillés ou en utilisant une sorte de texture virtuelle Ka Chen - «Rendu de texture virtuelle adaptatif dans Far Cry 4 .

Enfin, si vous êtes intéressé à voir des pipelines de LOD de jeu réels, parcourez simplement la documentation de l'un des moteurs de jeux modernes: Unreal Engine 4 - "Création et utilisation de LOD" , CryEgnine - LOD statique et Unity - LOD .

Krzysztof Narkowicz
la source
1
les moteurs de jeu ont généralement un ensemble de méthodes prédéfinies et vous ne pouvez pas entrer dans le noyau pour changer réellement l'algorithme LOD. ai-je raison? Je parlais du cas où vous écrivez un jeu vous-même avec le cadre OpenGL ou SpriteKit, je ne sais pas si l'on est capable de personnaliser l'algorithme de LOD dans Unity ou Unreal, est-ce possible?
Iman
3

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.

  1. Afficher / masquer les calques (groupe d'objets du même type) en fonction de la magnitude (échelle d'affichage).

  2. 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

    généralisation

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. 1 / zéro = infini à 1/50
  2. 1/50 à 1/100
  3. 1/100 à 1/1000
  4. 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.

Iman
la source
Votez
Iman
Je n'ai pas déçu mais une partie de moi se demande quel est l'état de l'art ici? Donc je ne peux pas voter non plus.
joojaa
1
J'ai voté contre parce qu'il était difficile à lire et à mon humble avis, il n'est pas pertinent pour les LOD dans les jeux. Après un nouvel examen, j'ai décidé d'annuler mon donwvote en augmentant le taux de vote et en ajoutant simplement ma propre réponse.
Krzysztof Narkowicz
L'état de l'art suppose un travail très remarquable, mais différentes méthodes résultent différemment dans divers cas, par exemple Call of duty a la gestion des calques et le mipmaping, cependant Dear haunting (DH 2014) utilise un fond avec parallaxe et un mipmaping qui a été rendu généralisé textures. Subway Surfer est une histoire complètement différente, et je dis l'état de l'art à tous, même si Subway Surfer dessine discrètement des bâtiments et d'autres objets urbains ou Call of duty est un peu lent en zoomant ou en panoramique. Je pense qu'ils sont tous meilleurs dans leur cas.
Iman
3

Iman a déjà préparé une réponse complète mais je souhaite y ajouter quelque chose

LOD peut être fait de deux manières différentes

  1. Continu qui est appelé CLOD et est une optimisation de maillage polygonal
  2. Discrète qui, presque tous les autres algorithmes que l'optimisation du maillage polygonal, est considéré comme faisant partie de ce groupe.

Par exemple, le mipmaping est un bon, rapide mais lourd qui appartient au groupe secondaire ci-dessus

ici vous pouvez trouver une bonne explication au mipmaping et au code d'implémentation avec OpenGl.

Imzich
la source