Pourquoi certains jeux montrent-ils que les lumières brillent à travers les murs?

28

Dans certains jeux, je vois des lumières qui brillent à travers les murs, même si je règle la qualité vidéo à des niveaux élevés.

Quelques exemples de jeux auxquels j'ai joué récemment sont Borderlands 2 (explosions de missiles) et Call of Cthulhu (lanternes; le jeu utilise même Unreal Engine 4).

Est-ce un bug ou des raisons de performances?

Exemple Borderlands 2: https://youtu.be/9bV83qA6_mU?t=419 (quelques fois, mais rapidement)

Question bonus: dans ce dernier cas, existe-t-il un moyen d'utiliser à bon marché le lancer de rayons pour résoudre le problème? Je suppose que la RT coûteuse a définitivement résolu le problème, mais je me demande si elle peut également être utilisée sous une forme "bon marché" pour résoudre ce problème spécifique.

Marcus
la source
21
Une image vaut 1000 mots.
Evorlor
8
Je devrais aller jouer pour tester, mais est-ce vraiment de la lumière qui passe, ou est-ce un effet de particules incandescent? Particulièrement votre exemple d'une explosion de missile, je pourrais imaginer un effet de particules additif "feu" qui est très susceptible d'ignorer les collisions. Les lanternes pourraient également faire la même chose pour créer un halo visible, je suppose ...
AC
@Evorlor a ajouté un exemple.
Marcus

Réponses:

43

En développant la bonne réponse de TomTsagk, j'ai pensé que cela pourrait aider à décrire un peu plus pourquoi les jeux fonctionnent comme ça.

La lumière dans les jeux ne "voyage" pas vraiment de la source, à la surface, à la caméra, s'obstruant en cours de route.

Pour déterminer la luminosité de chaque pixel d'une surface en fonction d'une lumière donnée, nous utilisons (ou approximons) une formule mathématique qui utilise la direction opposée de la surface et la direction à partir de ce point de la surface vers la source de lumière. C'est tout, juste la direction dans laquelle il brille - nous ne jetons généralement pas de rayon pour vérifier si la lumière atteint réellement ce pixel, car le faire pour chaque pixel de l'écran et vérifier le rayon par rapport à toute la géométrie détaillée de la scène est généralement encore trop cher pour les jeux en temps réel.

Ainsi, par défaut, aucune lumière de jeu ne projette d'ombres. La direction vers une lumière reste la même, même s'il y a un shadowcaster, donc les calculs nous donnent la même valeur de luminosité.

Si nous voulons simuler des ombres, nous devons le faire séparément. Une méthode courante consiste à utiliser ce qu'on appelle une carte fantôme. Dans cette version, avant d'ombrer notre scène, nous rendons d'abord la scène du point de vue de chaque lumière, comme si cette lumière était une caméra, stockant la profondeur de chaque pixel qu'elle voit dans une texture hors écran.

Ensuite, lorsque nous ombrons la scène, nous pouvons comparer la distance mathématique de ce pixel de la source de lumière par rapport à la profondeur que nous avons enregistrée au pixel correspondant dans la carte d'ombre. Si la profondeur de la carte d'ombre est plus petite, cela signifie qu'il y a une autre surface entre ici et la lumière, et nous dessinons ce pixel dans l'ombre à la place.

Il y a beaucoup de techniques intéressantes pour rendre ces ombres basées sur une carte plus belles, avec moins d'artefacts / alias, mais je vais les passer en revue pour l'instant. Il suffit de dire qu'ils ne sont généralement pas gratuits non plus.

