Bonjour
Bon, c'est un fait, je suis une quiche.
J'ai quelques objets géométriques à afficher à l'écran, avec possibilité de tourner autour pour changer le point de vue.
Pourquoi ne pas passer par OpenGL ? Surtout qu'avec le confinement, j'ai le temps.
Au début, ça passe (j'utilise OpenTK, mais je sais traduire glBindBuffer() en GL.BindBuffer()).
Mais l'un de mes objectifs est de gérer la semi-transparence des objets.
J'ai compris que ce n'était pas simple.
J'ai compris les algorithmes style Depth Peeling, linked list of fragments, ou (et elle me plait bien celle-là) une solution proposée par Morgan McGuire et Louis Bavoil en 2013.
(Si vous avez plus simple d'ailleurs, je suis preneur)
Mais je n'ai pas trouvé d'implémentation concrète et je bute sur une question qui va peut-être vous faire rigoler :
Comment gérer dans un fragment shader des tableaux en lecture/écriture ?
Car voyez-vous, pour la dernière solution citée, j'ai besoin d'un tableau 3D dont les deux premières dimensions mappent les pixels du viewport, et la troisième me permet de stocker une liste triée par profondeur d'informations sur les fragments superposés, quitte à collapser des lignes pour se limiter en taille mémoire, puis ensuite de reprendre ces données pour enfin calculer la couleur résultante.
Et je ne parle pas de sampling ou d'anti-crénelage.
J'ai bien une piste, mais j'ai peur de me fourvoyer : je n'ai trouvé que des arrays of image2d qui pouvaient être lus et écrits dans un shader
D'abord, la doc parle d'accès incohérent qu'il faut gérer avec glMemoryBarrier
Puis j'ai des fragments avec des coordonnées xy en float, et l'image gère des coordonnées entières
Puis le format des cellules est figé dans une liste restreinte, genre GL_RGBA32F, ce qui me donne une cellule de 4 float.
J'ai compris que ce GL_RGBA32F n'est qu'un nom, et qu'on peut y mettre des float qui représentent autre chose qu'une composante de couleur, mais ça me titille.
Si vous aviez des exemples concrets de programmes cpp ou C# et de shaders écrits pour résoudre ce problème de transparence OIT, je serais très reconnaissant.
Merci
Partager