1 points par GN⁺ 2024-10-31 | 1 commentaires | Partager sur WhatsApp
  • 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
  • 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

 
GN⁺ 2024-10-31
Commentaires sur Hacker News
  • Ce que je préfère, c’est le fait que les ombres en extérieur soient bleues.
    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.
    • C’est exact, et c’est si subtil que beaucoup de gens ne le remarquent même pas.
      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.
    • Les peintres apprennent souvent à peindre les ombres en extérieur avec une légère teinte violette, afin de maximiser le contraste avec la dominante jaune de la lumière du soleil.
    • Je viens aussi de le voir dans un tableau hivernal de Monet : https://news.artnet.com/art-world/monet-the-magpie-three-fac...
  • J’aime bien la variante utilisée dans les jeux de plateforme Nintendo récents. Comme la plupart des jeux actuels, ils utilisent des shadow maps, mais l’ombre du personnage joueur est ajustée pour toujours tomber directement sous lui, indépendamment de la position réelle de la source lumineuse.
    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.
  • Je pensais que si Valorant m’avait toujours paru médiocre visuellement, c’était parce que les joueurs ne projettent pas d’ombre. J’ai appris il y a quelques jours que c’est parce que, pour réduire la triche, le serveur n’envoie pas la position des autres modèles de joueurs au client tant qu’il n’a pas déterminé qu’ils sont visibles.
    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.
    • Tu as probablement vu quelque chose que j’ai écrit. Je ne sais pas si Valorant a désactivé les ombres des joueurs à cause de son système anti-triche, mais cela simplifie clairement l’anti-triche.
      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.
    • Le serveur ne pourrait-il pas corriger ça en vérifiant aussi la visibilité de l’ombre ? Je ne connais pas bien Valorant, mais ne pas se cacher avec une source lumineuse dans le dos pourrait effectivement devenir un élément stratégique.
  • Bon article, avec beaucoup de références à des jeux qui jouent sur la nostalgie. Je me souviens encore d’avoir été impressionné par les ombres dans Zelda sur N64 il y a longtemps.
    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
    • Si des tours de passe-passe à base de fumée et de miroirs suffisent à produire des ombres assez bonnes, il vaut mieux continuer à utiliser ces techniques de trompe-l’œil pour des raisons de performances.
  • À propos de la phrase « le premier jeu sorti avec des ombres stencil est probablement Severance: Blade of Darkness en 2001, et ses ombres sont excellentes », Revolte pour PowerVR PCX1 utilisait des ombres stencil en 1996.
    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.
  • Pour voir l’état de l’art des techniques d’éclairage dans les jeux vidéo, regardez la récente démo UE 5.5 MegaLights d’Epic : https://youtu.be/p9XgF3ijVRQ?si=GcU0kP33iKQh_5Ge
  • Quand il y a plus d’une source lumineuse, les ombres deviennent effectivement plus sombres lorsqu’elles se superposent.
    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.
    • Ce n’est pas exact. Dès que deux ombres se croisent, une pour chaque source lumineuse, il ne reste que du noir ou de la lumière ambiante.
      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.
    • Bonne observation, mais l’article n’est pas faux. C’était même assez intéressant.
      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 ».
  • À propos de « certains premiers simulateurs de vol dessinent une ombre plate vue de dessus quand on est sur la piste. En faisant mes recherches, j’espérais trouver un exemple où l’ombre était visible en vol, mais je n’en ai pas trouvé », F-29 RETAL, ou F29 Retaliator, F29, en est un exemple.
    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/
  • Mon moment d’ombre le plus marquant, c’était en jouant à GTA IV. J’avais un PC de jeu assez puissant, et les ombres en temps réel produites par les phares de la voiture du joueur étaient globalement excellentes.
    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.
  • Bon article, agréable à lire.
    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.
    • Si vous voulez qu’un jeu reste beau longtemps, rien ne vaut l’illumination globale précalculée. C’est le premier jeu où j’ai vu de vraies ombres bleues en plein jour. Cela dit, elles provenaient de la géométrie des niveaux.
      Je pense qu’il a été injustement sous-estimé à l’époque. Peut-être parce qu’il était plus court que ses concurrents.