-
Notifications
You must be signed in to change notification settings - Fork 9
42. Учет прозрачности в модели освещения. Учет прозрачности в алгоритмах удаления невидимых поверхностей.
Pandas edited this page May 30, 2017
·
2 revisions
Чтобы включить преломление в модель освещения нужно при построении видимых поверхностей учитывать не только падающий, но и отражённый и пропущенный свет. Эффективнее это делается с помощью глобальной модели освещения в сочетании с алгоритмом трассировки лучей для выделения видимых поверхностей. Обычно рассматриваются только зеркально отражённые и пропущенные лучи, т.к. диффузное отражение от просвечивающих поверхностей порождает бесконечное количество беспорядочно ориентированных лучей.
Формула для расчета интенсиваности для прозрачных тел
I=kaIa+kdId+ksIs+ktIt (a, d, s, t – рассеяный, диффузный, зеркальный и пропущенный свет)
Пропускание
-
Зеркальное (направленное) – свойственно прозрачным телам. Если смотреть на объект сквозь
такое вещество, то за исключением контурных линий криволинейных поверхностей, искажения происходить не будет. Нелинейная аппроксимация коэффициента прозрачности:
t=tmin+(tmax- tmin)(1-(1-|nz|)^p). tmin, tmax – макс и мин прозрачность объекта, nz - z-составляющая единичной нормали к поверхности, p – коэффициент прозрачности, t – прозрачность пиксела - Диффузное (рассеянное) – вещества кажутся полупрозрачными или матовыми Простое пропускание света можно встроить в любой алгоритм удаления невидимых поверхностей, кроме z-буфера. Прозрачные поверхности помечаются и если видимая грань прозрачна, то в буфер кадра заносится линейная комбинация двух ближайших поверхностей I=tI1+(1-t)I2; I1-видимая поверхность, I2 – за нею
Алгоритм с z-буфером
- Для каждого многоугольника
- Если прозрачен – занести в список прозрачных
- Если нет и Z>Zбуф, то записать в буфер кадра для непрозрачных многоугольников и скорректировать Zбуф
- Для каждого многоугольника из списка прозрачных
- Если Z≥Zбуф, то прибавить его p к значению в буфере весовых коэфициентов прозрачности, прибавить его I к значению в буфере интенсивности прозрачности по правилу:
Iвн=Iвоtво+Iсtс (вн – новое, во – старое, с – для многоугольника) - Объединим буферы интенсивности для прозрачных и непрозрачных многоугольников
I=tвоIво+(1-tво)Ifво (Ifво – старое значение интенсивности в этом буфере)