diff --git a/code/correction.md b/code/correction.md index 4546b11f9fbcd8639c4211afcc6352d8fddfd0c3..a295536bae19024c2f97e9ec05ac10459fa10a2e 100644 --- a/code/correction.md +++ b/code/correction.md @@ -1,5 +1,43 @@ -# correction +# corrections quelques idées, en tout cas. -on commence par les cas dégénérés que je n'ai pas montré pendant la discussion : ou pourquoi s'embette-t-on à utiliser la même séquence par pixel, mais avec des permuations différentes ? +on commence par les cas dégénérés que je n'ai pas montré pendant la formation : ou pourquoi s'embette-t-on à utiliser la même séquence par pixel, mais avec des permuations différentes ? alors qu'il y a des solutions plus directes... + + +## séquence Sobol' globale sur l'image + +par exemple, on peut exploiter la propriété de stratification forte des 2 premières dimensions de Sobol' qui forme une (0, 2)-séquence, ce qui veut dire que pour chaque puissance de 2, la séquence visite chaque point une seule fois (rappel : t= 0 donc $2^t=1$ point dans chaque strate...) + +comment profiter de cette propriété ? +il faut reprendre la boucle de rendu de l'image, elle n'est pas compatible avec ce que l'on va faire : + +``` +for(int py...) +for(int px...) + Sampler rng( seed ) + for(sample...) + // genere le ieme sample du pixel + float x= rng.sample() + float y= rng.sample() + // genere le rayon pour le point (px+x, py+y) sur le plan image +``` + +pour la transformer en : +``` +Sobol rng +for(sample...) + float x= rng.sample() + float y= rng.sample() + // verifie que le ieme sample correspond à un pixel de l'image + // genere le rayon pour le point (x * width, y * height) +``` + +si l'image est carrée et son coté est une puissance de 2, tous les points correspondent à un pixel. sinon, il faut trouver la puissance de 2 pour se retrouver dans le bon cas et éliminer tous les points qui ne correspondent pas à un pixel. + + + +## même séquence par pixel + +on comprend mieux pourquoi on s'embette avec les permutations d'Owen ou le RDS... +