[D3D] Technique

Technique [D3D] - Programmation

Marsh Posté le 19-12-2001 à 19:09:15    

Pour afficher un objet 3D, on doit avoir en mémoire un Vertex Buffer d'où le programme va extraire les sommets, les normales, etc...
 
En fait je me demandais si, pour programmer un jeu par exemple où il faut que le rendu soit très rapide, les programmeurs avaient en mémoire un Vertex Buffer pour chaque objet, ou si ils avaient en mémoire les sommets, les normales, etc... de chaque objet qu'ils passaient dans un Vertex Buffer UNIQUE avant de l'afficher puis de recharger le Vertex Buffer avec un autre objet puis de l'afficher à nouveau, etc...
 
A mon avis, il vaut mieux avoir un Vertex Buffer par objet, car la place prise par celui-ci doit être à peu près égale à celle que prendrait les données séparées, et de plus copié à chaque fois les données dans un buffer prendrait beaucoup de temps.
 
Mais je voulais quand même connaître votre avis, peut-être qu'il y a d'autres mécanismes qui rentrent en compte.

Reply

Marsh Posté le 19-12-2001 à 19:09:15   

Reply

Marsh Posté le 19-12-2001 à 22:10:18    

Personne n'a d'idée?

Reply

Marsh Posté le 19-12-2001 à 22:33:58    

reponse:  
ca depend.
 
ca depend des contraintes et ce que tu veux
faire avec ton moteur.
Un vertex buffer est notoirement
plus rapide quand il est en ecriture
seule. Donc si tu peux, tu le mets
en ecriture seule sauf si c'est un buffer
de pretraitement (par exemple tu veux
modifier les donnees transformees mais
c'est contre performant, a reserver
pour des effets tres speciaux et rares).
 
De plus un certain nombre de donnees  
sont dynamiques et changent a chaque frame.
(certaines formes de lod, vertex skinning
sans passer par les capacites de dx8).
 
Autre facteur a considerer
le switch entre vertex buffer
est couteux. Donc autant que possible
limiter ce switch surtout que ce n'est
pas la seule chose a changer
(renderstates, textures etc..)
entre les objets.
 
Donc limiter si possible le nombre
de vertex buffers (ceux de DX s'entend
tes donnees a toi tu les stockes comme
tu veux). Si possible utiliser
du padding pour rendres les formats
de vertex compatibles et donc limiter
les switchs. Mettre les donnees
de vertex dans un ordre de lecture lineaire
surtout s'ils ne sont pas alignes sur 32 ou 64  
bits. utiliser les indices et les caches
de vertex si possible. optimiser les strips.
etc... etc..  
 
Evidemment si tu te fous de la performance
tu fais comme tu veux c'est beaucoup
moins prise de tete.
 
A+
LEGREG

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed