Schémas du procédé
Fichier généré dynamiquement le 21 fév 2003 à 12:45
Cliquez sur les schémas pour faire apparaître des explications.

interface bus PCI ou AGP:
Interface entre le bus de l'ordinateur hôte et la carte.
Cette interface peut être une interface de bus PCI ou de bus AGP.
Sa vitesse serait alors de:
- 132 Moctets/s en 32 bits pour le bus PCI
- 264 Moctets/s en 32 bits pour le bus AGP
- 528 Moctets/s en 32 bits pour le bus AGPx2
- 1056 Moctets/s en 32 bits pour le bus AGPx4 ?
(valeurs théoriques des taux de transferts maximaux en pic)
Cette partie sert à transférer les données de l'ordinateur hôte à la carte et à empêcher les collisions dûes à la lenteur du traitement des données 3D.
Pour éviter un ralentissement de la machine hôte à cause d'un trop long traitement des données envoyées, des mémoires tampon ont été ajoutées entre l'interface et les deux zones de traitement Géométrie 3D et Projection (S)VGA.
Contrôle des accès aux mémoires:
Cette partie permet à l'utilisateur de lire et d'écrire dans différentes mémoires utilisées par les différentes parties de la carte. En particulier, les mémoires servant à stocker les matrices de transformations, les textures des objets, ...
Elle permet également de modifier certains paramètres de calcul comme les paramètres liés au Z-Buffer (mode read-only, paramètres du calcul de la transparence, ...)
Les commandes spécifiques sont envoyés par l'utilisateur à la carte via le bus de l'ordinateur hôte et sont interprètées par cette partie qui va ensuite lui lire ou écrire les données correspondantes directement dans les différentes mémoires.
L'accès à ces données en lecture pourra se faire directement en synchronisant la lecture sur les demandes de lecture du module correspondant, qui se fera de manière séquentielle.
Les données lues(chemins bleus sur le schéma) seront écrites dans un buffer avant d'être envoyées vers l'interface bus pour compatibiliser les vitesses d'accès qui sont plus importantes dans l'accès des données en interne que pour l'interface bus.
L'accès à ces données en écriture devra être retardé si des calculs succeptibles d'accéder à ces données sont encore dans le pipe-line de la carte et n'ont pas encore dépassé l'unité de calcul nécessitant la lecture de ces données.
buffer d'écriture 3D:
Ce buffer permet d'éviter les congestions des données provenant de l'interface bus à destination de la partie Géométrie 3D.
Il s'agit d'une mémoire tampon, donc il sera géré comme une file(FIFO): les données seront traitées dans l'ordre de leur arrivée.
La vitesse de ces mémoires doit être au moins égale à celle de l'interface bus.
Il s'agit d'une mémoire de mots sur 32 bits (Nombre de mots à déterminer).
buffer d'écriture (S)VGA:
Ce buffer permet d'éviter les congestions des données provenant de l'interface bus à destination de la partie Projection (S)VGA.
Il s'agit d'une mémoire tampon, donc il sera géré comme une file(FIFO): les données seront traitées dans l'ordre de leur arrivée.
La vitesse de ces mémoires doit être au moins égale à celle de l'interface bus.
Il s'agit d'une mémoire de mots sur 32 bits (Nombre de mots à déterminer).
Géométrie 3D:

Cette partie s'occupe de toute la partie calcul des projections des différents objets sur l'écran. C'est elle qui va gérer les matrices de tranformations, les coordonnées des points, l'éclairement et le cliping.
Elle devra prendre en entrée les données à la vitesse de l'interface bus.
En sortie, la vitesse des données devra être égale à la vitesse en entrée multipliée par le nombre de plans de projection virtuels(B).
|
Vous pouvez cliquez sur différentes parties de ce schéma pour afficher des informations les concernant.
Transformation:

Cette partie fait les calculs de transformations d'objets et du point d'observation pour le rendu accéléré 3D.
Deux mémoires servent à mémoriser les matrices de transformation du(des) objet(s) à rendre et de transformation (déplacement) du point d'observation.
Les calculs de transformées sont ensuite effectués à la volée, sur chaque sommet de chaque facette à rendre, envoyés de manière séquencielle à la carte.
Calcul de l'éclairement des objets 3D rendus:

Cette partie calcule, pour chaque facette rendue, l'éclairement dû aux sources lumineuses de la scène (s'il y en a).
OPEN-GL spécifie 6 sources lumineuses qui sont mémorisées dans la mémoire
Positions des sources lumineuses.
L'éclairement est calculé en faisnt le produit scalaire entre le vecteur centre de gravité de la facette (ou barycentre des sommets)-source de lumière et le vecteur normal à la facette (calculé et passé par la partie
Transformations).
projection (S)VGA:

