60

Rah c'est vraiment terrible cette technique, je viens d'ajouter des particules à l'arrache pour voir ce que ça donne, et même en faisant de chaque particule une source de lumière ça passe love

Ahci

Par contre comme les particules sont transparentes, et pour éviter qu'elles pourrissent le gbuffer alors qu'elles ne sont pas affectées par les lumières, je les rends dans un buffer à part (en utilisant juste la même depth map) que je blend à la fin du rendu, c'est peut-être un peu lourd mais c'est la solution la plus simple qui me soit venue.

Bon, vu tes dernières vidéos, j'imagine qu'en ce qui concerne les particules il y a "quelques" astuces applicables mais ça risque d'être complètement hors de portée pour moi, donc je vais probablement en rester là pour le moment grin (et nettoyer mon code qui commence à être sacrément atroce...)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

61

Bien ouéj cheeky
C'est moi ou ton anti-aliasing s'est de nouveau fait la malle ?

62

le rendu est bien sympathique en tous cas
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

63

Il s'est fait la malle mais pas "de nouveau", en fait depuis que j'utilise la méthode de sBibi ça a désactivé un anti-aliasing automatique qui ne s'applique que quand on fait un rendu en une seule passe directement à l'écran. Pour l'instant je ne sais pas comment le reproduire moi-même, donc c'est moche grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

64

méthode simple : tu génères une image 4 fois plus grande, tu la sauve avec un mauvais logiciel en jpg avec un taux de compression 4 fois plus élevé que la normale et enfin tu l'affiches à l'échelle 1/4
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

65

oui enfin le but c'est de le faire en temps réel là grin

