diff --git a/README.md b/README.md index c31d59350c0088cb55d104330dafd3cd8b714ae3..46d5d5184810180e2035e01a78ca9aae7854808f 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,39 @@ il y a 2 codes de tests dans `projects` : il est possible de changer de sampler pour faire quelques comparaisons, il suffit de modifier le typedef au début des sources. les samplers eux mêmes sont dans : -- projects/sampler.h : il y a le generateur standard c++ et 2 generateurs basés compteurs, -- projects/sampler_sobol.h : la sequence sobol classique, avec max 128 dimensions, la version avec une évaluation "rapide" dans l'ordre des codes de gray -- projects/owen_fast.h : les permutations d'owen (à utiliser sur un échantillon sobol). +- `projects/sampler.h` : il y a un générateur standard c++ et 2 générateurs basés compteurs, +- `projects/sampler_sobol.h` : la séquence sobol classique, avec max 128 dimensions, la version avec une évaluation "rapide" dans l'ordre des codes de gray, et les 2 acceptent un scrambling simple, random digit shift, +- `projects/owen_fast.h` : les permutations d'owen (à utiliser sur un échantillon sobol). + +voila quelques suggestions, à faire (ou pas) dans l'ordre que vous préferrez. + + +## réduction de dimensions +vous pouvez appliquer les différentes stratégies de réduction de dimensions au path tracer : + +- passer de 3d à 2d dans la sélection des sources, et dans la génération des directions en fonction des matières, +- réutiliser les mêmes nombres aléatoires pour estimer les 2 intégrales, cf la fonction `direct_mis()`. + +le nombre de dimensions comsommées est affiché à la fin du calcul. + +j'ai "laissé" la dernière amélioration en place, qui permet d'économiser un rayon par rebond et par pixel. + +les matières sont dans `src/gltf/brdf.h` et les sources de lumières (uniquement des triangles émissifs) se trouvent dans `src/gltf/sources.h`. + + +## sélection des sources +vous pouvez également modifier la stratégie de sélection des sources dans `src/gltf/sources.h`. la solution actuelle construit une variable aléatoire discrète et inverse sa cdf pour sélectionner une source proportionnellement à son aire. + +et par rapport à son angle solide ? c'est mieux ou pas ? dans quels cas ? + +cf [wikipedia](https://en.wikipedia.org/wiki/Solid_angle#Tetrahedron) pour calculer l'angle solide d'un triangle + +## multiple importance sampling +vous pouvez facilement modifier l'heuristique utilisée pour combiner les 2 stratégies dans la fonction `direct_mis()`. +ie utiliser balance au lieu de power comme c'est le cas dans le code. + +il y a 2 estimateurs MIS, la version "multi-sample" et la version "one-sample". que faut-il modifier pour écrire la version "one-sample". quelles sont les différences en temps de rendu, en erreur ? + +## owen +il y a un bug numérique dans les permutations d'owen, cf `projects/owen_fast.h`. vous pouvez vous en rendre compte en comparant les images calculées avec Owen et OwenFast pour peu d'échantillons (< 16). +