05 mai 2012

Avancement du développement de Newt-Puzzle

 

Vous donner la possibilité de perdre votre temps sur Newt-Puzzle n’est pas pour tout de suite, mais voici déjà un petit point d’avancement du projet.

Pour l’instant, les principaux changements dans Newt-Puzzle par rapport à la version que j’avais publiée en 2009 sont de ceux qui ne se voient pas. Tout d’abord, j’ai rajouté un gestionnaire de ressources qui va s’occuper de gérer des données telles que la géométrie des objets, les textures ou encore les shaders, et en particulier prend en charge leur destruction quand on n’en a plus besoin, afin de libérer la mémoire. Dans la première version du projet, je ne m’étais occupée que tardivement de ces aspects pourtant fort importants. Comme j’avais d’abord fait le morpion tout seul, je n’avais pas vraiment besoin de pouvoir détruire la grille de jeu, juste d’une fonction permettant de la réinitialiser en supprimant les coups des joueurs pour relancer une nouvelle partie. Ce n’est que lorsqu’on quittait l’application que la mémoire était libérée, puisque le système d’exploitation s’en charge. Pas très propre, mais suffisant.

Par contre, à partir du moment où j’ai mis plusieurs jeux dans la même application, il fallait absolument nettoyer la mémoire des données d’un jeu pour en lancer un autre. J’avais donc commencé à faire des routines pour supprimer les objets, mais je ne trouvais pas qu’elles s’intégraient au reste du code de manière très satisfaisante, en grande partie parce que l’ensemble n’avait pas été bien pensé à la base. Reprendre entièrement le projet était l’occasion de revoir ce point de conception. J’ai maintenant quelque chose de plus sain, qui devrait permettre d’éradiquer impitoyablement toute fuite de mémoire.

Une autre modification concerne les routines d’affichage des objets. Plutôt que les afficher bêtement dans l’ordre dans lequel ils ont été définis comme c’était le cas avant, ils sont maintenant automatiquement classés en mettant ensemble les objets qui partagent les mêmes textures. Cela limite les changements de texture dans la boucle de rendu, pour de meilleures performances.

 

Deux évolutions fort importantes, mais qui ne se voient pas trop, du moins tant qu’ils fonctionnent correctement : quand ça plante ou que ça rame, là on s’en rend compte !

Passons aux modifications plus visibles avec quelques captures d’écran d’une scène très simple qui ne comprend pour l’instant que quelques sphères.

 

Un premier screenshot avec un éclairage sans shader Comme je commençais à me lasser du fond uniforme noir ou coloré, j’ai rajouté une « sky box » à la scène. Une boîte de ciel, c’est tout simplement un cube texturé qui représente le ciel et le paysage au loin. Les 6 textures qui couvrent les faces sont faites de telle sorte qu’une fois assemblées on ne voit pas du tout les arrêtes du cube. Je compte plus tard faire mes propres textures pour Newt-Puzzle, sans doute dans un style assez abstrait. En attendant, pour tester l’affichage de la sky box, j’ai récupéré des textures d’Extreme Tux Racer (c’est beau, le libre).

Une autre sky box
Pour éclairer la scène, j’ai placé une source de lumière directionnelle, qui correspond à la direction du soleil dans la sky box. Le moteur peut prendre en compte plusieurs lumières, si on souhaite par exemple créer un environnement avec plusieurs soleils.

Les 2 premiers screenshots montrent la même scène dans 2 environnements différents. J’ai modifié la direction de la source de lumière, sa couleur (blanche pour la scène pendant la journée, jaune pour le soleil couchant) et la couleur de la lumière ambiante pour qu’elles correspondent à l’environnement représenté dans la sky box.

&nbsp

Vous vous souvenez de mes explications sur les shaders dans mon précédent article ? Eh bien, pour l’instant il n’y en a pas ! C’est le pipeline fixe qui est utilisé ; les calculs d’éclairage sont donc faits uniquement au niveau des sommets des polygones qui forment les sphères, puis interpolés. Cela donne quelques artefacts graphiques assez disgracieux, que l’on voit particulièrement bien à la limite entre le côté éclairé des sphères et celui qui tourne le dos au soleil.

Augmenter le nombre de polygones des sphères atténue le phénomène comme on peut le voir sur les captures d’écran ci-dessous : les sphères sont constituées de 4 fois plus de triangles dans l’image de droite que dans celle de gauche. Ce n’est cependant pas une très bonne solution : elle impacte beaucoup les performances.

 

Prochaines étapes : rajouter un mode de rendu plus joli en utilisant des shaders, et remettre en place les fonctions permettant de générer une grille pour jouer au morpion (mais en mieux).

 

Réactions : pas encore de commentaire
 

Commentaires

Vous pouvez poster un commentaire ou laisser un trackback à cette adresse.

Réagissez

Vous pouvez utiliser ces balises : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
 
 
 

© 2012 Eldermaeblog | Joyeusement propulsé par WordPress