Pixel Shaders, Vertex Shaders

Pouet les gens. Je reviens vous embeter (une fois n’est pas coutume).

Je suis en train de faire mumuse avec les pixel shaders et autres vertex shaders, c’est la joie, la révolution est en marche, c’est la luuuuutteuh finaaaaaleuh, tout ça tout ça.

Maintenant, j’aimerai savoir si il est possible d’utiliser le Z Buffer en tant que texture, donc de récupérer la valeur de Z dans un pixel shader pour s’en servir (comme c’est surprenant) de coefficient de blending ? Oui je sais, google est mon ami, mais ces temps ci on s’est faché, surtout depuis qu’il m’a piqué mon kit PS2. Hein ? C’est pas lui ? Z’avez des preuves ? Bon bref, je m’égare

Donc bon le but est bien évidemment de faire des effets fullscreen de porc comme d’hab quoi, genre Depth of Field, fog transparent et autres joyeusetés du genre. Des classiques. Sauf que j’aimerai pas devoir gérer TOUS les affichages via des shaders spéciaux qui foutent le Z dans l’alpha des vertex pour obtenir le même résultat quoi. Je voudrais, idéalement, juste applique mes passes en post process tout tranquillement.

Voili voila, c’est pour mon raytracer realtime encore une fois soit dit en passant.

Merci à ceux qui répondront

HS: c pour quand la démo ?

D’apres ce que j’ai compris, tu veux recuperer la valeur “z” du pixel sur lequel tu applique ton shader.
La doc du CG t’indique quelles sont les valeurs d’input/output pour les vertex et pixel shaders. Dans ton cas, la valeur DEPTH n’est pas applicable comme une entree mais comme une sortie (pour les fp20/30).

A noter que tu peux avoir le windows coordinate comme input. T’as plus qu’a faire ton rendu en 2 fois. Tu renderises ta scene (geometrie), tu recuperes ton z-buffer dans une texture, tu applique cette texture comme entree de ton shader et tu refais un render en recuperant les coordonnees de la fenetre comme input… ca devrait le faire

Par contre, ca marchera pas si tu as de l’alpha blending dans ta scene…

Courage!

alt3 : la démo c’est pour “when it’s done”. Pour le moment on se fait plaisir, on met les choses en place, ensuite on va vraiment entrer en “prod”

Pour ce qui est du shader, mon pipeline idéal est le suivant :

1/ je rends toute ma scène raytrace, avec tout ce qui va bien (refraction, reflection, shadow & co), elle me rempli mon zbuffer parce qu’elle est très gentille (smack).

2a/ A ce niveau, j’ai mon rendu qui est fait, le Z buffer qui contient… ben les infos du Z ça tombe bien, et j’ai plus qu’a faire mes effets de post prod.

2b/ Donc, ce que je voudrais, c’est pouvoir récupérer le Z en entrée (d’une manière ou d’un autre, même si je dois le copier dans une texture ou que sais-je) d’un pixel shader, pour avoir un coef de blending tout simple, qui me permette de faire du blur “selectif” en fonction de la valeur de Z (donc blurer que ce qui doit etre blurré, et pas le reste). Dans un monde idéal qu’il serait bien, je voudrais en fait que ma valeur de Z me serve d’offset dans une texture 1D qui servirait de lookup pour retrouver une valeur de blending qui du coup serait complétement configurable.

Donc la question c’est : comment je récupére mon Z Buffer dans une texture ?

Bref, ce système je l’utilisais sur PS2, où y’a même pas de pixelshaders, alors si sur PC on peut pas le faire AVEC des pixelshaders, où va le monde

merci en tout cas de ce début de réponse.
Ce message a été édité par tuo le 07/11/2003

En OpenGL:

glReadPixels(0,0,viewport[2], viewport[3], GL_DEPTH_COMPONENT, GL_FLOAT, zbuffer);

Donnee entre 0 et 1.

Apres un p’tit coucou de GL_DEPTH_BIAS et de GL_DEPTH_SCALE, et pis ca roule!

Trevidos

erf ok je vois Le soucis c’est que glReadPixel n’est pas en hard, c’est de l’accés “a la main”, donc très, très lent (comparé à une solution plus “hardware-friendly”). Et accessoirement je suis en DirectX

Bref, j’ai posé la colle au support dev ATI, on va voir la réponse

Peut etre en utilisant un P-buffer hard? Je ne l’ai jamais fait, mais ca doit etre possible, ca !

Pour directX, desole, je connais peu voir pas du tout cette API…

Edit: http://developer.nvidia.com/attach/3478. Un PDF pour l’utilisation des Depths buffers en utilisant les extensions (P-Buffer et Shadow)

Ce message a été édité par Trev le 07/11/2003

euh, ce que nvidia appelle un PBuffer c’est juste une render target à la con, et ça je fais déjà (pour un blur fullscreen), y’a pas de soucis. Mais ça me donne toujours pas mon Z Bon, apparemment j’ai beau chercher ça a l’air un peu mort quand même, c’est con.

Je vais faire qqles ups a la con … Mais bon …

Voila je commence a me mettre au pixel/vertex Shaders, surtout via l’OpenGL donc si quelqu’un a des bons liens, car j’ai juste des pages de references sur les fonctions ce qui risque d’etre indigeste :’(

Bref, Voila je prends tout ce qui traine et je vais continuer a fouiller le forum

Koubiak in studing time