Pixel shader

Signaler
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
-
Messages postés
45
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
27 novembre 2009
-
Salut,

Je suis très étonné de voir qu'il n'y a pas de boucles dans les pixels shader.

Ex:

; A simple pixel shader
; This uses the ps 2.0 instruction set and registers
ps_2_0
;
; Declare the s0 register to be the sampler for stage 0
dcl_2d s0

; Declare t0 to have 2D texture coordinates
; from stage 0. These are the interpolated
; texture coordinates.
dcl t0.xy

; Sample the texture at stage 0 into the r1 temporary register
texld r1, t0, s0

; move r1 to the output register
mov oC0, r1

C'est le pixel shader le plus simple. C'est le même code qui modifie tous les points de la texture à afficher.
Mais comment ne modifier qu'une petite partie de la texture ?
Comment modifier localement une texture (sans se taper le scan de toute la texture).

Pour faire un effet de brouillard simple, la première idée qui m'est venue est de modifier la couleur de chaque pixel en fonction du Zbuffer (plus le pixel vient d'un point loin, plus il tend vers la couleur du brouillard).
Je sais faire cela en software, mais comment le faire faire par la carte vidéo, et en passant par les pixels shaders.
Le must serait d'accéder au depth-buffer et de modifier le backbuffer, mais le depth buffer n'est pas une texture....

Bref, tout cela pour dire que je suis déçu par les pixels shader. J'aimais bien l'assembleur, mais là .... on ne peut rien faire. L'histoire des boucles me surprend enormement car on ne peut vraiment pas faire ce qu'on veut, à part du bump mapping et du alphablending...

J'espère me tromper sur les pixel shader.
Merci de me donner quelques de ses avantages.

Guillaume

4 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
tu peux acceder au depth buffer comme à tout les autres en lecture

par exemple sous opengl ca doit etre glRead...
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Oui, je sais lire la surface du depth-buffer mais pas avec les pixels shaders.
En fait, je savoir si c'est possible d'allumer un seul point avec les pixels shader; et savoir comment manipuler oDepth car je ne trouve rien de comprehensible sur le net.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
allumer qu'un seul point, tu peux dire faire du 'per pixel lighting' sur une texture, ben c'est pas pour faciliter ce genre de traitement que les shaders existent ?

je connais pas, mais tu a chercher dans des exemples, genre un bump mapping ?
Messages postés
45
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
27 novembre 2009

Il y a des boucles maitenant dans les pixels shader en version 3.0
Pour savoir si ta carte graphique le fait : tu peux le verif dans les Caps de directX
(GeForce 6)

La Guite