Модели поверхностей, основанных на однократном рассеянии в микрофасете, такие как исходная модель Torrance-Sparrow BRDF или производные модели, такие как BSDF для шероховатых диэлектрических поверхностей, автор Walter et al. пренебрегать взаимным отражением света между микрообъемами, что приводит к потере энергии, вызывающей потемнение, особенно при более высоких значениях шероховатости.
Проблема может быть легко продемонстрирована с помощью теста печи. На следующих рисунках показано поведение моей реализации проводящего микроразмера BRDF с использованием модели Смита и распределения GGX для параметров шероховатости от 0,2 до 1,0 (коэффициент Френеля намеренно установлен равным 1, чтобы облегчить нахождение проблемы):
Испытание в печи для грубого диэлектрика (IoR 1,51) BSDF с использованием модели Смита и распределения микроснимков GGX для параметров шероховатости от 0,2 до 1,0:
Эрик Хейц и др. Недавно мы предложили модель многократного рассеяния, которая решает проблему затемнения путем полного решения взаимодействия света, но есть проблемы с производительностью из-за стохастического характера его процедуры оценки, как было упомянуто самим Хейцем на форуме LuxRender .
Существует ли известный метод компенсации для восстановления утраченной энергии моделей однократного рассеяния? Не обязательно физически правильно, но, по крайней мере, не нарушать правдоподобие (взаимность Гельмгольца и сохранение энергии) слишком много и, в идеале, без необходимости ручной настройки параметров.
В Disney BSDF есть параметризованный компонент, называемый «блеск» (в основном, глянцевая доля на основе Френеля), который можно использовать для компенсации потемнения по краям, но, как они упоминают в своем курсе Siggraph 2015, это очень специальный метод:
«... это очень приблизительно и не работает так же для других значений шероховатости ...»
Вышеупомянутый комментарий от Eric HEITZ в LuxRender форуме также предлагает использовать некоторую компенсацию хак, но, к сожалению, не вдаваться в подробности:
Насколько мне известно, вы можете использовать несколько более простых хаков для улучшения энергосбережения в моделях с единичным рассеянием (например, настройка альбедо). Однако, если вы сделаете это, вы не сможете получить совершенно энергосберегающий материал (например, идеально белое грубое стекло), не нарушив взаимность BSDF.