1 points par GN⁺ 2023-12-21 | 1 commentaires | Partager sur WhatsApp
  • Même à l’époque des jeux 2D, où la vraie 3D était difficile, les développeurs créaient une impression de profondeur avec le défilement parallaxe et le Mode 7 de la SNES ; le Perspective Mode de Diablo 2 illustre cette lignée au sein d’un ARPG 2D
  • Don’t Starve produit des scènes en relief tout en traitant les buissons, les arbres et les ennemis comme des assets plats ; Diablo 2, jeu 2D de 2000, donne une impression similaire en combinant rendu du sol et déformation de sprites
  • Le Perspective Mode de Diablo 2 ne se contente pas de déplacer des sprites : il crée une déformation donnant l’impression que tout l’écran est incliné vers l’horizon, faisant apparaître un point de fuite et une perspective
  • Blizzard divisait les sprites DT1 en fragments de 32×32 px et cherchait à réduire les interstices dans la scène en déformant différemment les objets comme les murs et les clôtures selon leur valeur d’orientation
  • D’après des informations publiées plus tard sur Gamasutra, le Perspective Mode nécessitait une carte graphique 3D ; il créait profondeur et effet de parallaxe en faisant légèrement pivoter, mettre à l’échelle et étirer les textures de mini-tuiles, et sa mise en œuvre a pris environ une à deux semaines

Premières techniques pour donner à la 2D une apparence 3D

  • Dans les années 1990, les jeux ont commencé à passer de la 2D à la 3D, mais avant la vraie 3D, les développeurs utilisaient déjà diverses astuces pour créer des écrans donnant l’illusion de la 3D
  • La méthode la plus représentative est l’effet de parallaxe
    • Selon la distance, certains éléments se déplacent rapidement et d’autres plus lentement, ce qui crée une impression de profondeur
    • Moon Patrol, en 1982, produisait déjà un fort relief simplement en faisant bouger plusieurs plans à des vitesses différentes
  • Le Mode 7 de l’ère SNES n’était pas de la vraie 3D, mais il manipulait la texture du sol pour donner l’impression d’une image en perspective
    • Selon les explications liées à la GBA, même sans matériel 3D réel, il était possible d’imiter la 3D en modifiant les valeurs d’échelle et de déplacement à chaque scanline
    • Cette approche s’apparente à une manipulation de texture qui transforme la hauteur en impression de profondeur

L’utilisation d’assets plats dans Don’t Starve et Diablo 2

  • Aujourd’hui, tous les assets peuvent être rendus en vraie 3D, mais toutes les scènes n’ont pas besoin de modèles en relief
  • Les buissons, les arbres et les ennemis de Don’t Starve sont des assets plats, mais le résultat visuel est suffisamment convaincant
  • Diablo 2, ARPG 2D sorti en 2000, est un cas qui évoque à la fois la parallaxe à la Moon Patrol et la représentation du sol façon Mode 7
  • Avec ses réglages par défaut, Diablo 2 affiche une image purement 2D
    • Il n’y a pas de perspective
    • Il n’y a pas non plus d’effet de parallaxe
  • Lorsque le Perspective Mode est activé, les mêmes pixels du sol ne restent pas continuellement masqués par les colonnes ; les assets plats semblent se déplacer dans un espace doté de profondeur, comme dans Don’t Starve

Méthode d’analyse du Perspective Mode de Diablo 2

  • Comme il existe très peu d’informations officielles sur Diablo 2, le Perspective Mode a été examiné à l’aide d’outils permettant d’extraire et d’analyser les fichiers MPQ et DT1
    • MPQ Editor a servi à extraire les fichiers DT1 depuis les MPQ
    • DT1 Tools a servi à extraire les fichiers PCX depuis les DT1
    • DT1 Tutorial a servi à comprendre le format DT1
  • Le Perspective Mode n’est pas un simple effet qui décale légèrement les sprites
    • En comparant au même endroit une image avec le mode activé et une autre avec le mode désactivé, tous les éléments présentent une déformation donnant l’impression d’être inclinés vers l’horizon
    • En appliquant un motif en damier à la texture du sol, la déformation devient plus visible
  • Comme la scène est composée de nombreux fragments de sprites, des interstices peuvent facilement apparaître aux bordures pendant la déformation
    • Diablo 2 parvient à maintenir une image en perspective tout en ajustant ces fragments les uns aux autres

