Dans les jeux AAA modernes avec environnement ouvert et beaucoup de contenu statique (par exemple: crysis), comment s'effectue l'élimination des occlusions?

19

J'ai deux idées en tête:

1) La scène est rendue dans un tampon invisible, en utilisant des modèles à faible résolution et à faible nombre de polygones (ou même en utilisant uniquement des volumes englobants comme des cubes ou des sphères). Le tampon est ensuite vérifié pour savoir ce qui est visible ou non. Avant de rendre la scène basse résolution, une élimination du tronc pourrait être appliquée, pour supprimer déjà autant d'objets que possible.

2) Un outil est exécuté sur la carte statique et effectuera un tracé de rayons complexe (et donc lent) pour savoir pour certaines positions 3D sur la carte ce qui est visible et ce qui ne l'est pas. Toutes ces informations sont ensuite stockées d'une manière efficace qui peut être utilisée ultérieurement lors de l'exécution (par exemple: un octree). Cette solution ne fonctionnerait que pour les maillages statiques (par exemple: la construction) ne déplaçant pas d'objets.

tigrou
la source
3
Les questions "Comment le jeu <X> a-t-il fait cela" sont explicitement hors sujet selon la FAQ . Modifiez peut-être cette question pour demander comment vous pouvez procéder à l'élimination des occlusions, plutôt que comment quelqu'un d'autre le fait? (En outre, fournir vos propres réponses dans le corps de la question donne l'impression que vous demandez une discussion ou une liste, plutôt qu'une réponse )
Trevor Powell

Réponses:

13

La réponse de Jovan est excellente, mais je voulais juste ajouter qu'il y a parfois un support matériel pour poser la question "Cette géométrie a-t-elle réellement rendu des pixels?" (votre idée # 1) Ce sont des requêtes d'occlusion - c'est un bon article sur les gemmes GPU à leur sujet ici

Ceci est assez similaire à votre idée n ° 1, sauf que vous n'avez pas besoin d'un tampon invisible et peut être plus efficace ou plus simple que de vérifier le tampon. L'article lié fait un excellent travail en approfondissant le fonctionnement des requêtes d'occlusion matérielle.

Le moteur Unreal exploite les requêtes d'occlusion matérielle sur les plates-formes qui le prennent en charge, en plus d'autres techniques telles que la suppression des troncs de vues et le pré-calcul de la géométrie statique qui est occlus.

Bryan Phelps
la source
Les requêtes d'occlusion matérielle sont en fait un peu plus courantes que «parfois» de nos jours - à l'exception peut-être de certains GPU mobiles, elles peuvent être considérées comme omniprésentes.
Maximus Minimus
ne sont-ils pas très lents?
Quonux
12

1) La scène est rendue dans un tampon invisible, en utilisant des modèles à faible résolution et à faible nombre de polygones (ou même en utilisant uniquement des volumes englobants comme des cubes ou des sphères). Le tampon est ensuite vérifié pour savoir ce qui est visible ou non. Avant de rendre la scène basse résolution, une élimination du tronc pourrait être appliquée, pour supprimer déjà autant d'objets que possible.

Cette technique est utilisée par Killzone, et est détaillée dans leur présentation Practical Occlusion Culling sur PS3 . Ils utilisent également des portails pour les espaces intérieurs.

Une chose à garder à l'esprit sur les grandes cartes d'extérieur est que la simplification du maillage est aussi importante que l'élimination des occlusions, de sorte qu'une certaine variation des champs de hauteur avec un clipmapping géométrique est souvent utilisée. Voici un bon papier qui couvre également l'abattage. GPU Gems 2 en a une implémentation .

Jovan
la source
5

Au moins les deux premiers jeux Quake ont utilisé la stratégie 2; Je ne sais pas si les moteurs idTech l'utilisent encore. Le monde accessible est divisé en espaces convexes organisés en une structure de données arborescente ("partition d'espace binaire"), et pour chaque nœud de l'arbre il y a un vecteur de bits représentant les autres nœuds visibles depuis ce nœud ("ensemble potentiellement visible").

Russell Borogove
la source
1
Si vous allez faire appel à Quake, vous pourriez aussi bien faire appel à la technologie de rendu de Thief;) - nothings.org/gamedev/thief_rendering.html
Jovan