Назад | Содержание | Вперед
Обратная трассировка лучей
Определение цвета точки. Текстурные карты и свойства материалов
В таких задачах компьютерной графики как получение изображений фотографического
качества (проще говоря то, чем занимаются 3ds max, Maya и прочие), имитирующих
реальные объекты, жизненно необходимы материалы. Будем полагать, что основным
методом закраски у нас будет алгоритм Фонга (Phong shading) с интерполяцией
нормалей (т.к. основным объектом будем считать треугольник, с заданными
нормалями в вершине).
В закраске по Фонгу используются следующие св-ва материала:
-
Цвет в области тени (Ambient color). Берется с учетом фонового освещения сцены.
-
Рассеянный цвет (Diffuse color). Берется отдельно для каждого источника света,
пропорционально косинусу угла между нормалью
в точке и вектором на источник света .
-
Цвет блика (Specular color). Берется отдельно для каждого источника света,
пропорционально косинусу угла между вектором отражения взгляда наблюдателя в
точке и вектором на источник света в
определенной степени .
Дополнительно используются следующие свойства:
-
Плотность материала (Opacity). Параметр обратный прозрачности. 1 – материал не
пропускает свет, 0 – материал полностью прозрачен.
-
Степень отражения (Reflection). 1 – материал отражает весь свет.
-
Сила блика (Specular amount). Дополнительный коэффициент для цвета блика.
-
Степень блика (Specular level). Определяет какой будет блик - точечный (большая
степень), или широкий (степень близка к нулю).
-
Коэффициент преломления (Refraction level). Насколько луч изменит свой угол при
прохождении полупрозрачного материала. Угол находится из известного оптического
закона: отношение косинуса угла падающего света к косинусу угла преломленного
света, равно отношению оптических плотностей (в данном случае коэффициенту
преломления).
-
Степень шероховатости (Bump amount). См. далее.
Для нахождения векторов отраженного луча и преломленного луча необходимо
вспомнить геометрию.
Отраженный луч. Находим - проекцию на
, вектор отраженного луча получается как .
Преломленный луч. Находим двойное векторное произведение (за
порядок умножения не ручаюсь). Длина полученного вектора равна синусу угла
между нормалью и падающего вектора. Но длина преломленного луча равна синусу
угла между нормалью и падающего вектора, умноженному на коэффициент
преломления. Теперь нужно только промасштабировать полученный вектор и сложить
его с нормалью . Корень нужен, чтобы
получить в результате единичный вектор. Если под корнем получается
отрицательное число, то наблюдается эффект полного отражения.
Назад | Содержание | Вперед
©Павел Коколемин