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. Построение теней при создании реалистических изображений. Учет теней в алгоритмах удаления невидимых поверхностей.