(ceci dit il serait possible de générer un rendu plus grand et de le réduire ensuite mais c'est plus coûteux, peut-être trop)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

66

sinon tu réduis la palette à des couleurs 8bits et tu dis que c'est voulu, pour l'aspect rétro gaming ^^
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

67

ouai l'antialiasing c'est un probleme, avec cette technique, sauf a partir de DX10, (ou en faisant le gros porc, comme suggere vince grin)

sinon pour tes particules, pourquoi tu les rends tout simplement pas dans le meme color-buffer, mais apres la passe d'eclairage?
(en gros: separer le rendu en 1 passe opaque / 1 passe transparente. et le calcul du light buffer/eclairage tu le fais que dans la passe opaque)
avatar
HURRRR !

68

Hmm je m'y suis ptet mal pris, mais pour l'instant je crée mon color buffer, puis j'itère sur les sources de lumière pour obtenir le rendu final, et le color buffer ne sert plus à rien après ça. Du coup que je l'utilise lui ou un autre buffer, ça change pas grand chose, je vois pas trop le gain (à part au niveau mémoire) ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

69

bah aucun gain de perfs particulier, a part le cout d'un bind de framebuffer (pas vraiment gratuit), et ouai, en memoire...
avatar
HURRRR !

70

ah ok, ça je savais pas en effet... bon je sais pas trop comment je vais m'en sortir vu que je suis obligé de faire mon rendu plusieurs fois biscotte pas de multi-rendertarget, donc actuellement c'est :

- passe 1 : framebuffer 1 -> colors
- passe 2 : framebuffer 2 -> normals
- passe 3 : framebuffer 3 -> depth
- passe 4 : framebuffer 4 -> particules
- passe 5 : rendu à l'écran pour chaque lumière en utilisant les framebuffers 1 à 3
- passe 6 : blending du framebuffer 4 à l'écran

#overkill# grin

mais dans ton cas, tu le clear avant de t'en resservir de ton color buffer ? si tu te retrouves avec à la fois les couleurs "brutes" de la scène et les particules dans un même buffer, je vois pas trop ce qu'on peut en tirer derrière
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

71

#trihum#

ouai ok en fait ce que t'as fait c'est un deffered renderer classique grin
t'as pas de light-buffer a proprement parler.
donc ouai je comprends mieux pourquoi c'etait relou pour l'ambient.. la t'es oblige de rendre un fullscreen quad dans ta passe 5 pour ta lumiere ambiante nan?

ca c'est le deffered classique, le light-deffered ca serait plutot:

- passe 1 : framebuffer 1 -> normals
- passe 2 : framebuffer 2 -> depth
- passe 3 : framebuffer 3 -> blending additif de l'intensite de chaque lumiere en utilisant les framebuffers 1 et 2, ca donne le "light-buffer". tu set la clear-color a ta valeur d'ambient, comme ca a chaque frame quand tu le clear t'as dja ta lumiere ambiante.
- passe 4 : rendu à l'écran de chaque objet, en recuperant l'intensite lumineuse qui eclaire l'objet depuis le framebuffer 3
+ rendu des particules dans la meme passe, mais sans utiliser le light-buffer du framebuffer 3
avatar
HURRRR !

72

Heu oui c'était un deferred classique, j'aurais du le préciser grin

En fait j'avais pas compris l'intérêt du light-prepass rendering, jusqu'à maintenant ^^ mais heu dans ta passe 4, tu fais un nouveau rendu complet de tes objets, au départ j'avais compris qu'on utilisait un color buffer obtenu en même temps que les passes 1 et 2 ? (dans mon cas faudrait que je les rende une 4ième fois du coup...)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

73

ouai, vu que tu dois faire une passe pour chaque rendertarget...
mais la du coup t'en ferais pas plus, vu que ca fait que deplacer la passe color oui

(et si tu veux des materiaux plus complexes, la avec la methode actuelle tu devra faire des passes en plus (genre si tu veux une composante emissive a tes materiaux)
avatar
HURRRR !

74

ah oui j'avais zappé que la première passe color devenait inutile, du coup c'est cool, je vais re-tout changer pour passer à cette solution, merci grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

75

grin
avatar
HURRRR !

76

btw, vu que t'es en OpenGL, meme ES, faudrait que tu chech si tu peux pas binder le vrai depth-buffer en tant que texture, ca te permettrait de supprimer la passe 2 oui (bon faudra remapper les depths en lineaire par contre, ca depend de ta matrice de projection)
avatar
HURRRR !

77

J'ai déjà vérifié, mais j'ai l'impression qu'on ne peut pas binder une texture au depth-buffer, seulement un renderbuffer, mais faudra que je refasse l'essai. Par ailleurs y'a pas de floating point texture, seulement des textures RGBA, donc là je pack la valeur de profondeur moi-même si je pouvais binder une texture RGBA au depth buffer, je me demande dans quel format il l'écrirait.

[edit] d'après la 1ere réponse ici, pas de depth texture du WebGL sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

78

t'as un format special de texture en fait.. depth24.
et quand tu la sample t'as le float entre 0 et 1 (qui correspond au Z en clipspace)
avatar
HURRRR !

79

Ok alors cross, ça explique pourquoi c'est pas possible en WebGL : il n'y a que le format RGBA de disponible pour les textures. Tant pis, de toutes façons c'était parti pour être lent, alors un peu plus un peu moins... grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

80

ok grin
avatar
HURRRR !

81

Bon, comme d'habitude je réalise avec un temps de retard, mais si je passe en light pre-pass rendering, je ne peux plus (contrairement au deferred shading classique actuel) avoir une couleur pour la composante spéculaire, seulement une intensité ? (ou alors il me faut deux light buffers, i.e. ce que tu expliquais au ./11)

Actuellement j'ai des lumières qui ont essentiellement une composante spéculaire bleue, les autres sont quasi-nulles ; si je veux avoir un rendu similaire il faut que je réutilise la (seule, maintenant) couleur de la light + un coef scalaire pour reproduire la composante spéculaire ? (ça ne pose pas de problème particulier, je n'aurais a priori pas eu besoin d'avoir des couleurs différentes pour la diffuse et la spéculaire)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

82

ben deja en fait, c'est pas "realiste" d'avoir une couleur speculaire de la lumiere differente de sa couleur normale, vu que le reflet speculaire, c'est le reflet de la lumiere.
des lumieres rouges qui forment des taches speculaires bleues, c'est.. heu.. non grin

le seul truc qui pourrait modifier ca, c'est le materiau. (genre, si je dis pas de conneries, l'or ou le cuivre, qui, il me semble, modifient la couleur de la reflection speculaire, mais les materiaux comme ca sont assez rares, dans l'ecrasante majorite des cas, t'as pas de changements. mais quand t'en as, c'est une propriete du materiau, pas de la lumiere.

d'ou le fait que l'approximation avec l'intensite (et recuperer la couleur de la tache speculaire depuis le light-buffer classique) passe en pratique sans trop d'artefacts.

apres, si tu veux un rendu non-realiste, ouai, tu pourra pas faire comme ca.
avatar
HURRRR !

83

Nan au contraire ça m'arrange, jusqu'à maintenant je dupliquais chaque fois la même couleur pour diffuse et spec, à une constante près, donc ça va simplifier les choses. Je me demandais juste si le fait que les APIs habituelles laissent systématiquement la possibilité de spécifier, pour chaque lumière, une couleur différente pour ambient/diffuse/spec était un vrai besoin, ou si c'était juste pour laisser la possibilité de faire des rendus non réalistes.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

84

option 2 grin
avatar
HURRRR !

85

bearbecue (./83) :
des lumieres rouges qui forment des taches speculaires bleues, c'est.. heu.. non biggrin.gif

quand je jouais à 3D Studio MAX 4 ou 5, on pouvait trioui

86

Zeph (./83) :
des rendus non réalistes


C'est vrai quoi, ce matin dans ma douche y'avait un mini vaisseau qui volait en rase motte sur le carrelage cheeky
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

87

Boah c'est juste futuriste ça, pas non réaliste embarrassed
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

88

"futuriste" quand j'étais gamin on m'annonçait ça pour l'an 2000 cheeky
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

89

bah vala, en 2012, bob a pris des photos, a 12 ans pres c'etait presque ca ^^
grin
avatar
HURRRR !

90

Disclaimer: je n'ai pas commencé à tenter le light pre-pass rendering, j'ai un bug foireux à corriger avant ^^

En deferred shading classique donc, pour la passe où j'applique les lumières une à une, j'étais initialement parti pour utiliser des sphères de même rayon que celui des lumières à appliquer. Sauf que pour permettre à un pixel d'être affecté par plusieurs lumières, il faut désactiver le depth test pour que les sphères se superposent, mais ça provoque un effet indésirable : quand on est à l'extérieur de la sphère l'affichage de la face avant et de la face arrière fait que chaque pixel est dessiné deux fois, donc la lumière est appliquée deux fois également, donc ça foire, donc c'est nul.

Du coup, j'utilise à la place un disque que j'oriente toujours face à la caméra, comme ça je suis sûr que les pixels sont dessinés une seule fois par lumière. Sauf que du coup, si je* dépasse la lumière (i.e. si je me place de façon à être entre l'objet éclairé et la lumière), alors ce disque est dessiné derrière moi, donc n'apparaît pas du tout à l'écran, donc la lumière n'est pas appliquée, donc c'est tout noir, donc c'est nul aussi.

Il y a plusieurs façons de résoudre le problème, mais aucune ne me semble "bonne" :

- Je pourrais redessiner tout l'écran pour chaque lampe, comme ça au moins il n'y a aucun problème quelles que soient leurs positions tritop
- Je pourrais, quand une lampe est derrière moi* mais que ma distance à elle est quand même inférieure à son rayon, redessiner tout l'écran
- Je pourrais, quand une lampe est derrière moi* mais que ma distance à elle est quand même inférieure à son rayon, ou ramener mon disque juste devant moi* (même si ça risque de ne m'économiser qu'une poignée de pixels par rapport à la méthode précédente)
- Je pourrais réactiver le depth test et remettre le depth buffer à zéro avant l'affichage de chaque lumière
- Je pourrais utiliser le stencil buffer pour y coller l'index de la lumière en cours d'affichage, et éviter de dessiner deux fois un même pixel pour une même lampe

Mais bof quand même, il n'y a pas une solution plus... mieux ? grin

*je/moi = la caméra
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)