Метод обратной трассировки лучей
Объекты могут свет:
1‑излучать (интенсивность, направленность, спектр);
2‑отражать-поглощать (зеркальное и диффузное);
3‑пропускать (ослабление, преломление: n1•sinα=n2•sinβ).
Практические ограничение метода обратной трассировки лучей:
1. выделим все источники света сцены как точечные
2. отражение как сумма диффузной и зеркальной компонент
3. зеркало идеально – один луч отражения и световые блики от источников
4. диффузный цвет от всех источников (м.б. тень)
5. прозрачность без/с преломления, только ослабление
6. фоновая засветка для учета рассеивания
7. порог освещенности или итераций
I = Ka•Ia•C + Kd•Id•C + Ks•Is + Kr•Ir + Kt•It
a – фоновая подсветка Ia=const
d – диффузное рассеивание Id=∑Ii•cosθi
s – зеркальность Is=∑Ii•cospάi
r – отражение Ir=Ii•e-βd
t – преломление It=Ii•e-βd
С – исходный цвет поверхности
Интенсивность ЛУЧ(номер итерации ind, тип луча, направление луча dir,
номер объекта no)
{ находим точку пересечение луча с ближайшим объектом.
Если точка найдена, то {
No = номер пересекаемого объекта.
Вычисляем нормаль к поверхности объекта – векторное произведение ребер.
Если (Kd>0) то { Id=∑Ii•cosθi }
Если (Ks>0) то { определяем отраженный луч, Is=∑Ii•cospάi }
Если (Kr>0) то { определяем отраженный луч dirR,
Ir=ЛУЧ (ind+1, отраженный ,dirR, no) }
Если (Kt>0) то { определяем преломленный луч dirT,
It=ЛУЧ (ind+1, преломленный ,dirT, no) }
return (Ka•Ia•C + Kd•Id•C + Ks•Is + Kr•Ir + Kt•It)
} иначе { return по умолчанию}
}
при трассировке первичного луча необходимо получить изображение источников света, не заслоняемых другими объектами; преломленный луч не зеркалировать из объекта преломления. Начало
I = ЛУЧ (1, первичный, направление проецирования, 0)
Задание первичного луча полностью определяет проекцию изображаемой сцены
(можно центральную, можно сферическую, цилиндрическую и т.п. проекцию)
Попадание в оболочки => иерархия оболочек (объект-детали-грани) прямоугольных, сферических, цилиндрических
Проще всех сферическая оболочка в локальной системе координат:
Xc2+Yc2<=РадиусОболочка2
Переход в локальную систему координат при каждом столкновении луча с гранью облегчает дальнейшую трассировку и вычисление нормалей к граням.
(Текущую матрицу преобразований надо умножить на сдвига и поворота)
Xi+1=Xi•cosα-Yi•sinα α-поворот вокруг Z β-поворот вокруг X
Yi+1=Xi•sinα•cosβ+Yi•cosα•cosβ-(Zi-zp)•sinβ
Zi+1=Xi•sinα•sinβ+Yi•cosα•sinβ+(Zi-zp)•cosβ
Cosα=y/r r=√(x2+y2)
Sinα=x/r
Cosβ=z/R R=√(x2+y2+z2)
Sinβ=r/R
++++++
- Универсальный метод со многими законами геометрической оптики и простотой разнообразных проекций.
- Реалистичный: тени, зеркальность, прозрачность.
- Преобразования координат линейны: текстурирование просто.
- Возможен антиалиазинг (сглаживание ступенчатости) трассировкой для каждого пикселя нескольких близких лучей.
- Независимость трассировки каждого луча => высокая параллельность рендеринга.
-----------
- Проблемы с диффузным отражением и преломлением.
- Очень много вычислительных операций => самый медленный алгоритм синтеза изображений.
Дата добавления: 2016-04-14; просмотров: 592;