Fragments de 32×32 et valeur d’orientation

  • Blizzard divisait les sprites en parties de 32×32 px
    • Cela ressemble à une optimisation visant à ne charger que les portions d’image nécessaires
    • Cela semble aussi utile pour appliquer les déformations du Perspective Mode
  • Si l’on trace des lignes espacées de 32 px sur une texture de colonne pour obtenir une sorte de faux wireframe, les lignes verticales semblent converger vers un point de fuite situé profondément dans le sol
  • Sur certains sprites, le bord inférieur semble se courber
    • En ne tenant compte que de la perspective, une telle courbure n’est pas forcément nécessaire
    • Cette déformation varie selon l’angle sous lequel on regarde le sprite ou selon la position du joueur et de la caméra
  • Dans le format DT1, un sprite peut posséder une valeur d’orientation
    • D’après la documentation de Paul Siramy, la méthode de déformation d’un sprite peut varier selon sa valeur de direction
    • Les exemples incluent des orientations de murs comme Left Wall, Upper Wall ou Lower-Left corner
  • Les sprites orientés différemment, comme les murs ou les clôtures, sont déformés de manières différentes
    • Dans certains cas, les bords supérieur et inférieur ne se courbent pas, et les lignes de bordure semblent converger vers un point de fuite situé à gauche
    • Le jeu semble accentuer quelque peu la déformation pour éviter les interstices, et les sprites de clôture s’ajustent bien les uns aux autres
    • Si un même mur reçoit une mauvaise valeur d’orientation, des interstices apparaissent entre les sprites

Informations supplémentaires publiées et cas similaires

  • Le Perspective Mode ne pouvait être activé dans Diablo 2 qu’en plein écran D3D
    • Diablo 2 prenait aussi en charge Glide et le Software Rendering
    • Des tentatives ont été faites pour trouver des informations supplémentaires dans d’anciens documents DirectX, mais sans résultat
  • Lors d’une mise à jour ultérieure, un lien concernant la distorsion d’image a été ajouté
    • image aberration semble très proche de la distorsion visible dans le Perspective Mode de Diablo 2
    • Il est impossible de savoir si les développeurs de Diablo 2 l’ont réellement utilisé
  • Un article Gamasutra partagé par Paul Siramy décrit plus directement la mise en œuvre du Perspective Mode
    • Il fallait une carte graphique 3D pour activer le Perspective Mode
    • Diablo II utilisait une grille plus fine en composant de grandes tuiles en losange à partir de plusieurs petites tuiles en losange
    • La texture de chaque mini-tuile était légèrement pivotée ; la carte vidéo l’appliquait ensuite sur deux polygones, puis l’étirait verticalement et horizontalement pour qu’elle paraisse plus grande ou plus petite selon la position du personnage
    • Les arbres et les bâtiments semblaient changer de taille lorsqu’on s’en approchait ou qu’on s’en éloignait, et défilaient à une vitesse différente de celle des objets d’avant-plan et d’arrière-plan, produisant un effet de parallaxe
    • Le léger scintillement des objets s’explique par le bilinear filtering de la carte graphique
    • Les personnages, les objets et même les structures comme les huttes et les tours de l’Acte I étaient agrandis ou réduits en Perspective Mode
    • Selon l’explication de Dave, une véritable mathématique 3D était utilisée pour mettre légèrement à l’échelle et étirer la grille afin de créer de la profondeur
    • La mise en œuvre a pris environ une à deux semaines ; il a fallu gérer l’alignement des murs et l’éclairage, et les artistes ont dû redécouper les objets et les rendre différemment
  • Dans la mise à jour 3, Cultures a également été ajouté comme exemple de jeu utilisant une astuce de perspective 2D similaire

