exam41 - MiAneko24/bmstu-cg GitHub Wiki

41. Учет прозрачности в модели освещения. Учет прозрачности в алгоритмах удаления невидимых поверхностей.

Закон Снеллиуса

В основных моделях освещения и алгоритмах удаления невидимых линий и поверхностей рассматриваются только непрозрачные поверхности и объекты. Однако существуют и прозрачные объекты, пропускающие свет, например, такие, как стакан, ваза, окно автомобиля, вода. При переходе из одной среды в другую, например из воздуха в воду, световой луч преломляется; поэтому торчащая из воды палка кажется согнутой. Преломление рассчитывается по закону Снеллиуса, который утверждает, что падающий и преломляющий лучи лежат в одной плоскости, а углы падения и преломления связаны формулой

В простейших реализациях эффекты прозрачности преломления вообще не рассматриваются. Кроме того, не принимается во внимание, как путь, пройденный лучом в среде, влияет на его интенсивность. Самые ранние разработки в этой области принадлежат Ньюэлу. Простое пропускание света можно встроить в любой алгоритм удаления невидимых поверхностей, кроме алгоритма с z-буфером.

Существует два варианта аппроксимации - линейная и нелинейная.

Линейная

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

где I1 - видимая поверхность, I2 - поверхность, расположенная непосредственно за ней, t - коэффициент прозрачности I1. Если поверхность совершенно прозрачна, то t = 0, а если непрозрачна, то t = 1. Если I2 тоже прозрачна, то алгоритм применяется рекуррентно, пока не встретится непрозрачная поверхность или фон. Если многоугольники записываются в буфер кадра в соответствии с приоритетами глубины, как в алгоритме Ньюэла-Санча, тогда I2 будет соответствовать значению, записанному в буфер кадра, а I1 - текущей поверхности.

Нелинейная

Для криволинейных поверхностей, например, таких, как ваза или бутылка, линейной аппроксимации недостаточно, так как вблизи контурных линий прозрачность уменьшается из-за толщины материала. Чтобы точнее изобразить это явление, Кэй предложил несложную нелинейную аппроксимацию на основе z-составляющей нормали к поверхности. В частности, коэффициент прозрачности

где tmin и tmax - минимальная и максимальная прозрачность объекта, nz есть z- составляющая единичной нормали к поверхности, р - коэффициент степени прозрачности, t - прозрачность пиксела или точки объекта.

Учет прозрачности в алгоритмах

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

Для алгоритма, использующего z-буфер, последовательность действий такова:

Для каждого многоугольника:

  • если многоугольник прозрачен, то внести его в список прозрачных многоугольников;
  • если многоугольник непрозрачен и z > z-буфер , то записать его в буфер кадра для непрозрачных многоугольников и скорректировать этот буфер.

Для каждого многоугольника из списка прозрачных многоугольников:

  • если z > z-буфер , то прибавить его коэффициент прозрачности к значению, содержащемуся в буфере весовых коэффициентов прозрачности;
  • прибавить его интенсивность к значению, содержащемуся в буфере интенсивности прозрачности, в соответствии с правилом

где Ibn - новое значение интенсивности, Ib0 - старое значение интенсивности, записанное в буфере интенсивности прозрачности, Iс - интенсивность текущего многоугольника, tb0 - старый коэффициент прозрачности из буфера весовых коэффициентов прозрачности, tс - коэффициент прозрачности текущего многоугольника. Таким образом, получается взвешенная сумма интенсивностей всех прозрачных многоугольников, находящихся перед ближайшим непрозрачным многоугольником.

Объединим буферы интенсивности для прозрачных и непрозрачных многоугольников в соответствии с правилом

где Ifb - окончательная интенсивность в буфере кадра для непрозрачных многоугольников, a Ifb0 - старое значение интенсивности в этом буфере.

Эту процедуру удобнее использовать в сочетании с алгоритмом построчного сканирования с z-буфером, поскольку для полного алгоритма с z- буфером требуется очень много памяти.

Следующий вопрос: 42. Учет фактуры при создании реалистических изображений.

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

⚠️ **GitHub.com Fallback** ⚠️