IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Comment DOOM et Wolfenstein affichaient leurs graphismes : apprendre les bases du ray-casting
Un tutoriel de Guy Grave

Le , par LittleWhite

15PARTAGES

10  0 
Bonjour à tous,

J'ai le plaisir de vous proposer un tutoriel écrit par Guy Grave, alias mewtow, sur le fonctionnement du rendu graphique des premiers jeux "3D" tels que DOOM et Wolfenstein.

Bonne lecture.

Lire le tutoriel
Voir les autres cours et tutoriels de la rubrique Hardware

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Kikuts
Membre éprouvé https://www.developpez.com
Le 07/09/2016 à 10:52
Super intéressant.

J'avais déjà suivit un tuto pour faire ça en mode brain off. Je ne faisais que suivre les instructions sans réfléchir.$*

Cet article m'a fait comprendre beaucoup plus de choses. C'est passionnant à lire car très accessible

Ceux qui ont pondu ces algos et pensé à tout ce joli bordel doivent être sacrément intelligent car même si les formules employées ne sont pas folles, il fallait y penser.

Merci beaucoup !
0  0 
Avatar de richarno
Membre à l'essai https://www.developpez.com
Le 09/09/2016 à 8:25
Merci pour cet article très intéressant.

Un fait amusant est de comprendre l'historique d'une optimisation particulière.
A l'époque de Doom, les cartes graphiques n'offraient que des optimisations hardwares basiques et 2D : BitBlt (copies de rectangles), masquages ou gestion du pointeur de la souris. Pour le calcul en temps réel des graphiques le CPU principal du PC était le seul moyen de faire le rendu graphique en mode 3D (2D et demi on disait à l'époque ) et il était fortement mis à contribution.

On voit dans l'article de Guy Grave (traduit par LittleWhite, merci encore) l'importance du calcul de l'inverse de la racine carrée pour savoir positionner les objets à l'écran, mais ce calcul, s'il était fait en flottants, aurait été beaucoup trop lent pour permettre l'affichage temps réel.
Et l'astuce de génie a été de trouver un algorithme entier (sans flottants) qui réalise cette opération de manière très rapide (InvSqrt). Je ne reviens pas sur le détail de cet algorithme (qui tient du génie), mais il est intéressant qu'une étude a été faite en 2012 sur l'algorithme originel, et que la rétro-ingéniérie a permis de découvrir un petit bug dans une constante de l'algorithme. Ce qui explique pourquoi sur Doom, on voyait parfois une raie noire verticale.

L'article s'appelle "A Brief History of InvSqrt", en anglais et très intéressant.

Bonne lecture.
0  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 09/09/2016 à 8:53
Je tiens à préciser que je ne suis pas traducteur, simplement, j'ai (avec l'accord du génialissime Guy Grave) publié l'article sur Developpez.com.
0  0 
Avatar de Kannagi
Expert éminent sénior https://www.developpez.com
Le 09/09/2016 à 12:51
A croire que y'avait beaucoup de génie a l'époque
La 3d existait depuis un moment (meme sur Atari ST), je rappel que chez nous on a eu le droit a un excellent Alone in the Dark sorti en 1992 est programmer en full ASM (donc 1 ans avant doom) .
Pour moi ce jeu est un vrai précurseur autant la technique de Doom a vite était oublier après , autant la technique de Alone in the Dark a perduré ( perso en 3d et Background Precalculer comme Resident Evil ou Final Fantasy).

A la même époque au Japon sortais Ridge Racer en 1993 (sur une machine tournant sur du 240,000 polygons/second) , les ingénieurs ont fait du bon boulot
0  0 
Avatar de guitz
Membre éclairé https://www.developpez.com
Le 10/10/2016 à 10:52
Citation Envoyé par richarno Voir le message
Merci pour cet article très intéressant.

Un fait amusant est de comprendre l'historique d'une optimisation particulière.
A l'époque de Doom, les cartes graphiques n'offraient que des optimisations hardwares basiques et 2D : BitBlt (copies de rectangles), masquages ou gestion du pointeur de la souris. Pour le calcul en temps réel des graphiques le CPU principal du PC était le seul moyen de faire le rendu graphique en mode 3D (2D et demi on disait à l'époque ) et il était fortement mis à contribution.

On voit dans l'article de Guy Grave (traduit par LittleWhite, merci encore) l'importance du calcul de l'inverse de la racine carrée pour savoir positionner les objets à l'écran, mais ce calcul, s'il était fait en flottants, aurait été beaucoup trop lent pour permettre l'affichage temps réel.
Et l'astuce de génie a été de trouver un algorithme entier (sans flottants) qui réalise cette opération de manière très rapide (InvSqrt). Je ne reviens pas sur le détail de cet algorithme (qui tient du génie), mais il est intéressant qu'une étude a été faite en 2012 sur l'algorithme originel, et que la rétro-ingéniérie a permis de découvrir un petit bug dans une constante de l'algorithme. Ce qui explique pourquoi sur Doom, on voyait parfois une raie noire verticale.

L'article s'appelle "A Brief History of InvSqrt", en anglais et très intéressant.

Bonne lecture.
En fait cet Algorithme revient au Grand Génie Isaac Newton, mais là où John Carmack a fait très fort c'est de trouver cette constante qui réduit les étapes de cet algorithme
0  0 
Avatar de dancingmad
Membre averti https://www.developpez.com
Le 10/10/2016 à 14:19
Pour aller plus loin, je recommande le livre "Zen of Graphics Programming" de Michael Abrash, qui explique en détail les algos de Doom et comment il a fait évoluer la technique jusqu'à Quake. C'est un peu rebutant au début (beaucoup d'assembleur mais on peut passer), mais super intéressant !
0  0