Auteur Sujet: Volumetric light ?  (Lu 5972 fois)

0 Membres et 1 Invité sur ce sujet

Flure: Le ray-marching, une bonne fois pour toutes, c'est pas QUE pour du distance field !
Dans le nom t'as MARCHING, ça veut dire marcher... Tu avances le long d'un rayon, tu fais ce que tu veux après, t'es pas OBLIGE d'évaluer un distance field ! Si tu relis ce que j'ai écris plus haut tu t'apercevras que j'évalue la densité du milieu, c'est ce qui me permet de définir son opacité.

Le ray-marching ça existe depuis 1000 ans, ça a pas été inventé par iQ pour la demoscene hein...

Pour répondre à ta question, le ray-marching se fait en espace world en lançant un rayon depuis la caméra, quand tu avances le long du rayon (avec des pas fixes, et non déterminés par un distance field) hé bien tu vas reprojeter ta position world courante dans la shadow map (comme si tu faisais ça sur un triangle habituellement) et tu vas lire si tu es dans l'ombre ou non. Ca te permet de déterminer si ton point reçoit de la lumière ou pas (2ème partie du calcul que j'ai énoncé plus haut).

Tu veux tous les détails ? Va là : http://wiki.nuaj.net/index.php?title=Clouds (désolé pour le formattage qui pète à un moment, c'est mon latex qu'est pourrave)

*EDIT*: Augmenté la taille de la font.

Ok, des pas fixes, c'est bien ce que je me disais, du coup on va sampler dans le volume, mais on risque de passer au travers sans taper dedans des fois non ?
Enfin je pense que oui... Bref c'est bien ce que je pensais mais c'est le fait de devoir sampler dans le volume de la lumière qui m'embêtait...

Sinon pour arranger ton latex, on peut faire des soirées avec des copains... allez viens...

(je sors)

Yo ! je sors de ma caverne :D

On _peut_ gruger un peu avec un post-process. l'idée étant un peu la même que pour des godrays :

1. tu trouve la position de ta light en screenspace
2. tu render ta géométrie, ainsi qu'un masque : blanc = la géométrie qui masque la lumière, noir sinon
3. t'en profite pour render ton halo lumineux basiquement (pas de volumetric light ici donc)

4. tu radial-blur (ouais c'est un verbe :D) ton masque avec pour centre de radial la position (xy) de la lumière en screenspace. Tu te sers de ça pour atténuer le halo (ie. "halo *= 1.0-bleeding")
5. tu floute ce que tu viens de faire. pas obligé, mais c'est moche sinon :3
6. tu affiche ta géométrie rendue en 2, en y ajoutant le halo bidouillé en 3/4/5.

Et voilà ! Bon, c'est pas le plus beau truc au monde, mais ça fait l'affaire ^^;

(ci-joint : test sans l'étape 5)

Edith : précision, le test ci-dessous à été fait complètement à la Rache, j'ai sorti un cube de blender et j'en ai sorti les masques/halo en bourrin avec gimp. ^^;

Also, une limitation est que c'est facile à gérer en post process... tant que t'as qu'une light. Avec plusieurs, le fun commence :D à mon avis, un sorting back-to-front des lights peut suffire, à tester =)

Edit : parce que j'ai pas envie de créer un 3e post. :D Bref, j'ai re-bricolé un test qui ressemble un peu plus à qqch en pièce jointe, et les limitations auxquelles je pense là now :

  • Ca devient compliqué à gérer avec plusieurs lights
  • L'effet n'ayant pas de profondeur, c'est un peu galère quand on a des lights complètement de biais (ça fera l'illusion d'autant mieux que la light est verticale, je suppose...)