CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Images dans la RAM et opti de perfs

Lagrangien
Lagrangien
Niveau 8
08 septembre 2016 à 13:26:14

Salut,

Je suis en train de finaliser la partire graphique d'un jeu (pour le concours pyweek, pour ceux qui connaissent. Mon jeu est là : https://pyweek.org/e/Mechanism/ ). Jusqu'ici je me suis pas occupé des perfs, mais là j'ai un problème.

J'ai un générateur de terrain qui peut générer des surfaces de taille S*S (S=640 pixels). Le temps de génération d'une image est bien supérieur à celui pour l'afficher à l'écran (j'utilise pygame, un wrapper de la SDL, donc je "blit" les surfaces). En fait, le temps de génération d'une image est comparable à celui que prendrait le chargement de la même image depuis le disque dur. Du coup, je charge plein de chunks en mémoire, et je laisse le joueur s'amuser. Lorsqu'il déborde de la zone chargée, alors je recharge tous les chunks qui sont a une distance plus petite qu'un certain paramètre.

Le problème c'est que le nombre de chunks en mémoire est limité. En effet, avec 4 octet par pixel et S*S pixels, ça me fait environ 1.5Go par image (d'ailleurs, ça me parait beaucoup pour une image de 640x640 pixels, est-ce que je me trompe dans mon calcul ?). Du coup, je dois recharger des chunks super souvent, et ça nuit à l'expérience du joueur. Quelqu'un a une idée?

À noter que pour opti les perfs, je génère mes surfaces avec numpy, donc je peux pas générer des fractions de surface, m'interdisant le génération continue "pixel par pixel" des surfaces voisines. Le faire pixel par pixel en python divise par environ 100 le temps d'exécution...

Edit : au fait, mon simple laptop est capable de charger une centaine de chunks. D'après mes calculs, ça fait environ 100Go de données. Or je pense pas que mon ordi ait 100Go de RAM. Quelqu'un peut me dire où je me trompe ? Ou bien c'est python qui en background swap des trucs sur le disque dur ?

Message édité le 08 septembre 2016 à 13:29:36 par Lagrangien
Lagrangien
Lagrangien
Niveau 8
08 septembre 2016 à 13:38:08

Rofl. Je peux pas éditer mon message ? :honte: Merci bluepoint, l'erreur était sous mon nez mais je me suis enflammé sur le reste ...

Bon et tant que j'y suis. Je pense mettre dans les options une valeur de taille memoire max que l'utilisateur peut changer. Mais vous me conseillez quoi comme valeur de base, pas trop minable mais qui va sur la plupart des ordis modernes ? 1Go c'est beaucoup ? J'ignore quelle est la RAM moyenne des ordis, ainsi que la fraction de la RAM qu'il est raisonnable de donner à un jeu avant que l'OS s'énerve.

Message édité le 08 septembre 2016 à 13:38:47 par Lagrangien
LGV
LGV
Niveau 28
09 septembre 2016 à 09:27:59

Les images en memoire et memoire video utilisee au runtime d'une application ne peuvent pas etre compressees ; elles utilisent necessairement un format "brut" (longueur * largeur * profondeur) ou un format permettant l'acceleration materielle (dxt1-5, etc.).

Pour tout autre forme d'encodage il faut empiler un format de stockage avec un module de chargement/streaming et un format de runtime.

iNokia
iNokia
Niveau 9
09 septembre 2016 à 18:08:33

Le 09 septembre 2016 à 08:43:35 Azeth a écrit :
Salut !

Je ne sais pas si je suis hors-sujet, mais je connais une plateforme en ligne qui propose de réduire le poids de tes images sans aucune perte de qualité :

https://compressor.io/

Essaye-le pour réduire les images de ton jeu, je pense que ça devrait fonctionner, et son taux de compression est très intéressant.

Un petit exemple :

https://image.noelshack.com/fichiers/2016/36/1473403269-capture.png (Image non compressée, ~75 ko)

https://image.noelshack.com/fichiers/2016/36/1473403348-capture-compressor.png (Image compressée, ~43 ko)

Comment ca se fait ? :hap:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment