2011-08-07 3 views
0

Je crée un jeu de terrain destructible bitmap Worms à l'aide d'OpenGL. J'aimerais savoir où sont les limites en termes de mémoire vidéo pour la taille des mondes.OpenGL: Taille de la texture et mémoire vidéo

Actuellement, j'utilise des blocs de textures 512 * 512 RGBA pour le terrain.

  • Quelle quantité de mémoire, très grossièrement, puis-je attendre d'une telle texture RGBA 512 * 512?
  • Y a-t-il une compression interne automatique?
  • Quelle quantité de mémoire vidéo puis-je attendre de la plupart des ordinateurs des utilisateurs?

Répondre

0

Avec 32 BPP (4 octets), vous obtenez 4 * 512 * 512 = 1 MB

Voir ce sujet la compression de texture: http://www.oldunreal.com/editing/s3tc/ARB_texture_compression.pdf

+3

Non, une texture 512x512 en RGBA (et un octet pour chaque canal) entraînerait 4x512x512 = 1MB – Bart

+2

appr. 4 * 512 * 512 * 1,33 avec MIPMAPS – epatel

+0

Vous avez sûrement voulu dire 32-bpp (ou 8-bpc). –

1

Je ne vous inquiétez pas à ce sujet beaucoup. Même avec 8192 * 2048 monde (4 écrans de large et 2 écrans de haut, ce qui est très grand pour le jeu de style Worms), il vous faudra seulement 8 * 2 * 4 = 64Mb (ajouter des mipmaps, autres textures, framebuffer) bornes. Pour autant que je sache, même les anciens GPU ont ce type de mémoire (on ne parle pas de cartes GeForce4, n'est-ce pas?). Les anciennes GPU peuvent avoir des limites sur la taille de chaque texture, mais comme vous avez déjà divisé votre monde en blocs de 512x512, cela ne posera pas de problème. Si la mémoire vidéo devient un problème, vous pouvez autoriser les utilisateurs à utiliser des textures demi-taille (sous-échantillonner le monde en 4096 * 1024 et 256x256) et extraire les nouvelles régions/zones non utilisées à la demande.

2

Quelle quantité de mémoire, à peu près, puis-je attendre d'une telle texture RGBA 512 * 512?

Informations insuffisantes. Vous devriez toujours utiliser taille OpenGL image formats (GL_RGBA , GL_RGBA).

GL_RGBA8 occupe 32 bits par pixel, soit 4 octets. Par conséquent, 512 * 512 * 4 = 1 Mo.

Y a-t-il une compression interne interne automatique?

No.

Quelle quantité de mémoire vidéo puis-je attendre les ordinateurs de la plupart des utilisateurs d'avoir libre?

Combien utilisez-vous actuellement?

OpenGL va paginer les données de l'image en fonction de l'espace disponible. Si vous n'avez plus de mémoire GPU, OpenGL allouera heureusement la mémoire du système et téléchargera les images si nécessaire.

Mais pour être honnête, votre petit jeu Worms ne coûtera rien en termes de taille de la mémoire. Peut-être 64 Mo quand vous avez terminé, tops. Ce n'est pas quelque chose dont vous devez vous préoccuper.

+0

Les besoins en mémoire dépendent en grande partie .. Vous devez choisir une ligne équitable (c'est-à-dire 64 Mo) et essayer de l'adapter. – Kromster

0

Encore une fois, cela dépend de votre moteur, mais si je vous je ferais ceci:

Étant donné que votre texture terrain sera probablement la réutilisation des textures en forme de mosaïque, et vous avez besoin de savoir si un pixel est présent , ou détruit, alors que vous utilisez des textures de mosaïque pas plus grand que 256x256 vous pourriez certainement sortir avec un format interne GL_RG16 (où chaque composant serait une coordonnée de texture que vous auriez besoin de mapper de [0, 255] -> [0.0 , 1.0] et vous réserverez une valeur spéciale pour indiquer que le terrain est détruit) pour votre texture de terrain, ce qui fait que chaque bloc de 512x512 occupera 0.5MB. Bien qu'il soit temping d'ajouter un octet supplémentaire pour indiquer la présence de terrain, mais un format 3 octets ne serait pas en cache trop bien