Требуется ли для выборки в косинус-взвешенном полушарии 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 расчет.

Мой вопрос - означает ли это, что мне больше не нужно выполнять обычное точечное направление луча, потому что оно включено в PDF, или это в дополнение к PDF?

Ответы:


12

Вы всегда должны умножаться на косинус (на самом деле это часть уравнения рендеринга). Хотя, когда вы выполняете непрямое рассеивание с использованием трассировки лучей и, таким образом, интегрируете монте-карол (что является наиболее распространенным методом в этом случае), вы должны разделить вклад каждого образца в ваш PDF . Это хорошо рассмотрено здесь .

Также обратите внимание, что в упомянутой ссылке, если в PDF есть термины, которые вы также найдете в уравнениях рендеринга, вы можете оптимизировать код, если хотите, отменив эти термины.

Не забывайте, что BRDF диффузной поверхности ρ / π, где ρ обозначает альбедо поверхности. Поэтому нам нужно разделить результат на π. Хотя в случае косвенного рассеянного компонента не забывайте, что мы должны были разделить результат castRay на PDF случайной величины, которая, как мы показали ранее в этой главе, равна 1 / (2π). Деление косвенного рассеяния на 1 / (2π) равнозначно умножению этого значения на 2π. И поскольку альбедо также делится на π, мы можем упростить код ...

У вас похожая ситуация. Если вы посмотрите в PDF для выборки косинуса, то вы поймете, что условия могут быть отменены. Что не означает, что они «не» строго необходимы. Они просто уничтожают друг друга, что позволяет немного оптимизировать код (и избежать нескольких делений, умножения и т. Д.). Здесь вы больше разбираетесь в микрооптимизации ... что может сбить с толку, если вы попытаетесь изучить теорию, просто взглянув на оптимизированный код (который часто неправильно комментируется).

(cos(θ)...)PDF=(cos(θ)...)cos(θ)π=...


1
Спасибо! В этом есть смысл. Интуитивно я знал, что это необходимо, но я не знал, что это была оптимизация.
Стивен

5
Просто чтобы убедиться, что это явно ... не только полусфера, взвешенная по косинусу, является оптимизацией, потому что она требует меньше инструкций, это также оптимизация, потому что она сходится быстрее. Требуется меньше образцов, чтобы получить лучший результат. Это форма важности выборки.
Алан Вулф

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