Чтобы уточнить мой комментарий выше как потенциальный ответ на этот вопрос:
Вы правы в том смысле, что NDF дает статистическую вероятность того, что нормаль микроповерхности M
точно совпадает с N
(где точно означает: относительно бесконечно малого телесного угла вокруг N
и M
).
Таким образом, NDF представляет собой функцию распределения (в более широком смысле «обобщенную функцию») с единицей измерения one over steradians
. Это означает, что вы получаете значение безразмерной дроби, когда вы умножаете значение функции на телесный угол. И здесь в игру вступает интеграция.
Потому что то, для чего NDF в конечном итоге используется, заключается в уравнении визуализации для определения доли света, отражаемого микрогранями в пределах дифференциального телесного угла через M
, где M
— полувектор между двумя другими векторами V_o
и V_i
и где один из этих двух векторов определяется как «исходящее направление» к принимающей дифференциальной поверхности, а другой - как «направление входящего света». Мы будем использовать w_o
= исходящее и w_i
= входящее направление, но из-за взаимности это действительно не имеет значения.
Когда мы решаем уравнение рендеринга, мы должны интегрировать по всей полусфере точки поверхности, которую мы хотим затенить (т. е. чью яркость мы хотим вычислить вдоль исходящего направления w_o
), чтобы учесть весь свет, который потенциально будет отражаться от этой поверхности. точка вдоль исходящего направления w_o
. Для этого нам нужно знать «излучение» этой точки. И чтобы получить это, мы оцениваем BRDF для всех возможных направлений входящего света w_i
, суммируем и усредняем их вклады.
Если бы мы действительно выбрали все бесконечное число w_i
направлений для заданного w_o
направления и запросили NDF для каждого такого направления и усреднили косинусно-взвешенные результаты NDF, результат всегда был бы точно 1.0
, потому что, если мы рассматриваем NDF только как потенциальное с учетом BRDF, весь исходящий свет вдоль w_o
должен исходить откуда-то при отражении от поверхности.
И из-за взаимности Гельмгольца мы можем перефразировать это в обратном порядке, сказав: при фиксации w_i
направления (так что учитывается только одно направление, откуда исходит свет) и интегрировать по всем возможным исходящим направлениям w_o
и снова оценили и усреднили косинусно-взвешенную NDF, результат снова будет точно 1.0
. Потому что, когда мы снова рассматриваем только NDF в BRDF, входящий свет всегда будет отражаться куда-то и не теряться.
Итак, после написания всего этого, что на самом деле означает один образец функции NDF? Вкратце: это означает, что вы не интегрируете по всем дифференциальным телесным углам и не усредняете результаты, а берете только одну выборку для одного направления и объявляете это как результат вашего интеграла (который вы вычислили только с одной выборкой). Таким образом, вы в основном вычислили сумму Римана с одной выборкой.
Или, другими словами: простая выборка NDF в одном месте не имеет правдоподобного физического смысла/результата. Я надеюсь, что это проясняет некоторые неизвестные.
На самом деле это был мой первый серьезный ответ на StackOverflow, и я знаю, что определенно смогу улучшить его в будущем! Спасибо! :)
person
Kai Burjack
schedule
09.12.2019
one per steradian
. Это связано с тем, что вся функция должна интегрироваться до 1,0 по полушарию. И на самом деле, если моделируемая поверхность является идеальным зеркалом, эта функция будет дельта-функцией Дирака с единственным бесконечно тонким пиком, имеющим бесконечно большое значение. См., например: reedbeta.com/blog/hows-the-ndf -действительно определенный - person Kai Burjack   schedule 08.12.2019