ДР/2015/Л10/Група 1
- Forums:
Адаптивно семплиране на RectLight
На моята машина, boxed.qdmg се рендерира за 12.6s при 4х4 семплиране на RectLight-а. Но картинката не е достатъчно добра, има забележим шум в полусенките. При 8х8 семплиране шумът изчезва, но времето за рендериране се увеличава четирикратно. Същевременно, подобрението е само в областта на полусенките, а те заемат малка част от картинката. Идеята на адаптивното семплиране е, почвайки с груба семплираща схема (например 4х4), да установим дали сме изцяло в осветена или неосветена част (т.е. дали всичките 16 семпъла са едновременно в сянка или едновременно извън сянка). Ако не е такъв случая, приемаме, че сме в полусянка и повтаряме (акумулираме) 4х4 семплиращата схема още няколко пъти (например още 3 пъти - така ще имаме общо 64 семпъла, т.е. толкова, колкото имаше и 8х8 схемата*), за да получим по-точен (безшумен) резултат.
За да генерализираме алгоритъма, ще въведем външен параметър refinementPasses (вкарайте го в GlobalSettings). Вътре в phong и lambert шейдърите, за всяка лампа, ще повторим акумулацията на семплите refinementPasses на брой пъти. За да реализираме горния "shortcut", на първия пас ще събираме статистика за броя "сенчести" семпъла (т.е. ще броим, за колко от семплите, lightIsVisible() е било false). Ако накрая на първия пас сме акумулирали или 0, или n "сенчести" семпъла, може да прекратим семплирането без допълнителни пасове.
Промените трябва да направите в Phong и Lambert класовете (самите промени са идентични за двата случая).
При тези конкретни настройки (4х4 семплиране и 4 refinementPasses) сцената отнема само между 40 до 50% от времето за 8х8 схема, при това без забележима деградация в качеството на полусенките. Можете да проверите и какъв ще е резултатът при 3x3 семплиране със 7 refinementPasses.
--
* с тази разлика, че имаме 4x4 stratified sampling, вместо 8х8, т.е. не е теоретически оптимално.
Comments
Замерване на времето за рендене
Здравей
Как е правилно да замерим увеличението на времето при адаптивното семплиране?
Какво имам предвид.
Кодът от таг homework10 с boxed.qdmg се ренди за ~ 15с.
Реализирам адаптивното семплиране и задавам refinementPasses=1 и вече рендя за около 29 секунди. Когато вдигна refinementPasses на 4, ми отнема около 43 сек.
Видимо е, че имам какво да оптимизирам, но се чудех спрямо кое да замеря забавянето?
Не би следвало да се
Не би следвало да се увеличава времето с адаптивно семплиране. Сегашните настройки на boxed.qdmg са 4х4 семплиране. Ако пускаш адаптивно, трябва времето да е приблизително същото, при refinementPasses 1 и настройки 4х4. Ако не е така при теб, трябва (на метода проба/грешка) да откриеш кое ти бави толкова при теб.