onilink_

Untitled

Feb 6th, 2019
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1.  
  2. Ne pas oublier:
  3. - une texture 32 bits 1024x1024 prend 4mb de vram
  4. - une texture 8 bit de 1024x1024 prend 1mb de vram
  5. - une texture ne doit "généralement" pas dépasser les 4096x4096,
  6. car la plupart des GPU ne supportent pas une taille plus grande
  7. (et certains sont limité a du 1024x1024 comme certaines vielles consoles).
  8.  
  9. Une des pierres angulaires d'un moteur de jeu 2d est l'affichage de sprites.
  10. Il faut un système simple mais puissant.
  11.  
  12. Voici une liste des features attendues pour un moteur complet:
  13. - afficher un sprite demande en moyenne 2 loc:
  14. - une pour charger les sprites (fichier de config, dossier de sprites)
  15. - une pour afficher le sprite en lui mee
  16. - afficher un sprite ne doit pas demander de créer toute une pipeline graphique
  17. a la main, cela doit être déjà pres pour les usecase fréquents
  18. - il faut pouvoir "bake" des commandes d'affichage (ex: dans un VBO)
  19. - il faut un système de packing des sprites, avec la possibilité de charger ou
  20. décharger facilement des sprites au runtime => texture atlas dynamique
  21. - il faut la possibilité d'utiliser un garbage collector efficace, qui s'occupera
  22. de charger et décharger des sprites automatiquement, dans le cas ou on n'a pas
  23. besoin de faire tout cela manuellement (soit 99% du temps).
  24. - il faut la possibilité de générer des sprites a la volée, sans avoir a enregistrer
  25. des images via le filesystem
  26. ex:
  27. - particules procédurales
  28. - destruction de sprite existant (découpage automatique)
  29. - le moteur de sprite doit être réutilisé pour l'affichage de texte
  30. - le moteur de sprite doit être réutilisé pour le rendering de la GUI
  31. - le moteur de sprite doit être backend-agnostic, potentiellement sur plusieurs
  32. niveaux d'abstraction
  33. => servira aux portages vulkan, 3ds et autres consoles
  34. - il faut la possibilité d'utiliser des textures 8bit (pour par exemple l'affichage de
  35. texte, ou encore le rendu en couleurs indexées)
  36.  
  37. Packing:
  38. - le packing de sprites peut être statique, il faut pouvoir l'effectuer directement
  39. sur une image sans contexte graphique (comme l'actuel ImagePacker et ImagePack)
  40. - le packing dynamique quand a lui utile un framebuffer object
  41. - il faut la possibilité de faire du packing par "polygones englobants"
  42. => avec la possibilité de faire des rotations pendant le packing: complexe!
  43. => il faut aussi un algorithme pour trouver le polygone recouvrant d'un sprite
  44. le plus "optimisé" (peu de vertex, mais pas trop de surface vides)
  45. http://cbna.forumactif.com/t13431-decouper-un-polygone-a-partir-d-une-image
  46. => on peut essayer de faire de l'espionage industriel, aux dernieres nouvelles
  47. aucun truc open source n'a été trouvé:
  48. https://www.spriteuv.com/#features-section
  49. https://www.codeandweb.com/texturepacker/tutorials/using-spritesheets-with-unity
  50.  
  51. Atlas:
  52. - un atlas peut être statique ou dynamique (option)
  53. - un atlas doit pouvoir gérer des textures en 32bits ou 8bits
  54. - un atlas peut contenir plusieurs texture pages
  55. - un atlas doit avoir des options pour définir la limite d'usage mémoire, et
  56. des options pour les texture pages
  57. - il faut pouvoir paramétrer des groupes de sprites afin de:
  58. - forcer certains groupes a se charger sur la même texture page
  59. - forcer des groupes a se charger complètement ou non
  60. - l'atlas ne doit pas être bloquant au moment du chargement
  61. => on peut bake des textures basse résolution et les utiliser dans le thread
  62. principal pendant qu'un thread secondaire fera le chargement depuis un dossier
  63. et le decoding avant de donner tout cela au thread principal
  64. - l'atlas doit gérer le backing dans la mémoire, et être configurable
  65. - par exemple on peut vouloir garder certains groupes toujours en mémoire
Advertisement
Add Comment
Please, Sign In to add comment