- Dans les jeux 3D, les ombres n’apparaissent pas automatiquement comme dans la réalité : ce sont des effets visuels conçus pour sembler crédibles dans les limites des performances disponibles
- Les premiers jeux 3D géraient les ombres avec des techniques simples mais rapides, comme des images 2D, les blob shadows sous les pieds, des textures d’ombre générées à l’exécution, ou de la géométrie projetée sur un plan
- À mesure que les scènes sont devenues plus complexes, les textures projetées, les shadow maps et les ombres au stencil ont été utilisées, mais avec des contraintes comme des artefacts de résolution, des projections erronées sur les surfaces et un coût d’exécution difficile à prévoir
- L’éclairage statique des niveaux stockait les grandes ombres via les couleurs de sommets et les lightmaps, et les jeux modernes continuent d’utiliser des variantes de ces techniques classiques comme les Cascaded Shadow Maps, les light probes ou les capsule shadows
- Les ombres en ray tracing vont dans une direction plus naturelle, mais dans des scènes complexes comme celles d’Alan Wake 2, elles dépendent encore de l’échantillonnage et du denoiser ; les compromis continuent donc de définir le rendu final
Les ombres des jeux sont fabriquées différemment de celles du monde réel
- Dans la réalité, une ombre est le résultat d’une lumière occultée, et si une source lumineuse unique est lointaine, plusieurs ombres qui se chevauchent ne deviennent pas plus sombres
- Dans un jeu vidéo 3D, les ombres n’existent pas naturellement : les développeurs doivent donc les concevoir eux-mêmes en arbitrant entre performances et crédibilité visuelle
- Comme avec la blob shadow de Metal Gear Solid, un jeu peut aussi représenter des ombres qui deviennent plus sombres lorsqu’elles se superposent
Ombres 2D dessinées directement à l’écran
- La méthode la plus simple consiste à dessiner d’abord une image d’ombre 2D à l’écran avant de dessiner le personnage
- Winter Gold et MDK utilisent des images d’ombre 2D animées, sans mise à l’échelle
- Dans les scènes où le personnage reste devant tous les autres éléments, cette méthode très simple peut bien fonctionner
Blob shadow : le disque sombre sous les pieds
- En 3D, l’approche la plus simple consiste à dessiner un disque sombre sous le personnage
- Super Mario 64 utilise une blob shadow pour le personnage, et la fonction de decal du matériel Nintendo 64 sert en pratique à clipper l’ombre pour qu’elle n’apparaisse que sur le sol
- La blob shadow peut être animée selon la situation
- Dans Super Mario 64, l’ombre rétrécit pendant les sauts
- Dans Metal Gear Solid, la forme de l’ombre change
- Le problème de l’ombre qui dépasse d’une falaise peut aussi être traité en projetant le quad de la blob comme un decal
Ombres planes à base de render texture
- Si une blob n’est qu’une texture simple, on peut aussi rendre le personnage vu de dessus à l’exécution pour l’utiliser comme texture d’ombre
- Crash Bandicoot: Warped obtient de bons résultats avec des textures d’ombre générées à l’exécution
- Soldier of Fortune utilise la même approche, mais avec une résolution d’ombre plus faible, donc un résultat moins convaincant
- Cette méthode est différente du shadow mapping, qui produit une depth map depuis le point de vue de la lumière
- Ici, on utilise une image noir et blanc comme texture
- Le concept se rapproche d’une shadow map 1 bit
Ombres planes créées par géométrie
- Une méthode intuitive consiste à aplatir la projection de l’objet qui projette l’ombre sur un plan dans la direction opposée à la lumière, puis à rendre le même objet une seconde fois en noir
- Ces ombres restent généralement opaques afin de masquer les problèmes liés aux parties de l’objet qui se redessinent les unes sur les autres
- Cela fonctionne bien sur un sol plat, mais devient moins précis sur un terrain complexe
- F-19 Stealth Fighter dessine l’ombre de l’avion sur la piste
- On peut aussi voir des ombres planes dans les jeux basés sur GLQuake
- Kingpin: Life of Crime utilise correctement des ombres planes noires
- Dans Half-Life alpha 0.52, les problèmes de transparence sont visibles
Ombres planes sur le terrain
- Virus de David Braben fait projeter aux vaisseaux une ombre vue du dessus sur le terrain
- Interstate ’76 incline et étire les ombres planes pour suivre la pente du sol
- L’ombre traverse parfois le sol
- Globalement, le résultat reste assez convaincant
- En rendu logiciel, l’ombre apparaît légèrement transparente, tandis qu’en rendu accéléré matériellement, elle est totalement noire
- Interstate ’76 a aussi tenté de projeter l’ombre de gros objets comme des ponts, sans résultat totalement satisfaisant
Drop shadow par texture projetée
- Avec la texture projetée, la texture d’ombre créée plus haut est projetée non pas sur un plan, mais sur des surfaces de formes variées
- Conceptuellement, cela ressemble à un Bat-Signal envoyé du ciel vers le bas
- Toy Story 3: The Video Game est un exemple de cette approche, et quand une ombre recouvre une autre ombre, elle assombrit davantage la zone
- On peut obtenir des ombres très nettes, mais le résultat dépend fortement des surfaces
- Cela peut paraître étrange sur les surfaces verticales
- Dans certains cas, l’ombre peut aussi apparaître au plafond
- On peut voir ce type de cas dans des vidéos de gameplay de Sonic Adventure 2: Battle
- Comme l’ombre peut traverser les objets visibles, cette approche convient mieux à des cas particuliers
- Elle peut aussi très bien fonctionner pour les ombres d’arbres
Shadow map : la méthode devenue standard de fait
- La shadow map consiste pour le jeu à rendre une image de profondeur depuis le point de vue de la lumière, puis à lire cette image lors du rendu du monde pour déterminer les zones d’ombre
- L’implémentation est relativement simple car elle permet de réutiliser le code de rendu habituel
- La résolution limitée produit des artefacts bien connus comme le « Peter Panning » et le « shadow acne »
- Plusieurs techniques ont été proposées pour allouer davantage de surface de shadow map aux zones proches de la caméra
- Pour obtenir un rendu agréable, il faut généralement faire du tuning
Stencil shadow : nette mais coûteuse
- La stencil shadow permet de dessiner des ombres nettes sur n’importe quelle surface, avec un rendu film noir difficile à reproduire avec des shadow maps
- L’exemple le plus connu est Doom 3, célèbre pour ses pièces sombres
- Cette méthode découpe le monde entre zones éclairées et zones d’ombre à l’aide d’une géométrie invisible appelée shadow volume
- Le jeu n’applique alors l’éclairage qu’aux pixels qui ne sont pas à l’intérieur d’un shadow volume
- Son fonctionnement implique de redessiner le monde plusieurs fois
- D’abord, le monde entier est rendu avec un ambient lighting
- Ensuite, pour chaque light, on rend le shadow volume, puis on redessine le monde en faisant en sorte que seuls les pixels hors de l’ombre soient affectés
- Des stencil operations différentes sont définies pour les front faces et les back faces
- L’un des premiers cas commerciaux possibles est Severance: Blade of Darkness, qui montrait déjà de belles ombres en 2001
- Si cette technique est moins utilisée aujourd’hui, c’est notamment parce que son coût d’exécution est difficile à prévoir
- Le coût varie fortement selon la taille occupée par le shadow volume à l’écran
- Des brevets couvraient certains algorithmes optimisés
- Il existe des liens à ce sujet laissant penser qu’Id Software a trouvé une forme d’accord pour Doom 3
Ombres au stencil adoucies
- Une stencil shadow n’a pas besoin d’être forcément dure
- Silent Hill 2, sur PlayStation 2, rend des stencil shadows puis applique un flou pour obtenir des ombres douces
- Sur console, le résultat paraît presque parfait
Ombres de personnage simplifiées
- Il est possible de faire projeter une ombre à un modèle plus simple que celui affiché à l’écran
- Dans Zelda sur Nintendo 64, seuls les pieds de Link projettent une ombre, pas le reste de son corps
- Hyperblade utilise une approche originale dans son arène de hockey futuriste, où les joueurs projettent des ombres planes simples avec animation
Ombres intégrées à l’éclairage statique des niveaux
- Les couleurs de sommets et les lightmaps sont des techniques de stockage de l’éclairage d’un niveau, et dans beaucoup de jeux elles ont longtemps été le seul moyen d’afficher de grandes ombres
-
Couleurs de sommets
- Ico montre qu’il est possible de créer des ombres sophistiquées même avec un simple éclairage per-vertex à l’ancienne
- Sur des cartes low-poly, même des ombres nettes peuvent être représentées en vertex color
- Tony Hawk Pro Skater 2 obtient des résultats impressionnants avec cette approche pourtant simple
-
Lightmap
- La lightmap est une méthode classique pour stocker l’éclairage et les ombres d’un niveau
- Au lieu de stocker une couleur à chaque sommet, on utilise un second jeu de textures dédié uniquement à l’éclairage
- On peut faire varier la résolution selon les zones, pour rendre les ombres plus précises là où c’est nécessaire
- Cela consomme plus de mémoire que les couleurs de sommets
- Quake est souvent cité comme le jeu qui a popularisé les lightmaps
Des techniques classiques toujours utilisées dans les jeux modernes
- Les jeux modernes continuent d’utiliser des techniques d’ombre classiques selon le contexte
- Les Cascaded Shadow Maps, une variante du shadow mapping, servent à couvrir rapidement de grandes zones
- Les lightmaps peuvent être utilisées avec d’autres techniques comme les light probes
- Call of Duty utilise aussi des lightmaps
- On peut voir des exemples dans les slides Hemispherical Lighting Insights
- L’idée des modèles de personnage simplifiés perdure elle aussi
- The Last of Us crée des ombres douces de personnage à l’aide de sphères allongées
- Unreal Engine prend en charge les capsule shadows pour les personnages
- Les ombres projetées sont elles aussi encore utilisées
- Hot Wheels Track Attack rend un shadow mesh dans une texture, puis le projette sur le circuit
- Cela peut être observé dans le billet de blog des développeurs et dans des vidéos de gameplay
Les ombres en ray tracing ne sont pas parfaites non plus
- Dans les jeux qui cherchent à simuler un éclairage physiquement correct, les ombres apparaissent naturellement là où la lumière n’atteint pas la scène
- Contrairement aux shadow maps, même les petits détails géométriques peuvent projeter des ombres précises
- Une grande lampe produit naturellement des ombres douces, et la lumière indirecte peut éclaircir les coins sombres
- Beaucoup de temps et d’argent ont été investis dans les algorithmes et le matériel de ray tracing pour concrétiser cet objectif
- Mais les scènes des jeux modernes sont si complexes qu’il faut approximer la simulation
- Dans les ombres ray traced d’Alan Wake 2, chaque pixel n’est éclairé que par une seule light choisie aléatoirement
- Le résultat est ensuite envoyé à un denoiser, qui lisse intelligemment l’image bruitée
- Les ombres en ray tracing ne sont donc pas parfaites non plus, et leur apparence dépend elle aussi des compromis retenus
Le choix de l’absence d’ombre
- Certains jeux peuvent choisir de donner la priorité à d’autres éléments plutôt qu’aux ombres
- Ne pas implémenter d’ombres est aussi un choix explicite
1 commentaires
Commentaires sur Hacker News
Ce n’est pas une illusion d’optique ni une ambiance artistique : le ciel est bleu, et par temps clair, les ombres sont éclairées par la lumière réfléchie par le ciel, ce qui les fait paraître bleues.
Si vous regardez sous une voiture, vous verrez une ombre bleue bien nette là où le ciel est visible, puis elle devient de plus en plus proche du vrai noir à mesure que la carrosserie masque aussi la lumière du ciel.
En mélangeant cette ombre solaire bleue bien marquée avec une ombre de ciel AO douce et noire, on peut obtenir de très jolies ombres à faible coût.
Un bon moteur de rendu graphique fait ce genre de traitement. Les ombres devraient avoir une légère teinte de la couleur du ciel.
C’est pour ça que certaines anciennes captures d’écran de No Man's Sky m’avaient dérangé. Il me semble avoir vu des scènes où le ciel était vert mais les ombres violettes.
Comme les ombres rondes classiques, cela permet d’estimer où l’on va atterrir après un saut, tout en conservant la qualité visuelle d’une vraie ombre.
Si je me souviens bien, dans les environnements sombres, ils rendent même l’ombre plus claire que le sol afin qu’elle reste visible.
Du coup, les ombres apparaîtraient et disparaîtraient au chargement et au déchargement des modèles de joueurs, donc on ne peut pas voir leur ombre tant qu’on ne voit pas leur corps.
Valorant a délibérément choisi un rendu extrêmement simple pour atteindre des fréquences d’images très élevées même sur du matériel d’entrée de gamme. Non seulement il n’y a pas d’ombres dynamiques, mais il n’y a pas non plus d’éclairage dynamique du tout, ni de transparence alpha nulle part.
Même les fumigènes, qui seraient normalement rendus de façon transparente, sont stylisés de manière à pouvoir être entièrement opaques, parce que c’est plus rapide. Indépendamment de la triche, il est très probable que les ombres dynamiques auraient de toute façon été supprimées pour des raisons de performances.
Avec l’adoption du ray tracing, je pense que les sources lumineuses surfaciques et les ombres douces vont devenir la norme. Si vous avez le matériel nécessaire, jetez un œil à Quake 2 RTX : cela donne une bonne idée de ce à quoi l’avenir pourrait ressembler.
Enfin, j’ai ajouté ce blog à ma liste de ressources graphiques : https://github.com/aaron9000/c-game-resources
https://www.youtube.com/watch?v=7BvtML5dIuI
Le PowerVR PCX1 prenait en charge les volumes d’ombre en matériel, avec une implémentation plus efficace que les ombres stencil standard. Au lieu de dessiner la scène plusieurs fois, il effectuait essentiellement une passe préalable de profondeur seule en matériel dans un tampon profondeur/stencil on-chip afin de déterminer les pixels visibles, testait les volumes d’ombre pour savoir quels pixels se trouvaient dans l’ombre, puis procédait à l’échantillonnage des textures et au shading.
La luminosité de l’éclairage était ajustée selon le résultat des volumes d’ombre, et comme seuls les pixels visibles étaient shadés, l’overdraw ne gaspillait pas inutilement de bande passante en fetch de textures.
La Dreamcast, basée sur le successeur du PCX1, comptait aussi beaucoup de jeux utilisant des volumes d’ombre. L’implémentation Dreamcast était plus flexible : les volumes pouvaient modifier non seulement l’éclairage, mais aussi la texture utilisée, le mapping UV, et même l’équation de blending des polygones transparents.
J’ai aussi essayé de faire des ombres douces sur DC (https://imgur.com/a/DyaqzZD vers la fin), mais comme cela revient à une approche stencil plus standard qui redessine les ombres plusieurs fois, la charge sur le fill rate est assez élevée.
Si deux lampes éclairent trois personnes, cela produit six ombres. Là où les six ombres se chevauchent, on obtient du « noir », ou seulement la lumière ambiante.
Aux autres endroits où les ombres se chevauchent moins, il se forme un gradient d’éclairement.
Si vous êtes dans l’ombre de la source A et dans l’ombre de la source B, d’où viendrait la lumière ? Il ne reste que l’ambiante, et s’il n’y en a pas, c’est noir.
Il précise la condition suivante : « comme il n’y a qu’une seule source lumineuse, et qu’elle est assez éloignée, une ombre est simplement l’absence de lumière ».
Cette ombre était un autre petit élément qui donnait à ce jeu une formidable impression de vitesse.
https://imgur.com/a/hOgxr7a
https://www.mobygames.com/game/6233/f29-retaliator/
Je me souviens encore d’un moment, de nuit, dans une ruelle, alors que je volais une voiture. Au moment précis où le personnage joueur montait dans la voiture, un policier a surgi au coin de la rue et m’a « vu » voler le véhicule ; il a sorti son arme au moment même où les phares se sont allumés, projetant l’immense ombre du policier en mouvement sur un mur voisin.
Le chevauchement des ombres dans MGS n’est pas complètement faux, à cause de la lumière ambiante, de la diffusion et d’autres phénomènes d’illumination globale.
Dire que « Mirror’s Edge (2008, PC) est essentiellement Lightmaps: The Game » est drôle, mais juste. C’était un jeu impressionnant à l’époque, et il l’est encore aujourd’hui.
Je pense qu’il a été injustement sous-estimé à l’époque. Peut-être parce qu’il était plus court que ses concurrents.