Bonjour à tous.
Tout est dans le titre : quelle est la meilleure méthode pour implémenter un LOD (au niveau des vertex).
Bon je vais d'abord préciser un peu ma technique de rendu.
Mon terrain est constitué de tiles. Je découpe ce terrain en "mini-terrains" de N*N tiles au maximum. Par exemple pour un terrain de 129*129 et un découpage de 64*64, j'ai quatre mini-terrains de 64*64, deux de 1*64, deux de 64*1 et un de 1*1 .
Mes vertex sont classé de la manière suivante (toujours le même exemple du terrain de 129*129):
_ 1er mini-terrain 64*64 : indices : 0 - 1 - 2 ... - 99
_ 2eme mini-terrain 64*64: indices : 100 - 101 - 102 ... - 199
_ etc
_ 1er mini-terrain de 1*64 : indices : 500 - 501 - 502 ... - 574
_ 2me mini-terrain de 1*64 : indices : 575 - 576 - 577 ... - 649
Celà me permet de minimiser la taille de mes IB. En effet pour afficher le 1er mini-terrain je vais lui envoyer les indices 0-1-...-99. Pour le deuxieme, je lui envoye 0-1-...-99 plus un offset de 100 ( paramètres BaseVertexIndices je crois). J'ai ainsi un IB de taille très petite (au vu de la taille de mon terrain) et je n'ai qu'à mémoriser l'indice de départ et l'offset pour chaque mini-terrain. Par contre je dois utiliser un DrawIndexedPrimitive par mini-terrain. Je me suis dis à l'époque que de toute façon c'était plus rapide que de prendre un IB dynamique et de l'actualiser à chaque fois.
Bon, maintenant passons au niveau LOD. J'ai deux solutions.
_ Je crée plusieurs IB (un par LOD) et j'envoye le bon lors du rendu.
_ J'en crée un dynamique.
1ere solution : OK pas de problèmes. Par contre, j'ai toujours plusieurs DrawIndexedPrimitive et la doc conseille de minimiser le nombre d'appel...
2eme solution: De nouveaux deux solutions s'offrent à moi:
_ je garde ma technique de découpage afin de garder mon IB petits (mais encore une fois, j'aurais plusieurs DrawIndexedPrimitive)
_ j'utilise un unique IB. Grâce au LOD, le nombre d'indices reste faible (mais quand même beaucoup plus gros qu'avec ma technique) et je n'ai qu'un DrawIndexedPrimitive.
Bref, quel sont les influences entre :
taille des IB / Nombre de DrawPrimitive / Buffer dynamique.
S'il faut plus de détails, y a qu'à demander.
Si vous avez d'autres idées, commentaires, retour d'expérience, n'hésitez pas je suis preneur.
Partager