j'ai voulu reprendre quelques bouts de code que j'avais commencés pour apprendre quelques trucs en 3D, mais il me manque trop de connaissances de base pour avancer correctement. Du coup j'ai quelques questions de compréhension de base, mais de façon plus générale je serais intéressé par tous les liens vers des articles / tutos ou bouquins que vous pourriez me conseiller (le but des questions étant surtout de définir le contexte de ce que j'aimerais apprendre).
La première question est une question de vocabulaire : qu'est-ce qu'un shader, précisément ? En voulant refaire de l'OpenGL récemment, je me suis rendu compte que le fixed pipeline était complètement obsolète, et qu'il fallait maintenant écrire soi-même ses vertex et pixel shaders. Il y a 12 ans, à l'époque de Quake 3, on parlait déjà de shaders pour définir tous les petits effets graphiques à apporter aux niveaux (déformations de textures, lumières, etc). Aujourd'hui je regarde cette vidéo sur des nouveaux effets dans Skyrim, et à 00:40 il est question de "Flow-based water shader", un effet qui semble ajouter une vraie mécanique des fluides aux cours d'eau. Bref, toutes ces choses qui s'appellent shader me semblent assez différentes, j'ai du mal à croire qu'il s'agisse à chaque fois de trucs codés dans les vertex et pixels shaders, que j'évoquais en premier, et du coup la définition m'échappe complètement. Concrètement c'est quoi, un shader ?
De cette première question découle peut-être la seconde : en supposant que tous ces effets soient codés en vertex/pixel shaders (j'ai du mal à comprendre comment ça pourrait être possible, mais admettons), ça fait un paquet de choses différentes à gérer. J'ai cru comprendre qu'il valait mieux éviter les branchements dans le code d'un shader, donc un énorme shader qui gère tous les effets en même temps me semble difficilement envisageable. Mais est-ce qu'il est possible d'utiliser plusieurs shaders entre lesquels on alterne au cours du rendu d'une seule frame ? Ne sachant pas si c'était techniquement valide j'ai voulu tenter (plusieurs appels à "useProgram" au cours du rendu), et ça n'a rien donné de bon.
Troisième et dernière question, sans rapport avec la précédente : j'ai un petit code de test qui m'affiche une scène avec quelques objets, le tout éclairé par 3 lumières. Les trois lumières sont gérées dans le GLSL, avec trois fois l'ensemble de "uniforms" qui définissent une source lumineuse. Bon, ça marche, mais si je voulais faire un "vrai" projet avec non pas 3 sources lumineuses mais 20, 30 ou 50, ça se passe comment ? Je pourrais toujours en gérer 5 ou 10 dans le GLSL et n'activer que les plus proches de la caméra, quitte à fusionner puis faire progressivement disparaître les autres au fur et à mesure que la caméra s'en éloigne, mais j'ai l'impression que les jeux actuels n'ont aucun problème à gérer beaucoup de lumières simultanément, donc il doit y avoir des solutions bien plus efficaces que les hacks que j'envisage. Où est-ce que je peux trouver des infos là-dessus ? Quand je cherche sur Google, je ne tombe sur des scènes de démo qui gèrent un (petit) nombre constant de lumières, mais jamais sur des implémentations plus réalistes qui ont à gérer ce problème.
Voilà, c'est à nouveau un peu décousu, mais comme il me manque à peu près toutes les bases et que mes recherches Google me font tourner en rond avec des programmes de test qui n'apprennent pas grand-chose, je suis preneur de vos sources d'info

Merci !</noob>