exam39 - MiAneko24/bmstu-cg GitHub Wiki

39. Определение нормали к поверхности и вектора отражения (4 способа) в алгоритмах построения реалистических изображений.

Определение нормали к поверхности

1. Если известно аналитическое описание поверхности - нормаль вычисляется через градиент в точке.
grad(F(x, y, z))

2. Если заданы уравнения плоскостей, проходящие через полигональные грани, то нормаль к их общей вершине равна среднему значению нормалей ко всем многоугольникам, сходящимся в этой вершине.
N = (A1 + ... + An)i + (B1 + ... + Bn)j + (C1 + ... + Cn)k

  • An - коэффициенты уравнений плоскостей.

3. Если не заданы уравнения плоскостей. В таком случае, нормаль ищется путём усредненяя векторного произведения векторов, построенных на всех ребрах, пересекающихся в вершине.
N = v1v2 + v2v3 + v3v1

  • v1 - v3 векторы ребер инцидентных вершине в которой ищется нормаль.

Требуется найти только внешние нормали.

Если нормаль к поверхности используется для определения интенсивности и для изображения объекта или сцены выполняется перспективное преобразование, то нормаль следует вычислять до перспективного преобразования. Иначе направление нормали будет искажено, что приведет к неправильному определению интенсивности, задаваемой моделью освещения.

Определение вектора отражения.

Основная идея: по закону отражения вектор падающего света, нормаль к поверхности и вектор отражения лежат в одной плоскости, причем на этой плоскости угол падения равен углу отражения.

Существует диффузное и зеркальное отражение.
При диффузном: свет поглащается поверхностью на которую падает и вновь излучается этой поверхностью по всем направлениям. Цвет совпадает с цветом поверхности.

При зеркальном: цвет концентрируется вокруг вектора отражения, то есть это направленное отражение. Цвет зеркального отраженного света совпадает с цветом падающего света.

Отражение происходит не строго по вектору, а вблизи. Его можно получить возведением косинуса в степень. Чем выше степень, тем более концентрированное распределение.

Первый способ

Это решение подходит для случая, когда свет падает вдоль оси Z. Удобно использовать для модели освещения с одним точечным источником. Переносят начало СК в точку поверхности, проекция вектора нормали и отражения (на плоскость ху) будут лежать на одной прямой.

1

  • Угол между единичным вектором нормали и осью Z - θ.
  • cos(θ) - составляющая вектора нормали по оси z.

2

Итоговые формулы:

3

Второй способ

Использовать можно когда не подходит первый метод (свет не падает по оси z или источников несколько).

Нормаль поворачивается параллельно оси Z, точка P - начало координат. В таком случае, плоскость xy - касательная к поверхности, х и у составляющие векторов падения и отражения будут иметь разные знаки, z составляющая - одинаковая. Далее: обратное преобразование и получение координат вектора отражения в исходной СК.

В перемещенной и повернутной CК:
5

Метод удобен, когда преобразования реализованы аппаратно или микропрограммно.

Третий способ

Основано на векторном произведении. Равенство углов падения и отражения выражается через скалярные произведения произведения векторов:

6

Четвертый способ

ЧИСТО АНАЛИТИЧЕСКИЙ СПОСОБ!

7

  • t - угол падения
  • Вектор R представляется суммой векторов L и n с некоторыми коэфами альфа и бета
  • Решается сис-ма из двух уравнений и находятся эти коэфы.

Ну а дальше дело техники: домножаем на один кеф вектор нормали, на другой - вектор падения и получаем вектор отражения!

Следующий вопрос: 40. Построение теней при создании реалистических изображений. Учет теней в алгоритмах удаления невидимых поверхностей.

Предыдущий вопрос: 38. Построение реалистических изображений. Закраска Фонга (улучшение аппроксимации кривизны поверхности).