Oui la dernière fois, je n'avais pas fais ça alors, c'est pour cela que ça ne rendait pas bien.h mais ! Ce ne serait pas ce qu'il est conseillé de faire pour le blended weighted OIT ?
Je pensais que le weighted blended OIT ça marchait aussi pour les objets opaques mais en fait non.
Sinon, il y a un autre moyen que le blending pour calculer la couleur : (Mais contrairement à ce que je pensais, ça ne résous pas le problème de l'OIT, car il faut toujours la valeur alpha du fragment précédent pour calculer ce que le filtre précédent laisse passer comme lumière et il faut le faire, dans l'ordre)
Bref en infographie on fait comme ça :
Maintenant il y a peut être moyen de le faire, dans le désordre. (Mais pour l'instant, je ne vois pas comment)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 sprite1 (1, 0, 0, 0.25) sprite2 (0, 1, 0, 0.5) sprite3 (0, 0, 1, 0.75) lumière (1, 1, 1, 1) Le sprite 3 intersecte les rayons de lumière en premier, couleur = (1, 1, 1, 1) * (0, 0, 1) * 0.75 = (0, 0, 0.75) => Reflète 75% de la lumière bleue. Le sprite 2 intersecte les rayons de lumière en second, couleur = (1, 1, 1) * (1-0.75) * (0, 1, 0) * 0.5 = (0.25, 0.25, 0.25) * (0, 1, 0) * 0.5 = (0, 0.125, 0) => Lumière passée à travers le sprite 3 * 50% de la lumière verte reflétée par le sprite 2. Le sprite 1 intersecte les rayons de lumière en dernier : (1, 1, 1) * (1 - 0.5) * (1, 0, 0) * 0.25 = (0.5, 0.5, 0.5) * (0.25, 0, 0) = (0.125, 0, 0) => Lumière passée à travers le sprite 2 * 25% de la lumière reflétée par le sprite 1. Couleur finale = (0, 0, 0.75) + (0, 0.125, 0) + (0.125, 0, 0) = (0.125, 0.125, 0.75)
Ce qui est intéressant c'est l'addition à la fin, je peux la faire, dans n'importe quel ordre donc c'est déjà un début de solution.
Et c'est aussi un début de solution pour le raytracing.
Je trouve que c'est moins compliqué de le faire comme ça, surtout que pour la réfraction il suffit de renvoyé le rayon sur un autre objet et pour la disfraction, dévier le rayon.
Et pour les ombres la couleur sera noire si un objet en cache un autre donc...
Avec les shader il faut : (Placer la caméra à la source de la lumière (n lumières = n caméras à placer), et stocker les distances entre la lumière et les objets dans une texture, et ensuite seulement, avec une depthBiasMatrix, calculer les coordonnées de l'ombre (chose que je n'ai pas très bien comprise), pour ensuite, mettre le fragment en noir si il est entre la lumière et un autre objet.
Partager