Inconvénients des geometry shaders

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Hello!

Bien que je les ai découverts il y a un bout de temps, j'expérimente concrètement depuis hier les Geometry Shaders (GLSL).

Pour ceux qui ne savent pas/ont oublié, un geometry shader prends un point en entrée et peut ressortir N points formant des triangles, ce qui permet de décupler le nombre de polygones sur la scène) (qu'on me corrige si je m'exprime mal :p )

J'ai été impressionné par la puissance et les possibilités offerts par ce type de shaders, et du coup je me demande quelles sont les limites concrètes d'un geometry shader, et pourquoi ne sont ils pas utilisés à foison partout où c'est possible. Quand on voit des projets de recherche comme celui-ci, on se demande pourquoi les jeux vidéos ne nous permettent pas déjà de nous balader dans des décors aussi vastes (je sais qu'en ce moment c'est la mode du MMO-sandbox-minecraft-galaxy, mais rien n'est annoncé chez les gros studios, et à part No Man's Sky, rien n'a l'air de vraiment claquer sa maman)

Pour en revenir à la question initiale, pourquoi, par exemple, ne pas créer un convertisseur .obj -> geometry shader, de manière à ne stocker qu'un seul point d'origine, et ainsi dessiner un mesh complexe uniquement depuis la CG (pour s'éviter les transferts vers le GPU qui sont couteux, et pour diminuer le coût en VRAM)? Le seul problème qui me vient en tête est que si l'on a besoin d'avoir des collisions style Ray-Triangle, il faut que les triangles soient aussi stockés côté RAM pour pouvoir effectuer les calculs.

Pour travailler actuellement sur un moteur professionnel maison (côté Consoles Next-gen, et pas du tout rendu puisque je bosse sur l'audio et la vidéo), je n'ai trouvé aucune trace de geometry shader quelconque…

J'en appelle donc à Gwenn (coucou!) et à tous ceux qui auraient déjà expérimenté les geometry shaders de manière amateur ou pro: quels sont les réels inconvénients des Geometry Shader (hormis qu'il faille les écrire :p ) ?

Et demain, je découvre les Tessellation Shaders

Édité par Coyote

+1 -0
Staff

Salut, j'ai vu que tu as cité "No Man's Sky" qui m'a l'air excellent. Mais en voyant ta vidéo je n'ai pas pu m’empêcher de penser à son grand frère : "Star Citizen".

J'ai trouver une vidéo qui reprend le même principe mais dans un vrais jeu. Donc je dirais que les Geometry Shader on surement une utilité mais à condition d’être fortement caler en 3D. ^^

Star Citizen

GoldenPanic est disponible en Beta ! Ne ratez pas sa review hebdomadaire chaque jeudi !

+0 -0
Staff

Question totalement naïve de quelqu'un qui ne connaît le pipeline OpenGL que pour l'avoir vaguement détourné un jour qu'il voulait faire du GPGPU à-la-papa pré-Cuda :

La limite ne se situerait-elle pas dans le rapport de perfs entre le transfert des points vers la DRAM et leur génération par calcul avec seulement la puissance d'un seul node du GPU ?

Concrètement, je sais que la latence du transfert de la machine vers le device est gigantesque et que la DRAM du GPU est sa mémoire la plus grande (donc la plus lente), du coup je me demande si la puissance de calcul d'un noeud du GPU lorsqu'il va générer les nouveaux points est suffisante pour compenser la latence du transfert dans la plupart des cas.

Édité par nohar

I was a llama before it was cool

+1 -0

Je confirme ce qui a été dit ; l’intérêt d’un Geometry Shader réside dans sa capacité à générer du maillage de façon dynamique et procédurale.

Pour reprendre ton idée de départ ; j’imagine mal qu’un maillage bien spécifique (tel un véhicule ou un personnage) puisse être modélisé par le biais d’une formule mathématique, or c’est là que réside l’intérêt d’un GS (lui passer une liste de points et lui demander de construire un maillage ce n’est pas vraiment son rôle et je doute qu’on atteigne des sommets d’optimisation en procédant ainsi). On fera donc davantage appel à la tesselation pour "manipuler" des maillages conventionnels (tu me diras on peut théoriquement utiliser un GS pour faire de la subdivision de maillage tel que le ferait un Tesselation Shader, mais les perfs seraient moins bonnes).

A titre d’exemple, un GS peut être utilisé pour générer et animer un océan déchainé, des vêtements, de la fourrure, de l’herbe, des ombres volumétriques, etc… (Typiquement, Minecraft gagnerait à utiliser un GS pour générer ses cubes ^^).

Cette réponse a aidé l'auteur du sujet

Il ne faut oublier que les GS peuvent aussi supprimer des points ou des triangles. On peut donc les utiliser aussi pour faire du face culling (mais c'est en pratique peu utilisé, il sera généralement plus performant de faire le tri côté CPU et n'envoyer que ce que l'on a besoin)

Sinon, il y a quelques exemples d'utilisation des GS dans les livres GPU Pro : génération de terrain, l'illumination par voxel, de l'antialiasing, etc Le gros problème des GS est qu'ils font souvent double emploi avec la tesselation (en moins performant)

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte