16Fermer18
GodzilLe 13/03/2020 à 11:38
Zero: gcc et clang le font déjà de base avec les option d’optimisation de base (juste -O3, on peux ajouter -march=native pour utiliser le meilleur set pour le CPU courant), c'est assez impressionnant a vrai dire.

Sinon:

Brunni (./22121) :
c’est marrant ce rendu par contre, pas "shaded" du tout, qui fait un peu pâte à modeler, ou sprite 3D pré-rendu sur Super Nintendo, comment ça se fait ?

Il y a plein de facteurs qui rentrent en compte:
1 - tu zoom sur l'image pour voir ca
2 - il n'y a pas de super sampling (ou d'AA) donc quand tu zoom les bord sont super net et ça fait très artificiel. Prend la même image, met la a 100% et éloigne toi de l’écran, tu verras ça change pas mal. Et c'est lié avec le point 1
3 - Les lumières sont des "point light" aka un truc qui n'existe nulle part, un point infiniment petit qui diffuse uniformément de la lumière tout autour.

Prenons cette scène:

ch8_test.png

Comme tu peux voir il y a des ombres, c'est joli, mais leur netteté n'est pas naturelle. Pour ca il faut utiliser un autre type de lumiere comme celles de zones, ou on définie un "rectangle" d'ou la lumiere est diffusé, donc pour chaque point de l'image on va pas lancer un rayon de lumiere, mais 8, 16, 32, 1000 (c'est extrême mais pas non plus déconnant suivant le degré de realisme qu'on veux, mais ca a un prix. ca ralentit le rendu de beaucoup)

Quand on fait ca on peux obtenir ce genre de rendu:

arealight_test.png

C'est deja beaucoup mieux, mais elle reste un peu granuleuse car dans le cas de cette image pour eviter un rendu de 36h, la lumiere n'a que 8x8 zones.

Ce chapitre bonus du bouquin: http://raytracerchallenge.com/bonus/area-light.html donne des exemples de l'effet de la lumiere de zone avec peu de point et beaucoup de points ainsi que les difference de temps de rendu