Skip to content

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

Pandas edited this page May 30, 2017 · 2 revisions

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

Формула для расчета интенсиваности для прозрачных тел
I=kaIa+kdId+ksIs+ktIt (a, d, s, t – рассеяный, диффузный, зеркальный и пропущенный свет)

Пропускание

  1. Зеркальное (направленное) – свойственно прозрачным телам. Если смотреть на объект сквозь такое вещество, то за исключением контурных линий криволинейных поверхностей, искажения происходить не будет. Нелинейная аппроксимация коэффициента прозрачности:
    t=tmin+(tmax- tmin)(1-(1-|nz|)^p). tmin, tmax – макс и мин прозрачность объекта, nz - z-составляющая единичной нормали к поверхности, p – коэффициент прозрачности, t – прозрачность пиксела
  2. Диффузное (рассеянное) – вещества кажутся полупрозрачными или матовыми Простое пропускание света можно встроить в любой алгоритм удаления невидимых поверхностей, кроме z-буфера. Прозрачные поверхности помечаются и если видимая грань прозрачна, то в буфер кадра заносится линейная комбинация двух ближайших поверхностей I=tI1+(1-t)I2; I1-видимая поверхность, I2 – за нею

Алгоритм с z-буфером

  1. Для каждого многоугольника
  2. Если прозрачен – занести в список прозрачных
  3. Если нет и Z>Zбуф, то записать в буфер кадра для непрозрачных многоугольников и скорректировать Zбуф
  4. Для каждого многоугольника из списка прозрачных
  5. Если Z≥Zбуф, то прибавить его p к значению в буфере весовых коэфициентов прозрачности, прибавить его I к значению в буфере интенсивности прозрачности по правилу:
    Iвн=Iвоtво+Iсtс (вн – новое, во – старое, с – для многоугольника)
  6. Объединим буферы интенсивности для прозрачных и непрозрачных многоугольников
    I=tвоIво+(1-tво)Ifво (Ifво – старое значение интенсивности в этом буфере)
Clone this wiki locally