Мягкие тени используя иерархическую мин-макс карту теней Kirill Dmitriev Yury Uralsky.

Презентация:



Advertisements
Похожие презентации
Применение свертки при увеличении изображений (линейные методы ресамплинга)
Advertisements

Излучательность. Трассировка лучей. Фотонные карты. Андрей Татаринов Глобальные модели освещения.
Компьютерная геометрия и графика. Лекция 8. План занятия: Задача удаления невидимых линий c с использованием Z-буфера Алгоритм Художника.
Применение свертки при увеличении изображений (линейные методы ресамплинга)
Шумоподавление для изображений Лектор:Лукин Алексей Сергеевич.
Лекция 13 Метод трассировки лучей Астана Трассировка лучей через сферическую каплю воды Луч 7 -- луч Декарта [1637]
Обработка растровых изображений В лекции использованы различные материалы лаборатории Компьютерной Графики МГУ.
Компьютерная графика Александр Бобков Семинар 8 Тени. Отложенный рендеринг.
Кодирование графики. Итак… растровыевекторные Все компьютерные графические изображения разделяют на два типа: растровые и векторные. растровой точки пиксели.
Понятие о методах Монте-Карло. Расчет интегралов 2.5. Расчет интегралов методом Монте-Карло.
Кодирование графической информации Пространственная дискретизация.
Кодирование информации Представление чисел в компьютере.
OpenGL Лекция 3. Построение тени Проективные тени Объемные тени Карты теней Мягкие тени.
Реализация алгоритма теневых объемов в DX10 Юрий Степаненко.
Приближенные схемы Задачи теории расписаний. Полиномиальная приближенная схема (PTAS) Семейство приближенных алгоритмов для задачи Π, {A ε } ε называется.
Приближенные схемы Задачи теории расписаний. Полиномиальная приближенная схема (PTAS) Семейство приближенных алгоритмов для задачи Π, {A ε } ε называется.
Коллекции классов Лекция 12. С помощью коллекций вместо создания структур данных программист использует готовые структуры данных, не заботясь об их реализации.
Представление чисел в формате с фиксированной запятой. Изучаемые вопросы: Представление целых положительных чисел в памяти компьютера. Представление целых.
Прямые. Кривые. Поверхности Лекция 12. Алексей Игнатенко.
Модели с неявной и дискретной геометрией Алексей Игнатенко Лекция 6 16 ноября 2006.
Транксрипт:

Мягкие тени используя иерархическую мин-макс карту теней Kirill Dmitriev Yury Uralsky

NVIDIA Confidential Обзор Традиционные алгоритмы мягких теней Мин-макс теневая карта Реализация PCF с большим ядром Реализация адаптивного размытия тени Идеи по улучшению производительности

NVIDIA Confidential Мягкие тени – это важно Важно для реалистичности Четкие тени могут получаться только от точечных источников, которых не существует в реальной жизни Важно для качества Скрывают артефакты возникающие из-за недостаточного разрешения карты теней

NVIDIA Confidential Обычные мягкие тени? PCF (Percentage Closer Filtering) Посчитать тень в нескольких точках вокруг и усреднить Размер фильтра (K) управляетмягкостью K

NVIDIA Confidential Percentage closer filtering (PCF) Важно усреднять не глубину а затенение: Железо NVIDIA реализует PCF для маленьких размеров фильтра (K) K

NVIDIA Confidential PCF с большим ядром PCF с большим ядром K требует много сэмплов Можно фильтровать по подмножеству текселей K: приводит к бандингу K

NVIDIA Confidential Рандомизированный PCF Чтобы избежать бандинга, можно в каждом фрагменте использовать свой набор сэмплов Заменяет бандинг на шум K

NVIDIA Confidential Дисперсные карты теней (variance shadow maps) Сохранять глубину и квадрат глубины Тогда можно вычислить дисперсию и используя неравенство Чебышева (из теории вероятностей) посчитать затенение Позволяет использовать мип-маппинг Недостаток: предположения теории вероятностей

NVIDIA Confidential Недостатки предыдущих алгоритмов Percentage closer filtering Нужно много сэмплов для качественной тени Дисперсные теневые карты Предположения теории вероятностей Общий недостаток Ядро фильтрации фиксировано

NVIDIA Confidential Новая идея Представим себе теневую карту как набор квадратиков в 3D пространстве В шейдере считаем затенение от каждого квадратика – получаем тень

NVIDIA Confidential Иерархическая мин-макс теневая карта Линейный проход по всем квадратикам (миллион) – слишком медленно Решение: иерархическое представление Можно отсекать целые кластеры текселей, заведомо не вносящих вклад в затенение фрагмента

NVIDIA Confidential Мин-макс теневая карта Мин канал 4 соседних текселя Макс канал Вычислить две мипмап пирамиды Используя мин фильтр Используя макс фильтр Можно сохранить в двухканальной текстуре

