Материал получен от доктора Инцай Сяо, 3460:457/557.

Затенение

Затенение инкапсулирует объекты, источники света и камеры. Объекты можно преобразовать в пиксели, используя порядок изображений (начиная с пикселей; трассировка лучей) или порядок объектов (начиная с объектов; преобразование сканирования).

Затенение в пикселе чаще всего использует модель отражения Фонга.

Модель отражения Фонга

Модель отражения Фонга включает окружающее отражение, диффузное отражение и зеркальное отражение.

Окружающее отражение не зависит от направления; и выводится с использованием I_a * k_a, где I_a — интенсивность окружающего света, а k_a — коэффициент отражения окружающего пространства.

Диффузное отражение зависит от направления; и выводится с использованием I_d * k_d * (l ● n) или I_d * k_d * cos(θ), где I_d — интенсивность рассеянного света, а k_d — коэффициент отражения объекта. θ — это угол между направлением света (l) и нормалью к поверхности (n). l и n — единичные векторы.

Зеркальное отражение зависит от направления просмотра; и выводится с использованием I_s * k_s * (v ● r)^⍺ или I_s * k_s * cos^⍺(Ф), где I_s — интенсивность зеркального света, а k_s — коэффициент зеркального отражения. Ф — это угол между направлением отражения (r) и направлением взгляда (v). — коэффициент блеска.

Модель отражения Фонга: «Формула Я»

Чтобы вывести формулу для отражения Фонга, мы должны, наконец, рассмотреть затухание или потерю интенсивности, когда что-то проходит через среду (в нашем случае теоретическое пространство).

Затухание зависит от расстояния и не влияет на окружающий свет. Учитывая расстояние d от источника света до точки поверхности, f_att = 1/(a + bd + cd^2). a, b и c — постоянные, линейные, квадратичные коэффициенты затухания.

Учитывая это и приведенную выше информацию, мы можем получить: I = I_a * k_a + f_att * I_d * k_d * (l ● n) + f_att * I_s * k_s * (v ● r)^⍺.

В качестве альтернативы мы можем получить расширенную форму: I = I_a * k_a + (I_d * k_d * cos(θ)) / (a + bd + cd^2) + (I_s * k_s * cos^⍺(Ф)) / (a + bd + cd^2).

Затенение цвета можно выполнить, вычислив I для всех 3 цветовых каналов RGB.

Адаптация: рекурсивная I формула: I_new = (1 - k_ref — k_trans) * I_light + k_ref * I_illum_ref + k_trans * I_illum_trans

Затенение порядка изображений

Затенение порядка изображений или трассировка лучей может быть реализовано в простейшей форме следующим образом:

Отслеживание порядка объектов

Затенение порядка объектов реализовано с использованием Flat/Constant, Gouraud или Phong.

Идея отслеживания порядка объектов состоит в том, чтобы брать объекты, аппроксимированные в виде треугольников (или моделей), и определять цвет для каждого пикселя треугольников. Эта концепция требует z-буфера или буфера памяти для хранения значений глубины (z) каждого пикселя.

Плоское/постоянное затенение

Плоское или постоянное затенение проходит по объектам, а затем по треугольникам (или многоугольникам). Цвет пикселя вычисляется один раз, а затем устанавливается для всех пикселей внутри треугольников, которые ближе, чем существующее значение z-буфера.

Гуро Шейдинг

Затенение по Гуро идентично плоскому затенению, за исключением того факта, что отражение вычисляется во всех вершинах треугольника, а затем интерполируется для кадрового буфера.

Фонг Шейдинг

Теоретически затенение Фонга существенно не отличается от затенения Флэта и Гуро. Разница в том, что затенение Фонга использует модель отражения Фонга для каждой точки с интерполированной нормалью.

Визуализации

Это все, ребята! Пожалуйста, оставьте комментарий или поставьте лайк, если вам понравился этот материал. 😉