Вам завжди потрібно помножити на косинус термін дійсно (це частина рівняння візуалізації). Хоча, коли ви робите непряму дифузну за допомогою відстеження променів і, таким чином, інтеграцію монте-колядки (що є найпоширенішою технікою в даному випадку), ви повинні розділити внесок кожного зразка на ваш PDF . Це добре показано тут .
Зауважте також, що у згаданій довідці, якщо в PDF є терміни, які ви також знайдете в рівняннях візуалізації, ви можете оптимізувати код, якщо бажаєте, скасувавши ці умови.
Не забувайте, що BRDF дифузної поверхні є ρ / π, де ρ означає поверхневий альбедо. Тому нам потрібно ділити результат на π. Хоча у випадку непрямої дифузної складової, не забувайте, що ми повинні були розділити результат castRay на PDF випадкової величини, яка, як ми показали раніше в цій главі, дорівнює 1 / (2π). Ділення indirectDiffuseby 1 / (2π) не відповідає тому, як помножити це значення на 2π. А оскільки альбедо також ділиться на π, ми можемо спростити код ...
У вас схожа ситуація. Якщо ви подивитесь у PDF на вибірку косинусу, то зрозумієте, що умови можна скасувати. Що не означає, що вони "не" суворо необхідні. Вони є, вони просто скасовують один одного, що дозволяє злегка оптимізувати код (і уникнути кількох поділів, множення тощо). Тут ви більше в області мікрооптимізації ... що може заплутати, якщо ви спробуєте вивчити теорію, просто подивившись на оптимізований код (який часто не коментується належним чином).
( З про з ( θ ) . . . )ПД Ж= ( С про з ( θ ) . . . )c o s ( θ )π= . . .