Метод обратной трассировки лучей

 

Объекты могут свет:

1‑излучать (интенсивность, направленность, спектр);

2‑отражать-поглощать (зеркальное и диффузное);

3‑пропускать (ослабление, преломление: n1•sinα=n2•sinβ).

 

Практические ограничение метода обратной трассировки лучей:

1. выделим все источники света сцены как точечные

2. отражение как сумма диффузной и зеркальной компонент

3. зеркало идеально – один луч отражения и световые блики от источников

4. диффузный цвет от всех источников (м.б. тень)

5. прозрачность без/с преломления, только ослабление

6. фоновая засветка для учета рассеивания

7. порог освещенности или итераций

 

I = KaIaC + KdIdC + KsIs + KrIr + KtIt

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 (KaIaC + KdIdC + KsIs + KrIr + KtIt)

} иначе { 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

 

++++++

  1. Универсальный метод со многими законами геометрической оптики и простотой разнообразных проекций.
  2. Реалистичный: тени, зеркальность, прозрачность.
  3. Преобразования координат линейны: текстурирование просто.
  4. Возможен антиалиазинг (сглаживание ступенчатости) трассировкой для каждого пикселя нескольких близких лучей.
  5. Независимость трассировки каждого луча => высокая параллельность рендеринга.

-----------

  1. Проблемы с диффузным отражением и преломлением.
  2. Очень много вычислительных операций => самый медленный алгоритм синтеза изображений.

 

 








Дата добавления: 2016-04-14; просмотров: 538;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.