Parce que cela nécessite de restituer (jusqu'à) toute la scène à partir de la perspective de chaque lumière - jusqu'à six fois s'il s'agit d'une lumière ponctuelle qui brille dans toutes les directions {nord, sud, est, ouest, haut, bas}, et nous devons re -Rendre la carte fantôme chaque fois que quelque chose bouge, cela peut devenir très cher.

Ainsi, les jeux concentrent souvent leur budget de rendu sur les lumières les plus importantes de la scène - comme la lumière solaire directionnelle - pour s'assurer qu'elles ont de belles ombres. Les petites lumières de courte durée et mineures comme le flash d'une explosion sont souvent pardonnables si elles s'échappent un peu des occluseurs. Souvent, cela est plus agréable pour les joueurs qu'un accroc dans le framerate en raison d'une augmentation soudaine du coût de rendu de tout le rendu et du calcul de la carte d'ombre supplémentaire. Surtout s'il s'agit d'une scène d'action occupée où la fluidité importe plus que la perfection des pixels.

DMGregory
la source
3
Une autre ride est que s'il est trivial de déterminer si une source de lumière est devant ou derrière une surface, empêcher les surfaces de briller lorsqu'elles sont éclairées par l'arrière donnera souvent des résultats étranges.
supercat
Et cela est particulièrement vrai avec les effets de particules (ce qui est probablement l'explosion, au moins partiellement), car les particules doivent être particulièrement bon marché à manipuler pour être très utiles.
Luaan
2
Les lumières et les particules sont deux choses différentes. Une particule peut également "fuir" à travers un obstacle, mais pour des raisons complètement différentes. Parfois, un système de particules comprendra également une lumière pour aider à vendre l'effet (pensez à un feu de camp ou à un essaim de lucioles), mais une lumière à l'intérieur d'un effet de particules n'est toujours qu'une lumière, généralement pas une variante spéciale.
DMGregory
2
Une autre approche des shadow maps est les volumes d'ombre , qui corrigent le problème d'alias, mais sont plus chers: nécessitant un rendu de géométrie supplémentaire (un nouveau polygone par contour de silhouette de chaque objet pour chaque source de lumière), ainsi que des passes de rendu supplémentaires. Je m'attendrais à ce que l'approche de cartographie soit assez bonne pour la plupart des situations.
DarthFennec
22

Pour faire court, cela se produit pour des raisons de performances.

Lorsqu'il y a une lumière sur l'écran, par défaut, elle brille sur tous les objets (obstrués ou non), donc le jeu devra faire des calculs supplémentaires pour voir quel objet est affecté par quoi.

C'est plus facile à résoudre sur les objets statiques en utilisant un éclairage statique et cuit, mais ce n'est pas la même chose sur les lumières dynamiques, comme les explosions comme vous l'avez noté.

Pour votre question bonus, ray tracing et cheap ne vont pas ensemble sur la même phrase. La seule raison pour laquelle le lancer de rayons n'a pas été intégré jusqu'à présent est la performance. En supposant que toutes les lumières utilisent le lancer de rayons, ce problème serait "résolu", mais au détriment des performances.

TomTsagk
la source
6
Le lancer de rayons est-il donc plus important pour les films CGI que pour les jeux en temps réel?
Accumulation
21
@Acccumulation C'est exact. Le rendu d'une seule image d'un film peut prendre des heures, tandis qu'un jeu n'a que des millisecondes.
NobodyNada
16
Cela dit, les jeux explorent de plus en plus l'utilisation du raytracing ou du raymarching en tandem avec les techniques de pixellisation, laissant le rasterizer faire ce qu'il est bon et les rayons faire ce qu'ils sont bons. Ce n'est pas le lancer de rayons complet de chaque pixel, mais vous pouvez toujours obtenir de superbes effets de cette façon.
DMGregory
2
@DMGregory En effet, des jeux comme Duke Nukem 3D utilisaient déjà une variante très simplifiée de lancer de rayons - bien qu'elle n'ait pas été utilisée pour l'éclairage dynamique, et qu'elle ne trace définitivement pas chaque pixel à l'écran (généralement, cela a été fait pour chaque colonne pixels), et les reflets et la transparence étaient encore un cas particulier plutôt que par défaut. Le rendu 3D logiciel a toujours joué avec des approches similaires, c'est la 3D matérielle qui a fermé cette avenue (jusqu'à présent).
Luaan
@Acccumulation Raytracing se décline à différents niveaux.Alors que les jeux peuvent, en plus du matériel haut de gamme, tirer des rayons primaires, ils ne font toujours pas assez de rebonds secondaires ou plusieurs rebonds par pixel. Donc, même si vous faisiez un lancer de rayons, vous auriez toujours des compromis de performances similaires. Donc, les traces principales des capacités ne signifient toujours pas que vous pouvez vous permettre de rendre toutes les lumières secondaires.
joojaa