каскады теней что такое
Освещение, тени и фон¶
Типы затенения¶
Результат расчета освещения (затенения) зависит от направления векторов нормалей. Поддерживаются стандартные типы затенения, использующиеся в Blender, Shading: Flat (используются нормали граней) и Shading: Smooth (используются интерполированные нормали вершин), а также их комбинации.
Результат применения различных типов затенения и использования редактора нормалей:
Smooth Shading + фаска
Smooth Shading + фаска + редактирование нормалей
Освещение от источников света¶
На сцене может быть несколько (но не менее одного) источников света разного типа.
Типы источников света¶
Поддерживаются источники света следующих типов:
Точечный. Свет распространяется из одной точки равномерно во все стороны, с постепенным затуханием.
“Солнце”. Свет распространяется из бесконечной плоскости прямолинейно в одном направлении, без затухания.
Прожектор. Свет распространяется из одной точки, с ограничением угла распространения, с постепенным затуханием.
Полусфера. Свет распространяется из бесконечной полусферы, без затухания.
Настройка источников света¶
Производится во вкладке Object Data при выборе объекта-лампы.
Цветовая характеристика света. Значение по умолчанию (1.0, 1.0, 1.0) (белый).
Интенсивность излучения. Значение по умолчанию 1.0.
Создание отблеска на объектах. По умолчанию включено.
Применение рассеянного освещения к объектам. По умолчанию включено.
Источник света используется для расчета изменения времени суток. Применяется для источников света типа “Солнце”. По умолчанию отключено.
Источник света используется для расчета падающих теней. Применяется в случае наличия нескольких источников света. По умолчанию отключено.
Shadow > Clip Start
Освещение от окружающей среды¶
Движок поддерживает 3 метода симуляции рассеянного освещения от окружающих объектов.
“Плоское” освещение белым цветом.
Полусферическая модель освещения, в которой задается цвет горизонта и цвет зенита, в результате чего объекты заливаются градиентом между этими цветами в зависимости от направления нормалей.
Обратите внимание, что освещение от окружающей среды рассчитывается по упрощённой модели, в которой объекты не затеняют друг друга.
Активация¶
Настройка¶
Интенсивность освещения от окружающей среды. Значение по умолчанию 1.0.
World > Environment Lighting > Environment Color
World > Horizon Color и World > Zenith Color
World > Use Nodes (Cycles)
Если эта опция включена, ноды Cycles могут использоваться для настройки окружающей среды. По умолчанию отключено.
World > Reflect World
Если эта опция включена, окружающая среда будет отображаться при рендеринге отражений (т.е., будет отражаться в зеркальных поверхностях). По умолчанию отключено.
World > Render Only Reflection
Если эта опция включена, окружающая среда будет визуализироваться для отражений, но не для самой сцены. По умолчанию отключено.
Использование карты окружения¶
Для того, чтобы использовать карту окружения в целях реализации освещения от окружающей среды, необходимо:
Для карты окружения на панели Export Options для значения Sky Texture Usage выбрать ENVIRONMENT_LIGHTING или BOTH (опция BOTH активирует также использование этой текстуры в качестве текстуры неба ).
Платформой Blend4Web реализуются такие техники, как каскадные карты теней (CSM) и смягченные тени (PCF).
Генерировать тени могут не более четырёх (или трёх, если включен SSAO) источников света одновременно. Если источников света больше (и у всех включён параметр Shadow), будут видны тени только от четырёх из них.
Активация¶
Настройка¶
В случае наличия нескольких источников света рекомендуется указать, какой именно источник света будет использоваться для расчета падающих теней, включив опцию Shadow > Shadow во вкладке Object Data при выборе объекта-лампы.
Во вкладке Render на панели Shadows находятся дополнительные настройки:
Включает размытие карт теней. По умолчанию включено.
Разрешение используемой карты теней. Значение по умолчанию: 2048 x 2048px.
Self-Shadow Polygon Offset
Коэффициент смещения полигона в зависимости от ориентации к источнику света. Значение по умолчанию: 1.
Self-Shadow Normal Offset
Коэффициент смещения полигона по нормали. Значение по умолчанию: 0.010.
Включение каскадной модели теней; открывает доступ к расширенным настройкам. Отключено по умолчанию. Не работает, если опция Shadow включена более чем для одного источника света. Для источников света типа Point и Spot поддерживается только один каскад теней.
Эта опция позволяет выбрать один из следующих вариантов наложения теней:
Стандартная модель, использующая одну оптимизированную карту теней, охватывающую всю сцену ( Enable CSM отключена).
Каскады теней ( Enable CSM включена).
Коэффициент размытия теней, позволяющий настроить cмягченные тени. Значение по умолчанию: 3. Коэффициент 0 даст жесткие тени.
Смягченные тени могут повысить качество и реалистичность изображения. Они скрывают неизбежную при использовании основанных на изображениях техник зубчатость краев, особенно сильно проявляющуюся для карт теней низкого разрешения. Использование смягченных теней часто позволяет снизить разрешение без существенной потери качества.
Стандартная модель¶
Этот вариант больше подходит для маленьких сцен, состоящих из небольшого числа объектов. Благодаря оптимизации на таких сценах можно добиться более высокого качества теней по сравнению с каскадной моделью. Данный вариант проще и быстрее настроить, а использование всего лишь одной карты теней положительно сказывается на производительности.
Каскады теней¶
Для обеспечения приемлемого качества теней и одновременно покрытия значительных пространств необходимо использовать несколько стадий генерации теней (каскадов). При этом вблизи наблюдателя располагается каскад с наилучшим качеством, вдали от наблюдателя — с наихудшим. Этот вариант больше подходит для сцен среднего и большого размера, например, игровых уровней.
При включении предоставляет расширенные настройки:
Количество каскадов теней. Поддерживается от 1 до 4 каскадов. Значение по умолчанию: 1.
CSM First Cascade Border
Размер первого каскада. Значение по умолчанию: 10.0.
CSM Last Cascade Border
Размер последнего каскада. Значение по умолчанию: 100.0.
Размеры промежуточных каскадов интерполируются на основе последних двух параметров.
При настройке следует помнить, что, увеличивая размер каскада, мы получаем на нем менее качественные тени. С другой стороны, уменьшение параметра CSM First Cascade Border приблизит к камере и сделает более заметными последующие менее детальные каскады. Уменьшение параметра CSM Last Cascade Border приведет к исчезновению теней на более близком расстоянии от камеры. Однако, при использовании мягких теней качество в целом улучшится благодаря размытию на границах.
Коэффициент размытия на первом каскаде. Значение по умолчанию: 3. Коэффициент 0 даст жесткие тени.
CSM Last Cascade Blur Radius
Коэффициент размытия на последнем каскаде. Значение по умолчанию: 1.5. Коэффициент 0 даст жесткие тени.
Радиус размытия каждого промежуточного каскада интерполируется на основе этих параметров.
Плавное исчезновение последнего каскада. По умолчанию включено.
Blend Between Cascades
Сглаживание границ между каскадами. По умолчанию включено.
Цвет фона¶
Цвет фона можно задать несколькими способами:
Поместить сцену внутрь модели (например, куба или сферы) с направленными внутрь нормалями, с материалом и опциональной текстурой.
Разместить перед камерой поверхность с материалом и опциональной текстурой, присоединить ее к камере связью родитель-потомок. При необходимости настроить расстояние до поверхности, переднюю и заднюю плоскости отсечения камеры.
Каскады теней что такое
Всего пару лет назад дизайнеры еще могли жить спокойно. Что бы оформить сайт, нужно было всего лишь подобрать цвета, нарисовать текстурку и самое главное просто откинуть тень. Обычную тень с blurом и прозрачностью. Но вскоре появился 5-й фотошоп с эффектами у слоев, и теней стало слишком много (причем одинаковых). Нужно было придумать что-то совершенно новое
Часть 1. Кривые тени
История
Первое подобие кривой тени я увидел в дизайне сайта Яndexа. Потом появился дизайн сайта издательства «Питер», но его не приняли. Да и тени там были не совсем кривые. Зато теперь их можно наблюдать где угодно. Лучшие примеры kempinski, mts, planetproject.
Для чего они вообще нужны?
По-моему, самое лучшее использование кривых теней это стилизация под кривость и ассиметрию. Например, на сайте kempinski не использовано ни одного правильного прямоугольника.
Кроме того, если нет возможности создать большую картинку с тенью (тень это, все-таки, градиент, а он требует большого количества цветов), то и тут можно использовать кривую тень, так как она может просто исчезнуть через несколько десятков пикселов. Получается, что вам совсем не обязательно проводить тени по всей странице. Достаточно поместить ее только в нужном месте, а дальше просто убрать.
Кстати, с появлением кривых теней большое распространение получили и внутренние тени.
Создание
Для создания кривой тени нужно 2 слоя: первый верхний, с изображением; второй слой, повторяющий форму тени, от которого она и откидывается. Форма меняется с помощью transform/scew, а дальше все просто. В принципе, кривой тенью является любая искаженная тень, т е не повторяющая форму объекта.
Правда сначала я думал, что кривые тени создаются просто маской. От объекта откидывается тень, накладывается маска, и, казалось бы, тень становиться кривой. Но на самом деле это совсем не так. Особенность кривой тени в том, что чем она ниже, тем она плотнее и, соответственно, темнее. А с простым использованием маски все получается совсем наоборот. С той стороны, где тень ниже там она светлее. Поэтому после того как тень стала кривой, по ней надо еще и пропустить градиент (можно просто градиент по маске). Только тогда тень получится по-настоящему кривой и реальной.
Часть 2. Каскадные тени
Другая проблема теней (кроме однообразности) это то, что на мониторе они не всегда смотрятся тенями.
Обычно тени отбрасывают от какой-либо группы объектов, расположенных рядом друг с другом и никак не соприкасающихся. На первый взгляд все выглядит вполне нормально, и, если все тени отброшены правильно, то вроде бы и говорить больше не о чем. Но, как ни странно, в 90% случаев такие тени никакой реальности не предают: смотря на них, человек не ощущает никакого пространства между нижним и верхним слоем.
Одним из лучших способов создать пространство на странице увеличить количество слоев. При этом каждый новый слой должен лежать на предыдущем. Иначе получится просто неправильное использование теней объекты будут «летать» в воздухе на разном расстоянии от фона. Чтобы этого не произошло нужно размещать каждый новый объект на предыдущем и делать его меншим по размеру.
Но особенную реальность таким «башенкам» придают каскадные тени. Если какой-либо слой не умещается на предыдущем, то на определенном участке тень опускается ниже. При этом тень может проходить по нескольким слоям. Надо только правильно подобрать прозрачность и размытость теней
Кривые тени уже стали стандартом. Что будет дальше?
Владимир Голованов
Каскадные карты теней
Каскадные теневые карты (Ксмс) — это лучший способ противостоять одной из самых распространенных ошибок с тенью: «псевдонимы перспективы». Эта Техническая статья, в которой предполагается, что читатель знаком с теневым отображением, рассматривается раздел Ксмс. В частности, код:
Код, используемый в этой статье, можно найти в разделе CascadedShadowMaps11 and VarianceShadows11 Samples SDK (пакет средств разработки программного обеспечения DirectX). эта статья будет наиболее полезной после реализации методик, описанных в технической статье, и реализовать распространенные методы улучшения глубины тени Карты.
каскадные Карты тени и псевдонимы перспективы
Псевдоним перспективы в теневой карте — одна из самых сложных проблем, которую следует преодолеть. в технической статье описываются распространенные методики улучшения Карты глубины тени, а также рассматриваются некоторые подходы к устранению проблемы. На практике Ксмс, как правило, является лучшим решением и обычно используются в современных играх.
Базовое понятие Ксмс легко понять. Для разных областей камеры фрустум требуются теневые карты с разными разрешениями. Для объектов, ближайших к глазу, требуется более высокое разрешение, чем более отдаленные объекты. На самом деле, когда глаз очень близко к геометрической области, Пиксели, близкие к этому глазу, могут потребовать настолько большого разрешения, что даже на теневой карте 4096 × 4096 недостаточно.
Основная идея Ксмс состоит в том, чтобы секционировать фрустум в несколько Фруста. Для каждого субфрустум отображается теневая схема; построитель текстуры затем выбирается из схемы, которая наиболее точно соответствует требуемому разрешению (рис. 2).
Рис. 1. Покрытие теневой схемы
На рис. 1 качество отображается (слева направо) от самого высокого до самого низкого. Ряд сеток, представляющих теневые карты с представлением фрустум (инвертированный конус в красном фоне), показывает, как покрытие на уровне пикселей влияет на различные теневые карты разрешения. Тени имеют наивысшее качество (белые пиксели) при наличии пикселов сопоставления соотношения 1:1 в пространстве, пикселей текстуры на теневой карте. Псевдоним перспективы имеет форму больших, блочных текстурных карт (левое изображение), если слишком много пикселей сопоставлены с одним и тем же теневым шаг текселя. Если теневая схема слишком велика, она находится в разделе выборка. В этом случае пикселей текстуры пропускаются, отображаются артефакты Шиммеринг, а производительность затронется.
Рис. 2. Качество тени CSM
На рис. 2 показаны отрезки от раздела наивысшего качества на каждой теневой карте на рис. 1. Теневая схема с наиболее близко расположенными пикселами (в вершине) является ближайшей глазой. Технически это карты одного и того же размера с белым и серым цветом, используемыми для проиллюстрировать успеха каскадной теневой карты. Белый вариант идеален, так как он показывает хорошее покрытие — коэффициент 1:1 для пикселов глаза и пикселей текстуры теневой схемы.
Ксмс для каждого кадра необходимо выполнить следующие действия.
Разбейте фрустум на субфруста.
Вычислите ортогональную проекцию для каждого субфрустум.
Выводите теневую карту для каждого субфрустум.
Привяжите теневые карты и визуализацию.
Шейдер вершин выполняет следующие действия:
Шейдер пикселей выполняет следующие действия:
Секционирование Фрустум
Секционирование фрустум — это процесс создания субфруста. Одним из способов разделения фрустум является вычисление интервалов от нуля до 100 процентов в направлении по оси Z. Затем каждый интервал представляет близкую плоскость и дальнее плоскость в процентах от оси Z.
Рис. 3. Произвольное представление секционирования фрустумс
На практике повторное вычисление разбиений фрустум на кадр приводит к шиммерию теней. Обычно принято использовать статический набор каскадных интервалов для каждого сценария. В этом сценарии интервал по оси Z используется для описания субфрустум, возникающего при секционировании фрустум. Определение правильных интервалов для заданной сцены зависит от нескольких факторов.
Ориентация геометрии сцены
По отношению к геометрии сцены ориентация на камеру влияет на выбор каскадного интервала. Например, Камера, почти близкая к заземлению, например, Камера в футболе, имеет другой статический набор интервалов Cascade, чем камера в перевозки.
На рис. 4 показаны некоторые различные камеры и их соответствующие секции. Если Z-диапазон сцены очень большой, требуется больше разделенных плоскостей. Например, когда глаз почти находится рядом с плоскостью земли, но удаленные объекты по-прежнему видны, может потребоваться несколько каскадных переходов. Деление фрустум таким образом, чтобы более разбиваются рядом с глазом (где изменение псевдонимов перспективы меняется быстрее) также является ценным. Если большая часть геометрического объекта клумпед в небольшой раздел (например, на представление «затраты на накладные расходы» или симулятор рейсов) представления фрустум, необходимо меньше каскадных элементов.
Рис. 4. Для различных конфигураций требуются разные фрустум разбиения
Слева Если геометрический объект имеет большой динамический диапазон в Z, требуется много каскадных. Center Если геометрический объект имеет низкий динамический диапазон в Z, существует небольшое преимущество нескольких фрустумс. Справа Если динамический диапазон является средним, необходимы только три секции.
Ориентация освещения и камеры
Каждая матрица проекции каскадом тесно связана с соответствующей субфрустум. В конфигурациях, в которых Камера и лампочка представления являются ортогональными, каскадные расположения могут быть тесно связаны с небольшим перекрытием. Перекрытие увеличивается по мере того, как лампочка и вид камеры переходят в параллельное выравнивание (рис. 5). Если лампочка и вид камеры почти параллельны, она называется «дуелинг Фруста» и является очень сложной ситуацией для большинства алгоритмов теневого копирования. Нередко можно ограничить освещение и камеру, чтобы этот сценарий не наблюдались. Однако в этом сценарии Ксмс работают гораздо лучше, чем многие другие алгоритмы.
Рис. 5. Каскадное перекрытие увеличивается, так как направление освещения становится параллельным с направлением камеры
Многие реализации CSM используют Фруста фиксированного размера. Шейдер пикселей может использовать Z-глубину для индексации массива каскадных значений, когда фрустум разбивается в интервалах фиксированного размера.
Вычисление привязанного к View-Frustumу
После выбора интервалов фрустум субфруста создаются с помощью одного из двух: по размеру сцены и по размеру каскада.
Вписать в сцену
Все Фруста можно создать с одной и той же ближней плоскостью. Это приводит к перекрытию каскадных переходов. Пример CascadedShadowMaps11 вызывает этот метод по размеру сцены.
Вписать в каскадную
Кроме того, Фруста можно создать с фактическим интервалом секций, который используется в качестве ближайших и дальнех плоскостей. Это приводит к более тесному подаче, но вырождению для использования сцены в случае дуелинг Фруста. Примеры CascadedShadowMaps11 вызывают этот метод для размещения каскадом.
Эти два метода показаны на рис. 6. Подгонка к каскадным расходам с меньшим разрешением. Проблема по размеру каскада заключается в том, что ортогональная проекция растет и сжимается в зависимости от ориентации представления фрустум. Методика «вписать в сцену» размещает ортогональную проекцию на максимальный размер представления фрустум удаление артефактов, отображаемых при перемещении представления камерой. распространенные методы улучшения глубины тени Карты адреса артефактов, которые появляются, когда источник перемещается в разделе «перемещение освещения в шаг текселя с увеличением размера».
Рис. 6. По размеру сцены и по размеру каскадом
Визуализация теневой схемы
Образец CascadedShadowMaps11 визуализирует теневые карты в один большой буфер. Это обусловлено тем, что PCF на массивах текстур — это функция Direct3D 10,1. Для каждого каскадного представления создается окно просмотра, охватывающее раздел буфера глубины, соответствующий этому каскаду. Привязка шейдера пикселей NULL выполнена, так как требуется только глубина. Наконец, правильная область просмотра и матрица Shadow задаются для каждого каскада, так как карты глубины подготавливаются к просмотру по одной за раз в основном буфере теневого копирования.
Отрисовка сцены
Буфер, содержащий тени, теперь привязан к шейдеру пикселей. Существует два метода выбора каскада, реализованного в образце CascadedShadowMaps11. Эти два метода объясняются с помощью кода шейдера.
Interval-Based каскадный выбор
Рис. 7. Каскадное выделение на основе интервалов
В выборе на основе интервалов (рис. 7) Вершинный шейдер вычислит расположение в мировом пространстве вершины.
Построитель текстуры получает глубину интерполяции.
При каскадном выборе на основе интервалов используется сравнение вектора и точки для определения правильного какаде. Флаг CASCADE _ Count _ указывает количество каскадных значений. _Фкаскадефрустумсэйеспацедепсс данных m _ ограничивает разделы View фрустум. После сравнения Фкомпарисон содержит значение 1, где текущий пиксель больше барьера, и значение 0, если текущий Каскад является меньшим. Элемент «точка» суммирует эти значения в индексе массива.
После выбора Cascade Координата текстуры должна быть преобразована в правильную каскадную.
Эта Координата текстуры затем используется для выборки текстуры с помощью координаты X и координаты Y. Координата Z используется для окончательного сравнения глубины.
Map-Based каскадный выбор
Выбор на основе карт (рис. 8) проверяет четыре стороны каскадных объектов, чтобы найти наиболее тесное соответствие, охватывающее конкретный пиксель. Вместо вычисления расположения в мировом пространстве шейдер вершин вычисляет расположение пространства в области просмотра для каждого каскада. Шейдер пикселей выполняет перебор каскадов, чтобы масштабировать и сдвинуть координаты текстуры таким образом, чтобы они проиндексированы текущий Каскад. Затем Координата текстуры проверяется на соответствие текстурным границам. Если значения X и Y координаты текстуры находятся внутри каскадной, они используются для выборки текстуры. Координата Z используется для окончательного сравнения глубины.
Рис. 8. Каскадное выделение на основе карт
Выбор Interval-Based и выбор Map-Based
Выбор на основе интервалов выполняется немного быстрее, чем выбор на основе карт, поскольку каскадное выделение можно выполнить напрямую. Выбор на основе карт должен пересекать координату текстуры с границами Cascade.
Выбор на основе карты более эффективно использует Каскад, если теневые карты не выровнены идеально (см. рис. 8).
Переход между каскадными таблицами
ВСМС (см. Далее в этой статье) и методы фильтрации, такие как PCF, можно использовать с Ксмс с низким разрешением для создания мягких теней. К сожалению, это приводит к отображению стыка (рис. 9) между каскадными слоями, так как разрешение не совпадает. Решение состоит в том, чтобы создать полосу между теневыми картами, где выполняется теневая проверка обоих каскадных расположений. Затем шейдер линейно выполняет интерполяцию между двумя значениями на основе расположения пикселя в полосе смешения. Примеры CascadedShadowMaps11 и VarianceShadows11 предоставляют ползунок графического пользовательского интерфейса, который можно использовать для увеличения и уменьшения этого диапазона размытия. Шейдер выполняет динамическую ветвь, чтобы подавляющее большинство пикселей было считано только из текущего каскада.
Рис. 9. Каскадные стыки
Слева Видимый стык можно увидеть, где каскады перекрываются. Справа При переходе между каскадными таблицами не происходит стыка.
фильтрация теневых Карты
Фильтрация обычных теневых карт не приводит к созданию мягких размытий теней. Фильтрация оборудования разменяет значения глубины, а затем сравнивает эти размытые значения с шаг текселя пространством. Жесткий элемент, полученный в результате теста пройден/Fail, все еще существует. Размытие теневые карты служат только для того, чтобы ошибочно переместить жесткое ребро. PCF включает фильтрацию на теневых картах. Основная идея PCF заключается в том, чтобы вычислить процентную долю пикселя в тени на основе количества подвыборок, прошедших тест глубины по общему количеству подвыборок.
Direct3D 10 и Direct3D 11 могут выполнять PCF. Входные данные для образца PCF состоят из координаты текстуры и значения глубины сравнения. Для простоты PCF объясняется с помощью фильтра с четырьмя касаниями. Образец текстуры считывает текстуру четыре раза, аналогично стандартному фильтру. Однако возвращаемый результат представляет собой процент пикселей, которые прошли тест глубины. На рис. 10 показано, как в теневой копии пикселя, прошедшего одну из четырех тестов глубины, является 25%. Возвращаемое значение представляет собой линейную интерполяцию, основанную на субтексел координатах считывания текстур для создания плавного градиента. Без этой линейной интерполяции PCF с четырьмя tapи смогут возвращать только пять значений: <0,0, 0,25, 0,5, 0,75, 1,0>.
Рис. 10. Отфильтрованное изображение PCF с покрыто 25% от выбранного пикселя
Также можно выполнить PCF без поддержки оборудования или расширить PCF до более крупных ядер. Некоторые приемы даже выборке с взвешенным ядром. Для этого создайте ядро (например, значение по Гауссу) для сетки N × N. Весовые коэффициенты должны быть не более 1. Затем текстура выдает значение N2 раз. Каждый пример масштабируется по соответствующим весовым коэффициентам в ядре. Этот подход используется в образце CascadedShadowMaps11.
Смещение глубины
Сдвиг глубины еще более важен при использовании крупных ядер PCF. Это допустимо только для сравнения глубины свободного пространства в пикселях относительно пикселя, к которому он соответствует, на карте глубины. Соседи шаг текселя карт глубины ссылаются на другую точку. Эта глубина, скорее всего, будет аналогичной, но она может сильно отличаться в зависимости от сцены. На рис. 11 показаны происходящие артефакты. Одна глубина сравнивается с тремя соседними пикселей текстуры в теневой карте. Одна из тестов глубины ошибочно завершается ошибкой, так как ее глубина не соотносится с вычисленной глубиной освещения текущего геометрического пространства. Рекомендуемое решение этой проблемы — использовать более крупное смещение. Однако слишком большое значение смещения может привести к сдвигу Питер. Вычисление тесного приближения плоскости и дальней плоскости позволяет снизить последствия использования смещения.
Рис. 11. Ошибочное затенение
Ошибочное затенение приводит к сравнению пикселов в глубине свободного пространства с пикселей текстуры на теневой карте, которая не взаимосвязана. Глубина в светлом пространстве соответствует теневому шаг текселя 2 на карте глубины. Шаг текселя 1 больше, чем глубина свободного пространства, а 2 равно, а 3 меньше. Пикселей текстуры 2 и 3 прошли тест глубины, в то время как шаг текселя 1 завершается ошибкой.
Вычисление смещения глубины Per-Texel с помощью DDX и ДДИ для крупных Пкфс
Вычисление смещения глубины шаг текселя с помощью DDX и ДДИ для крупных пкфс — это метод, который вычисляет правильную глубину глубины (предполагая, что поверхность плоская) для смежной теневой схемы шаг текселя.
Этот метод соответствует глубине сравнения для плоскости, использующей производные сведения. Поскольку этот метод является сложным, его следует использовать, только если GPU имеет циклы вычислений для запасного. Если используются очень крупные ядра, это может быть единственная методика, которая позволяет удалить артефакты самотеневого копирования, не вызывая панорамирование Питер.
На рис. 12 выделяется проблема. Глубина свободного пространства известна для одного шаг текселя, который сравнивается. Глубина свободного пространства, соответствующая соседним пикселей текстуры на карте глубины, неизвестна.
Рис. 12. Сцена и схема глубины
Визуализированная сцена показана слева, а схема глубины с примером блока шаг текселя показана справа. Шаг текселя пробела сопоставляется с пикселем, обозначенным D в центре блока. Это сравнение является точным. Правильная глубина области видимости, связанная с пикселами, неизвестными для соседа D. Сопоставление соседних пикселей текстуры с пространством глаза возможно только в том случае, если предполагается, что пиксель относится к тому же треугольнику, что и D.
Глубина известна для шаг текселя, которая соответствует положению области освещения. Глубина неизвестна для соседних пикселей текстуры на карте глубины.
На высоком уровне этот метод использует операции DDX и ДДИ HLSL для поиска производного места в пространстве. Это нетривиальный способ, поскольку производные операции возвращают градиент глубины светлого пространства относительно пространства экрана. Чтобы преобразовать это значение в градиент глубины освещения относительно пустого пространства, необходимо вычислить матрицу преобразования.
Объяснение с помощью кода шейдера
Подробные сведения о остальном алгоритме приведены в пояснении к коду шейдера, который выполняет эту операцию. Этот код можно найти в примере CascadedShadowMaps11. На рис. 13 показано, как координаты текстуры освещения отображают карту глубины и как производные значения в X и Y можно использовать для создания матрицы преобразования.
Рис. 13. Пространство на экране для матрицы с небольшими пробелами
Для создания этой матрицы используются производные от расположения места в пространстве координат X и Y.
Первым шагом является вычисление производного расположения светлого пространства.
Процессоры класса Direct3D 11 вычисляют эти производные, выполняя 2 × 2 четыре пикселя параллельно и вычитая координаты текстуры из соседа в X для DDX и из соседа в Y для ДДИ. Эти два производных класса составляют строки матрицы размером 2 × 2. В текущей форме эту матрицу можно использовать для преобразования пространства экрана, соседних пикселов, в наклоненной. Однако требуется обратная часть этой матрицы. Матрица, которая преобразует наклоненной, соседние пиксели, в пространстве экрана.
Рис. 14. Свободное пространство на экране
Эта матрица затем используется для преобразования двух пикселей текстуры выше и справа от текущего шаг текселя. Эти соседи представлены в виде смещения от текущего шаг текселя.
Соотношение, которое создает матрица, в итоге умножается на производные от глубины, чтобы вычислить смещения глубины для соседних пикселов.
Теперь эти весовые коэффициенты можно использовать в цикле PCF для добавления смещения к позиции.
PCF и Ксмс
PCF не работает с массивами текстур в Direct3D 10. Чтобы использовать PCF, все каскады хранятся в одной большой текстуре Atlas.
Смещение Derivative-Based
Добавление смещений на основе производных для Ксмс представляет некоторые трудности. Это обусловлено производным вычислением в отдельном потоке управления. Проблема возникает из-за фундаментального способа работы GPU. Direct3D11 GPU работают в 2 × 2 четырех пикселях. Чтобы выполнить производный, GPU, как правило, вычитают копию переменной текущего пикселя из копии этой же переменной на соседнем пикселе. Как это происходит от GPU до GPU. Координаты текстуры определяются каскадным выделением на основе карт или на основе интервалов. Некоторые Пиксели в пикселе имеют разную каскадную, чем остальные Пиксели. Это приводит к видимым стыкам между теневыми картами, так как производные смещения теперь являются совершенно неправильными. Решение состоит в том, чтобы выполнить производную на координатах текстуры освещения незанятого пространства. Эти координаты одинаковы для каждого каскада.
Заполнение для ядер PCF
PCF ядра индекса за пределами секции Cascade, если теневой буфер не заполнен. Решение заключается в том, чтобы заполнить наружную rimную часть каскадом на половину размера ядра PCF. Эта возможность должна быть реализована в шейдере, который выбирает Каскад и в матрице проекции, которая должна отображать каскадную, достаточно большой для сохранения границы.
теневая Карты дисперсии
ВСМС (Дополнительные сведения см. в разделе отклонение теневых карт по Доннелли и лауритзен). включите фильтрацию прямого теневого отображения. При использовании ВСМС можно использовать все возможности оборудования, поддерживающего фильтрацию текстур. Можно использовать фильтрацию трилинейной и анизотропный (рис. 15). Кроме того, ВСМС может быть размыт напрямую через свертывание. ВСМС имеют некоторые недостатки. необходимо хранить два канала данных глубины (с глубиной и глубиной в квадрате). Когда тени перекрываются, светло-суперсовременные является наиболее распространенным. Однако они хорошо работают с более низкими разрешениями и могут сочетаться с Ксмс.
Рис. 15. Анизотропная фильтрация
Подробные сведения об алгоритмах
ВСМС работу, выполнив визуализацию глубины и глубины в квадрате на основе схемы с двумя каналами. Затем эту схему теневой схемы с двумя каналами можно сделать размытой и отфильтровать так же, как нормальная текстура. Затем алгоритм использует неравенство Чебичев в шейдере пикселей для оценки доли области в пикселях, которая будет проходить тест глубины.
Построитель текстуры получает значения глубины и глубины в квадратах.
Выполняется сравнение глубины.
Если сравнение глубины завершается неудачно, то вычисляется процентная доля освещенного пикселя. Дисперсия вычисляется как среднее значение минус квадраты.
Значение Фперцентлит оценивается как неравенство Чебичев.
Светло суперсовременные
Самый большой недостаток ВСМС — светло суперсовременные (рис. 16). Легкая суперсовременные возникает, когда несколько теней окклуде друг с другом вдоль краев. ВСМС затениет края темных элементов на основе неосторожностей глубины. Когда тени перекрываются, в центре области, которая должна быть скрыта, существует несоответствие глубины. Это проблема использования алгоритма VSM.
Рис. 16. VSM Light суперсовременные
Частичное решение проблемы заключается в том, чтобы подать Фперцентлит в степень. Это приводит к ослаблению размытия, что может вызвать артефакты с небольшими нарушениями в глубине. Иногда существует значение Magical, которое устраняет проблему.
Альтернативой порождению процента освещенности мощности является избежание конфигураций, в которых тени перекрываются. Даже высоко настроенные теневые конфигурации имеют несколько ограничений на освещение, камеру и геометрию. Светло суперсовременные также уменьшается с помощью текстур с более высоким разрешением.
Многоуровневые теневые карты расхождений (Лвсмс) позволяют решить проблему за счет нарушения фрустум в слоях, перпендикулярных источнику. Количество необходимых карт будет довольно большим, если Ксмс также используются.
Кроме того, Эндрю Лауритзен, соавтор бумаги на ВСМС и автор документа на Лвсмс, обсуждая сочетание экспоненциальной теневой карты (Есмс) с ВСМС, чтобы противося нелегкому смешению на форуме Beyond3D.
ВСМС с Ксмс
В примере VarianceShadow11 объединяются ВСМС и Ксмс. Это сочетание довольно просто. Пример соответствует тем же действиям, что и образец CascadedShadowMaps11. Поскольку PCF не используется, тени преобразуются в отделяемыхй свертки. Не используйте PCF также позволяет образцу использовать массивы текстур вместо текстуры Atlas. PCF на массивах текстур — это функция Direct3D 10,1.
Градиенты с Ксмс
Использование градиентов с Ксмс может создать стык вдоль границы между двумя каскадными таблицами, как показано на рис. 17. В образце инструкции используются производные между пикселями для вычисления информации, например уровня mipmap, необходимого для фильтра. Это вызывает проблему в частности для выбора mipmap или анизотропной фильтрации. Когда в построителе пикселей четыре ветви в шейдере, производные от оборудования GPU недопустимы. Это приводит к неровному стыку на теневой карте.
Рис. 17. Стыки на каскадных границах из-за анизотропной фильтрации с использованием других элементов управления потоком
Эту проблему можно решить, вычисляя производные от места в свободном месте. Координата недостаточного пространства не зависит от выбранного каскадного представления. Вычисленные производные массивы могут масштабироваться по части шкалы матрицы проекций текстур до правильного уровня mipmap.
ВСМС по сравнению со стандартными тенями с PCF
И ВСМС, и PCF попытаются приблизительно оценить долю пиксельной области, которая будет проходить тест глубины. ВСМС работает с фильтрацией оборудования и может быть размыт с помощью ядер отделяемых. Ядрам свертки отделяемых значительно дешевле для реализации, чем для полного ядра. Кроме того, ВСМС сравнивает одну глубину свободного пространства с одним значением на карте глубины свободного пространства. Это означает, что ВСМС не имеют тех же проблем со смещением, что и PCF. Технически, ВСМС — это глубина выборки в большей области, а также выполнение статистического анализа. Это менее точное, чем PCF. На практике ВСМС выполняет очень хорошее задание смешения, что приводит к меньшему смещению. Как описано выше, число, которое один недостаток в ВСМС, является светлой суперсовременные.
ВСМС и PCF представляют компромисс между производительностью вычислений GPU и текстурой GPU. Для вычисления дисперсии ВСМС требуется больше математических вычислений. PCF требует больше пропускной способности текстурной памяти. Большие ядра PCF могут быстро стать узким местом по пропускной способности текстуры. Так как вычислительные мощности GPU растут более быстро, чем пропускная способность GPU, ВСМС становится более практичной из двух алгоритмов. ВСМС также лучше рассмотреть теневые карты с более низким разрешением из-за смешения и фильтрации.
Сводка
Ксмс предлагают решение проблемы с псевдонимом перспективы. Существует несколько возможных конфигураций для получения необходимой визуальной точности заголовка. PCF и ВСМС широко используются и должны сочетаться с Ксмс, чтобы сократить число псевдонимов.
Ссылки
Доннелли, W. и Лауритзен — теневые карты с дисперсией. В SI3D ‘ 06: материалы 2006 Symposium в интерактивной трехмерной графике и играх. 2006. PP. 161 – 165. Нью Йорк, Москва, США: ACM Press.
Лауритзен, Эндрю и Мккул, Майкл. Слоевые теневые карты расхождений. Материалы графического интерфейса 2008, 28 мая – 30, 2008, Windsor, Онтарио, Канада.
Енжел, Вофлганг F. раздел 4. каскадная теневая Карты. ShaderX5, дополнительные методы отрисовки, Волфганг F. Енжел, ED. Чарльз River Media, Бостон, Массачусетс. 2006. PP. 197 – 206.