Тени


    Рассмотрим генерацию четких или "жестких" теней от точечных источников освещения. Пусть у нас имеется луч (ray), позиция удара о поверхность (hit_pos) и позиция источника освещения (light_pos). Мы хотим выяснить, находится точна hit_pos в тени или нет. Можно траверсить луч от источника освещения к точки удара или наоборот, на корректность результата это не повлияет. Будем испускать лучи из источника освещения в точку удара о поверхность. Если мы найдем любое пересечение, координата t (параметрическое уравнение прямой) которого лежит в пределах от нуля до координаты t точки hit_pos, то точка hit_pos находится в тени.


  RAY ray;

  ray.pos = light_pos;

  ray.dir = hit_pos - light_pos;

  t_max = ray.dir.len() - 1e-4f;

  ray.dir /= t_max;

  T t_hit = TraversaRay(...);

  if (t_hit > 0 && t_hit < t_max)

  {

    // точка в тени

  }


Вот как выглядят резкие тени:

То же самое с антиалиасингом (4 луча на пиксел). Источник света немного в другой позиции.




<< Вернуться назад

Статьи и обзоры

Поиск пересечений

Обратная трассировка лучей

Быстрая трассировка лучей

Индустриальная основа

Фотореалистичная визуализация

GPU ray tracing

Сферические гармоники

Дружественные проекты:

OpenSource RTRT

Siberian renderer

Наши разработки

Hydra renderer

AdaRT

Публикации

Загрузить

Скриншоты и видео

ССЫЛКИ

© Copyright 2007 Владимир Фролов, Александр Фролов

При поддержке Лаборатории компьтерной графики и мультимедия ф-та ВМК МГУ
Создание сайта: Александр Фролов