Я не могу найти вескую причину для этого нигде. Вектор отражения, используемый в фонге, имеет простую основу в физике. Но половинный вектор, используемый в блинне, по-видимому, не имеет рациональной основы и не является надлежащим отражением. И все же он используется в каждой так называемой «физической» функции затенения. Если для этого есть хорошая физическая основа, я хотел бы знать.
То, что я смог найти, это несколько причин:
Это быстрее - есть смешанная информация об этом, но даже в этом случае это была бы веская причина ... в 1998 году.
Он лучше обрабатывает углы выше 90 градусов - насколько я могу судить, единственная причина этого в том, что термин «фонг» использовался неправильно. Точечный продукт отражения и вида дает угол между -1 и +1. Обычно этот угол ограничен от 0 до 1, это является прямой причиной проблемы 90 градусов. Повторно нормализуйте угол вместо того, чтобы зажать его, и вы получите полный охват 180 градусов. Я отказываюсь верить, что простая операция x * 0.5 + 0.5 ускользнула от мира графики на 40 лет.
он лучше обрабатывает края - «проблема» с краями также существует в решении blinn, но в меньшей степени. Основная причина - неправильное моделирование освещения области на терминаторе, что должно быть важно для любого «физически основанного» шейдера. Но даже в более простых ситуациях сигмовидная функция может правильно аппроксимировать линию мягкого терминатора. Умножение на термин Ламберта некорректно, так как оно неправильно уменьшает зеркальный термин, это может отменить термин Френеля и привести к дальнейшим ошибкам.
У него длинные отражения на краю - мне кажется, что, хотя анизотропные отражения могут быть реалистичными, блинн не является правильным способом их реализации, поскольку они появляются только на краю. Это просто счастливое совпадение, что ошибка в термине H выглядит реалистичной.
Ни одна из этих причин не является удовлетворительной, я хочу разобраться в этом безумии.
Я хочу уточнить , что я не говорю о Blinn и Фонга конкретно , но вместо этого о компонентах вектора H и R, которые используются в качестве основы для этих шейдеров, а также других.