NVIDIA Confidential PCF с большим ядром используя минмакс теневую карту Каково затенение? 1.0 выйти 0.0 К друим текселям на том же уровне или выше Спуститься ниже иначе

NVIDIA Confidential Расчет затенения K SM texel Затенение одним теневым текселем равно пересечению между этим текселем и ядром фильтрации

NVIDIA Confidential Расчет затенения K Затенение можно считать полным если пересечение полное И макс канал меньше глубины фрагмента SM Texel

NVIDIA Confidential По сути – проход по дереву 0 Мип уровень 0 Мип уровень 1 Мип уровень 2

NVIDIA Confidential По сути – проход по дереву 0 Мип уровень 0 Мип уровень 1 Мип уровень 2 0.5

NVIDIA Confidential По сути – проход по дереву 0 Мип уровень 0 Мип уровень 1 Мип уровень

NVIDIA Confidential По сути – проход по дереву 0 Мип уровень 0 Мип уровень 1 Мип уровень

NVIDIA Confidential По сути – проход по дереву 0 Мип уровень 0 Мип уровень 1 Мип уровень

NVIDIA Confidential По сути – проход по дереву 0 Мип уровень 0 Мип уровень 1 Мип уровень

NVIDIA Confidential По сути – проход по дереву 0 Мип уровень 0 Мип уровень 1 Мип уровень

NVIDIA Confidential По сути – проход по дереву Мип уровень 0 Мип уровень 1 Мип уровень 2

NVIDIA Confidential Демо: мягкие тени используя иерархическую минмакс теневую карту

NVIDIA Confidential Как сделать размытие адаптивным? Размытие должно увеличиваться Размытие должно зависеть от взаимного расположения источника света, затеняющего и затененного объектов

NVIDIA Confidential Физически аккуратные тени Будем вычислять затенение от каждого текселя с учетом площади источника света

NVIDIA Confidential Затенение – перспективная проекция текселя на источник фрагмент тексель Источник света Проекция на источник

NVIDIA Confidential Физически аккуратное затенение от всех текселей Суммирование идет по всем текселям 0-го мипмапа. Теневые тексели - AABBs, Источник света - тоже AABB: вычисления очень просты EvalS(depth) depth

NVIDIA Confidential Большая часть теневых текселей не важны Начинаем с больших текселей; if (EvalS(DepthMin) == 0) { откидываем поддерево; } Откидывает (2^N)^2 текселей где N – текущий уровень мипмапа if (EvalS(DepthMin) == 1 && DepthMax < DepthFrag) { выходим из шейдера; }

NVIDIA Confidential Протекание света Так как теневая карта создается для точечного источника света, а используется для площадного, возможны протекания света Гладкая поверхность

NVIDIA Confidential Пример протекания света

NVIDIA Confidential Как уменьшить протекания света Расширить на определенную величину теневые тексели Тексели с большей глубиной расширяются так чтобы проeкции их границ точно совпали с проeкциями границ соседей

NVIDIA Confidential Пример уменьшения протеканий света С протеканиями

NVIDIA Confidential Демо физически приближенных теней

NVIDIA Confidential Эффективная реализация стека Нам нужно класть/вынимать: индекс мип уровня (4 бита) + индекс пикселя (2 бита) Динамическая индексация массива в шейдере – накладно. Если элемент стека мал – лучшее решение...

NVIDIA Confidential Операция push() Младшее слово (32 бита) Старшее слово (32 бита) Нам нужно класть/вынимать: индекс мип уровня (4 бита) + индекс пикселя (2 бита)

NVIDIA Confidential Операция push() Младшее слово (32 бита) Старшее слово (32 бита) Нам нужно класть/вынимать: индекс мип уровня (4 бита) + индекс пикселя (2 бита)

NVIDIA Confidential Идеи как ускорить Можно останавливаться не доходя до низа дерева Если затененный объект находится далеко Вычислять точные значения затенения на грубой сетке Остальные пиксели можно интерполировать/вычислять базируясь на значениях в узлах сетки… Нужна хорошая эвристика!

NVIDIA Confidential Эвристика интерполяции Нельзя интерполировать если сильно неплоская поверхность Нельзя интерполировать если затенение узлов слишком сильно меняется Затенение может сильно менятся если есть объекты, расположенные слишком близко к точке затенения

NVIDIA Confidential Для каждого узла сетки сохранять расстояние до ближайшего затенителя (всего один float на узел); Можно интерполировать только если фрагмент находится внутки бокса, образованного четырьмя ближайшими узлами сетки И расстояние до ближайшего затенителя больше чем размер бокса. Эвристика интерполяции

NVIDIA Confidential Ссылки [1] See NVIDIA SDK10 SoftShadows demo for details [2] Gael Guennebaud, Loic Barthe and Mathias Paulin. Real-time Soft Shadow Mapping by Backprojection. Eurographics Symposium on Rendering 2006, Nicosia, Cyprus.

NVIDIA Confidential Вопросы?