Чи вимагає відбір проб півсфери, зваженого косинусом, ще NdotL при розрахунку внеску для непрямого світла?


12

При перетворенні від рівномірного відбору проб півкулі до відбору проб півкулі, зваженого косинусом, я плутаюсь у заяві в статті.

Мій поточний непрямий внесок розраховується як:

Vec3 RayDir = UniformGenerator.Next()
Color3 indirectDiffuse = Normal.dot(RayDir) * castRay(Origin, RayDir)

Де крапковий добуток cos (θ)

Але в цій статті про кращу вибірку ( http://www.rorydriscoll.com/2009/01/07/better-sampling/ ) автор пропонує, що PDF є (cos (θ) / pi), і немає ніяких доказів обчислення N крапки L.

Моє запитання - чи це означає, що мені більше не потрібно виконувати звичайний точковий rayDirection, тому що він включений у PDF, чи це додатково до pdf?

Відповіді:


12

Вам завжди потрібно помножити на косинус термін дійсно (це частина рівняння візуалізації). Хоча, коли ви робите непряму дифузну за допомогою відстеження променів і, таким чином, інтеграцію монте-колядки (що є найпоширенішою технікою в даному випадку), ви повинні розділити внесок кожного зразка на ваш PDF . Це добре показано тут .

Зауважте також, що у згаданій довідці, якщо в PDF є терміни, які ви також знайдете в рівняннях візуалізації, ви можете оптимізувати код, якщо бажаєте, скасувавши ці умови.

Не забувайте, що BRDF дифузної поверхні є ρ / π, де ρ означає поверхневий альбедо. Тому нам потрібно ділити результат на π. Хоча у випадку непрямої дифузної складової, не забувайте, що ми повинні були розділити результат castRay на PDF випадкової величини, яка, як ми показали раніше в цій главі, дорівнює 1 / (2π). Ділення indirectDiffuseby 1 / (2π) не відповідає тому, як помножити це значення на 2π. А оскільки альбедо також ділиться на π, ми можемо спростити код ...

У вас схожа ситуація. Якщо ви подивитесь у PDF на вибірку косинусу, то зрозумієте, що умови можна скасувати. Що не означає, що вони "не" суворо необхідні. Вони є, вони просто скасовують один одного, що дозволяє злегка оптимізувати код (і уникнути кількох поділів, множення тощо). Тут ви більше в області мікрооптимізації ... що може заплутати, якщо ви спробуєте вивчити теорію, просто подивившись на оптимізований код (який часто не коментується належним чином).

(cос(θ)...)ПDЖ=(cос(θ)...)cос(θ)π=...


1
Дякую! Що має сенс. Інтуїтивно я знав, що це потрібно, але не визнав, що це оптимізація.
Стівен

5
Просто щоб переконатися, що це явно. Не тільки оптимізація косинусної півсфери є оптимізацією, оскільки вона потребує меншої кількості інструкцій, але й оптимізація, оскільки вона швидше конвергується. Для отримання кращого результату потрібно менше зразків. Це форма вибіркового значення.
Алан Вулф

Саме так - це було моє бажання, оскільки я намагаюся зменшити кількість вибірок для непрямих обчислень у своїй світловимірі.
Стівен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.