Vers 1994, pendant la période ou je développais en assembleur sur Atari, j’ai développé un moteur 3D temps réel. Le but étais de calculer et d’afficher le plus de faces 3D possibles pour pouvoir se mouvoir dans un monde 3D avec fluidité. A l’époque les cartes 3D n’existait pas et les processeurs n’était pas aussi puissants qu’elles le sont maintenant.
Il fallait donc optimiser les 95% de code (les 5% sont fait en C pour la gestion de l’environnement qui ne nécessite pas de rapidité d’exécution)
Calculer une image 2D d’un environnement 3D est très gourmand en temps car pour chaque pixels dessinés, cela demande beaucoup de calcul avec des formules mathématiques complexes.
Voici les caractéristiques du moteur 3D :
- les faces étaient triangulaires (pour des raisons d’optimisation de tracer de faces)
- le clipping des objets avec des bouding box
- le clipping des faces entières
- le clipping des faces dont on voit une partie à l’écran
- le calcul des faces selon la position de la camera
- la suppression des faces cachées
- le tri des faces
- la gestion des lumières
- la gestion de la camera
- le rendu des faces de différents type :
* points
* face vide
* face pleines couleur unis
* face en gouraud (face pleines avec un dégrader selon le vecteur lumière)
* face mapping (face texturé)
* face phong (face texturé dont les « normals » des coordonnées de la textures sont modifier selon le vecteur lumiere)
Pour atteindre de très bonnes performances de calcul, il faut optimiser les algorithmes et simplifier les formules de calcul pour la 3D.
Puis optimiser le code selon les pipeline du processeur en prenant compte des dépendances de registres et des instructions qui ne sont pas parallélisable.
Il faut donc bien connaître le nombre de cycle que prenne chaque instruction !
Au final avec mon moteur 3D sur Atari ST je calculais et affichais une scène 3D en « phong » (mapping des faces avec un « pseudo » effet de reflet de la lumière) le dinosaure de jurassic parc qui contenait environ 76000 faces et une 30ene d’objets. Le dinosaure se déplaçait à raison de 6 images / seconde. De nos jours c’est lent 6 images seconde, ça saccade, mais à l’époque et sur Atari ST c’était une énorme performance vu le nombre de face et les capacités de la machine !.
A part le moteur 3D j’ai fait beaucoup d’effet 2D temps réels, l’objectif restant de repousser les
limites de la machine et les miennes en optimisant …
Developpeur iPhone freelance