Cette partie a pour but de simuler une carte VGA ou SVGA VESA: elle mémorise les informations graphiques 2D et les restitue sur demande de l'ordinateur hôte.
Ces informations, en même temps qu'elles sont mémorisées, sont traitées de manière tri dimensionnelles et envoyées au Frame Buffer par l'intermédiaire de la Gestion de l'affichage pour être affichées à l'écran à une profondeur pré-définie.
Les informations VESA relatives aux caractéristiques de l'affichage (la résolution, les vitesses de balayages, etc.) sont traitées par la partie contrôle des accès aux mémoires qui écrit directement dans les registres de la Gestion de l'affichage.
Cette partie gère également certaines instructions propriétaires permettant de gérer un affichage 2D1/2. Ces instructions ayant pour effet de modifier la profondeur où les pixels de l'image 2D sont affichés sur l'écran.
Rendu 3D:
Cette partie fait tous les calculs de rendu, c'est-à-dire les textures, les points chauds(éclairage de Phong), ... pour chaque plan de projection virtuel.
Gestion des paramètres d'affichage:

Cette partie gère le partage de l'affichage entre la génération d'images 2D issues de la partie
Projection (S)VGA et les images 3D issues de la partie
Rendu 3D, dans le cas d'un affichage mixte (une images 3D dans une fenêtre dessinée sur un environnement 2D).
Frame Buffer:
Le frame buffer est la mémoire dans laquelle sont mémorisées les informations concernant les pixels à afficher.
Afin de limiter la taille de ce buffer, les informations sont mémorisées de la façon suivante:
L'écran est découpé en groupes de lignes.
Chaque groupe de lignes sera géré par une unité d'affichage spécifique. Chacune de ces unités travaillant en parallèle pour accélérer le rafraîchissement.
Chaque groupe est divisé en lignes.
Une ligne contient:
- Le nombre de plans contenant des pixels à afficher
- Chaque plan contenant des pixels à afficher contient:
- L'offset du plan (sa profondeur permettant d'obtenir le décalage d'affichage grace à une table en ROM)
- Le nombre de blocs de pixels qu'il contient.
- Chaque bloc de pixels contient:
- Son offset dans le plan (la position x dans le plan du pixel le plus à gauche ajoutée au décalage d'affichage calculé plus haut pour obtenir la coordonnée x réelle du pixel de gauche sur l'écran pour l'angle donné)
- Le nombre de pixels de ce bloc
- La liste (couleurs) des pixels du bloc
Gestion de l'affichage:

Cette partie s'occupe de contrôler physiquement l'afficheur.
Elle commande le nombre d'images par seconde à afficher, elle décode les données du Frame Buffer pour pouvoir les afficher sur le dispositif et gère la synchronisation entre l'arrivée de ces données décodées et l'apareil.
Ce bloc représente le dispositif physique d'affichage.
buffer d'écriture dans l'interface bus:
Ce buffer récupère les données lues dans les différentes mémoires locales de la carte (matrices, textures, etc.) pour les renvoyer à l'ordinateur hôte par l'intermédiaire de l'interface bus au rythme de la lecture du bus.
Ces demandes de lecture sont traitées par le contrôle des accès mémoire qui synchronise la lecture sur les différentes parties de la carte pour éviter d'en gêner le fonctionnement.
Ce buffer est une mémoire de type file.
Il a une taille de 32 mots de 32 bits.
La lecture du buffer devra se faire à la vitesse de l'interface bus.
Le chargement des données aussi vite que la plus rapide des parties. (voir les différentes parties)
|
Explications sur les noms utilisés:
|
n = nombre de données traitées par la carte (en une seconde)
x = largeur de l'image (en pixels)
y = hauteur de l'image (en pixels)
p = profondeur de couleur (en octets par pixel)
z = taille du Z-Buffer (en octets par pixel)
B = nombre de plans de projection virtuels
N = nombre maximal d'images par seconde
d_yeux = espace minimal entre les yeux de l'observateur
D = distance maximale d'observation de l'écran
|
Schéma général de la carte:
Cette carte gère un flot de données en provenance du bus de données de l'ordinateur hôte, les traite, les mémorise et les affiche sur un système d'affichage spécifique.
Toutes les données sont traitées à la volée, les différentes parties de la carte se comportant comme autant d'étages d'un pipe-line.
La vitesse de traitement de ces données dépend de l'interface bus utilisée: toutes ces données doivent être gérées au fur et à mesure.
Le temps entre la réception des données et l'écriture dans le frame buffer doit se faire en un temps inférieur à un trentième de seconde (pour un affichage à 30 images/seconde)
Cette carte doit être physiquement compatible avec les cartes SVGA (elle doit contenir un BIOS VESA) qui sera assurée par la partie Projection (S)VGA afin de lui permettre de remplacer toute carte graphique accélératrice 3D ou pas. Cette partie permettra de modifier la résolution et les fréquences de balayage verticale et horizontale de l'affichage et d'afficher les données 2D comme les messages de démarrage, les gestionnaires de fenêtres, la profondeur des couleurs, etc.
Elle doit également assurer une compatibilité physique avec les cartes accélératrices 3D (driver OPEN GL) pour assurer la compatibilité avec les différents logiciels 3D existants. Cette partie est la plus importante car c'est elle qui va assurer l'affichage tri-dimensionnel dans la plupart des applications. Elle doit également être très rapide pour permettre l'utilisation fluide d'animations contenant un grand nombre de facettes.
A ces deux modes de transferts de données, s'ajoute un mode "propriétaire" permettant, par exemple, de modifier les angles de vision et d'afficher des images en 2D1/2. Ce mode sera géré par la partie Rendu 3D comme s'il s'agissait de données OPEN GL après une mise en forme assurée par la partie Géométrie 3D.