Вы всегда должны умножаться на косинус (на самом деле это часть уравнения рендеринга). Хотя, когда вы выполняете непрямое рассеивание с использованием трассировки лучей и, таким образом, интегрируете монте-карол (что является наиболее распространенным методом в этом случае), вы должны разделить вклад каждого образца в ваш PDF . Это хорошо рассмотрено здесь .
Также обратите внимание, что в упомянутой ссылке, если в PDF есть термины, которые вы также найдете в уравнениях рендеринга, вы можете оптимизировать код, если хотите, отменив эти термины.
Не забывайте, что BRDF диффузной поверхности ρ / π, где ρ обозначает альбедо поверхности. Поэтому нам нужно разделить результат на π. Хотя в случае косвенного рассеянного компонента не забывайте, что мы должны были разделить результат castRay на PDF случайной величины, которая, как мы показали ранее в этой главе, равна 1 / (2π). Деление косвенного рассеяния на 1 / (2π) равнозначно умножению этого значения на 2π. И поскольку альбедо также делится на π, мы можем упростить код ...
У вас похожая ситуация. Если вы посмотрите в PDF для выборки косинуса, то вы поймете, что условия могут быть отменены. Что не означает, что они «не» строго необходимы. Они просто уничтожают друг друга, что позволяет немного оптимизировать код (и избежать нескольких делений, умножения и т. Д.). Здесь вы больше разбираетесь в микрооптимизации ... что может сбить с толку, если вы попытаетесь изучить теорию, просто взглянув на оптимизированный код (который часто неправильно комментируется).
(cos(θ)...)PDF=(cos(θ)...)cos(θ)π=...