1 commentaires

 
GN⁺ 2023-12-21
Avis de Hacker News
  • C’était sur ma liste de choses qui m’intriguaient depuis longtemps, donc je vais enfin pouvoir l’enlever. Si quelqu’un sait comment le ciel de World of Warcraft a été réalisé, et dans une moindre mesure comment le terrain de Warcraft 3 a été fait, je serais ravi de l’apprendre
    J’ai toujours pensé que le terrain de Warcraft 3 utilisait astucieusement les marching squares. Je me pose la question depuis plus de 10 ans : les fonctionnalités comme le jour/la nuit/les nuages/la lune/les étoiles sont incroyables, c’est beau, léger, ça semble se mettre à jour une frame sur deux et pourtant ça reste très naturel. Ça n’a pas l’air d’être du render-to-texture, c’est si fluide qu’on ne voit ni polygones ni pixels, et le fait que ça tournait déjà sur les PC de 2002 en fait une merveille de tech art

  • C’est grâce aux gens qui maintiennent Project Diablo 2[1] que je joue encore à D2. Le mode perspective est vraiment magnifique en 144 fps, et il est assez difficile de revenir aux 30 fps du client LoD d’origine
    J’ai encore le souvenir, et la nostalgie, d’avoir descendu les escaliers sinueux de Pandemonium Fortress en étant submergé par ces graphismes magnifiques — ou peut-être vaudrait-il mieux dire inquiétants
    [1] https://www.projectdiablo2.com/

  • Je vois essentiellement le Mode 7 comme un accélérateur 3D primitif. Il rend un seul plan texturé avec diverses transformations, donc en principe on pourrait dire que c’est aussi “vraiment 3D” qu’un GPU moderne, simplement avec énormément de limitations et une faible précision

    • Pas vraiment. Le Mode 7 ne fait que permettre à une couche 2D d’être mise à l’échelle, déplacée et tournée. Le combat contre Bowser dans Super Mario World en est un cas d’usage typique : Bowser se déplace et tourne parfois, et entre les manches il “vole” dans un effet pseudo-3D grâce au zoom
      Les hacks 3D plus convaincants venaient des coprocesseurs sur la cartouche. Des jeux comme Super Mario Kart utilisaient une puce additionnelle pour recalculer rapidement de nouveaux paramètres Mode 7 à chaque ligne de balayage ; en changeant l’échelle et le décalage à chaque ligne tout en gardant la rotation identique, les lignes du haut paraissaient plus petites et celles du bas plus grandes, ce qui donnait une impression de 3D inclinée
      Cette approche consistant à “faire varier le zoom à chaque ligne de balayage” est très différente d’un GPU moderne et ne permet pas des transformations arbitraires. Par exemple, avec cette technique, on peut seulement faire pivoter le plan autour de l’axe horizontal, pas autour de l’axe vertical
    • C’est vraiment plus proche d’un pipeline fixe
  • Les premiers graphismes informatiques restent toujours stupéfiants à voir. Je suis convaincu que sans les contributions des débuts de l’animation et de l’infographie, logiciels comme matériels auraient plusieurs générations de retard par rapport à aujourd’hui
    Quand on regarde NVIDIA, c’est presque un coup de chance que la même architecture se soit révélée utile pour les premières formes de machine learning et d’“intelligence artificielle”, mais l’entreprise elle-même a été bâtie sur l’infographie

    • Pas exactement. NVIDIA n’avait pas anticipé l’IA, mais a investi très tôt dans le calcul généraliste. Sa valorisation actuelle vient du fait d’avoir poursuivi cette vision pendant 20 ans et de l’avoir exécutée correctement
    • Avant cela, le traitement vectoriel et le SIMD relevaient plutôt du domaine des supercalculateurs à la Cray
  • Si le bord inférieur des sprites est si courbé, c’était sans doute nécessaire pour imiter un point de fuite “sous” le sol pour les sprites verticaux. Si trois poteaux s’écartent vers l’extérieur en haut tout en tournant, leur bas doit aussi tourner dans une certaine mesure, et une simple transformation en inclinaison aurait eu l’air étrange
    Dans la scène 3ds Max, comme l’objet était placé de face dans le viewport avec une texture carrée, l’inclinaison semblait probablement acceptable, ce qui rendait la différence moins visible. Sur un exemple en mouvement, si on se rapproche de la réalité, il est logique que les trois poteaux s’écartent davantage du point de vue à mesure qu’ils approchent, et le rendu 3ds Max ne le montre pas bien

  • Cet article se concentre sur la parallaxe dans les jeux, mais l’effet de parallaxe a une longue histoire dans l’animation
    La caméra multiplane de Disney et ses prédécesseurs existent depuis presque 100 ans. On peut créer toutes sortes d’illusions pour construire une scène en profondeur à partir d’images 2D
    https://en.wikipedia.org/wiki/Multiplane_camera

  • Le développeur semblait plutôt satisfait de l’effet de parallaxe, mais je ne me souviens pas l’avoir réellement utilisé. Une fois habitué au réglage par défaut, ça me paraissait juste bizarre

    • Le fait de ne pas rendre les sprites à une échelle 1:1 dégrade aussi la qualité visuelle. Vu d’aujourd’hui, où un peu de 3D n’a plus rien d’impressionnant, je trouve même que ça a l’air pire
    • L’écran donnait une impression de plus grande “proximité”, donc on voyait moins bien les ennemis. C’était un problème quand on lançait des sorts
    • À l’époque, quand le personnage se déplaçait vite et que beaucoup d’objets occultants comme des murs ou des arbres défilaient, ça donnait bien une impression de 3D. Je me souviens aussi que certains rendus semblaient avoir de meilleurs effets d’éclairage
  • On dit que la 3D de ces vieux jeux n’est “pas vraie”, mais les jeux 3D modernes finissent eux aussi affichés sur un écran plat. N’est-ce pas donc fondamentalement pas de la vraie 3D au même sens ?

    • Pas tout à fait. Les jeux 3D modernes placent une caméra à une position arbitraire et utilisent l’algèbre linéaire pour aplatir la 3D en espace de clip 2D avant la rastérisation. Des jeux comme D2 se contentent de créer une illusion 3D avec des sprites et des offsets, sans même disposer au départ d’un système de coordonnées 3D. Dans ce type de jeu, les déplacements sont en général limités à deux axes
      Autre différence importante : les sprites pré-rendus. Dans des jeux comme Roller Coaster Tycoon ou Diablo, les modèles étaient créés sur des machines spécialisées coûteuses puis rendus en sprite sheets. Même si les objets avaient l’air 3D, ils étaient généralement distribués comme des assets plats. Certains jeux modernes en pixel art fournissent aussi des normal maps avec leurs sprites 2D afin d’appliquer un éclairage dynamique
      L’effet de parallaxe dans les jeux modernes peut se mettre en place très facilement rien qu’en rendant des objets plats dans une scène 3D, mais les pipelines graphiques d’il y a 20 ans étaient très différents, donc il fallait être bien plus ingénieux pour produire un effet 3D
    • Oui. L’article présente le plan 3D plat implémenté avec le Mode 7 comme de la simple “fausse 3D”, alors que le résultat ressemble presque exactement à un polygone unique avec texture mappée. La seule différence est que la “caméra” n’autorise que les variations de yaw et de pitch, pas de roll
      Ce n’est qu’une limitation des scènes 3D que le système Mode 7 peut rendre, pas une preuve que ce qu’il rend serait plus faux. Au fond, toutes les méthodes de rendu 3D manipulent une grille de pixels 2D à l’écran pour créer l’illusion qu’on regarde des objets virtuels