Minecraft!
-
oula, j’avais pas suivi l’affaire … ben félicitation et bon courage pour la suite.
Les questions sur le rendu et l’optimisation m’intéressent et j’ai des remarques à faire.
vers 2002 (environ), pour optimiser sur OpenGL avec les drivers de l’époque, il y avait la bidouille suivante (ce qui suit ne s’applique pas forcément au driver actuel de morphos ou aux drivers PC d’aujourd’hui selon leurs implémentations, donc à tester)
Les GPU ont des caches pour les vertex, mais ces caches sont opérationnels que pour un petit nombre de vertex (qui varie et qu’on peut avoir avec un glGet en 1.x si je me souviens bien (après vérif: c’était peut etre en EXT)).
en GL1.2/1.4 dans les années 90, un glNewList(GL_COMPILE) était déjà sencé pouvoir déclarer une base de vertex « en GPU ». Mais depuis quelques années, c’est les VBO qui sont plutôt conseillé pour ça.
Parenthèse: Oublions pas que OpenGL est un « serveur graphique », et qu’originellement c’est architecturé comme un plugin de serveur X (2d). sous un glx, on est sencé pouvoir faire tourner un rendu GL sur une machine distante, avec la partie CPU qui tourne chez soit et la partie GL sur le distant. Tout ça pour dire: la logique de mettre les vertex en cache (sur le distant) à toujours été là dans GL, fin de la parenthèse.
Tout ça pour dire: pas mal de demo PC de la période « 2000 » faisaient juste tourner des cubes, avec juste des translation/rotations de matrices entre le dessin des cubes (cf neandertaler, et des tas d’autres): en fait c’est pas parce qu’ils trouvaient les cubes jolis, c’est parce que comme ça ils pouvaient effectivement afficher plus de polygones, plus rapidement: les vertex du cube était gardé en cache.
(aussi lire le papier de carmack de quake 2 sur le rendu des courbes et sa techno de LOD avec vertex partagé. )
Aussi: les 6 triangles des cotés visible d’un cube (ou tout un cube) peuvent être desinées avec un seul GL_TRIANGLE_STRIP (ou un GL_TRIANGLE_FAN si on a besoin que des trois faces visibles).
Le fait qu’un seul appel de dessin, dessine le plus de triangle possible, est sensé optimiser les tests qui sont fait pour le culling écran/clipplane ,car ( si c’est l’algo que je pense là derrière dans le driver) le premier test discriminant des drivers GL teste rapidement la primitive lourde, et peut « passer » et ne pas faire les tests par triangles.
Autre technique plus ou moins applicable: pour les cubes qui sont suffisament petits et éloigné devant pour que la perspective joue moins sur les cubes: par frame, pré-rendre les différents cubes possible sur de petites textures en FBO (64×64) avec l’angle de rotation camera, et pas de perspective, puis hop, rendre un billboard (quad) par cube pour faire le fond. En théorie: moins de poly, plus de pixels traités, mais plus rapide quand même (enfin, « de mon temps », c’était ça, quoiqu’un dessin de cube est rapide, donc pas sûr).
… ah oui, aussi: activer le MIMAP filtering (genre GL_TEXTURE_MIN_FILTER GL_NEAREST_MIPMAP_NEAREST): ça sert pas qu’à faire joli, ça accélére aussi: les polys du fond affichent « petit » des textures plus grosse, et les bus GPU aiment pas. Avec le MIPMAP, les polys du fond lisent moins de mémoire vidéo pour les textures (ils choisissent la version adaptée), ça peut accélérer bien (ou autre idée: rendre par slice en Z et faire son mipmap à soit en utilisant la texture adaptée. (-mais bon les textures minecraft ont l’air pas trés grosse.)
bah hop.
Pour info: les textures de terrain de MC c’est 1 et 1 seule image de 256×256. Bon après j’ai pas testé encore le mip-mapping, à voir.
sinon pendant ce temps là, j’ai bien bossé, bien débuggé et bien rajouté plein de trucs:
– plus de mesh: fleurs, champignons, portes, herbes, eau, lave, torche, etc… plein quoi. en faite quasi tout ce qui exite dans MC, mais je gére pas encore leur « état » (genre la porte qui s’ouvre ou la direction des rails).
– transparence parfaitement gérée maintenant.
– l’eau et la lave sont animés.
– nouveau algo pour trouver sélection en cours.
– vitesse d’affichage global: entre 10 et 30 fps (force à 30 max en interne de toute façon) suivant la complexité, avec une distance de vue d’environs 40-45 cubes (en faite c’est des multiples de 5).
voilà une petite vidéo de démonstration:
http://www.yomgui.fr/vid/craft_status_20111205.avi
Note: la caméra est en « fly mode » sans gestion des colisions
Cela se voit que c’est pas vous qui codez, hein…
Bon d’ailleurs, je précise que je ne ferai jamais un client pour des serveurs MC!
D’ailleurs je me demande si un système client/serveur verra le jour: je laisserai cela à d’autres âmes qui voudrons bien s’y coller.
Je me contente de faire un jeu « sandbox » en mode joueur unique.
Et pour les Android users, sachez que Minecraft Pocket Edition est à 13 centimes aujourd’hui (avec 9 autres applications dites premium).
Perso, je l’ai pris, je testerai ça à l’occaz ^^
—
/me jouera finalement à Minecraft avant l’arrivée d’un port MorphOS !
Only Amiga makes it possible !
D’ailleurs la preuve qu’on peut livrer du code python pas lisible:
http://www.yomgui.fr/projects/minetest.lha
Nécessite juste python 2.5 installé sur votre système.
=> Décompresser dans un répertoire sur un disque dur (et pas en RAM: n’est-ce pas Henes), ouvrir une console shell, un CD dans le répertoire minetest et taper ensuite:
python2.5 -O main.pyo –region r.0.0.mcr -x 5 -z 5
et admirer
Les commandes: bouger la souris pour la direction, touche fléche haut/bas pour avancer/reculer, Echap pour quitter, barre d’espace pour retrouver/cacher le pointeur de souris, +/- sur le keypad pour plus ou moin de distance de vue (plus ou moins de FPS aussi :sweat: )
Pour info ne pas prendre beaucoup plus que 6×6 en x et z… sinon plus de RAM!
(PS: -O c’est un « oh » majuscule
Il y a aussi des bugs d’affichage de certains meshes, mais c’est normal, j’ai viré les différents type de meshes dans cette version demo, il n’y a que des cubes)
Ha ça me fait ch*er que mon Peg soit mort… Faut que je m’occupe de façon urgente du Peg de Blaise pour tester !
Abonnez-vous à ma nouvelle chronique "En Route vers le Futur" sur Youtube !
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Minecraft!