8.5.2 Дистрибутивность возвращаемых чисел
Таблицы сумм региона теряет точность довольно быстро: LOG (ширина на высоту) биты. 512x512 SAT, следовательно, потребляет 18 бит точности (в худшем случае), оставив только 5 бит из 23-разрядной мантиссы из данных! В общем случае это не катастрофа, однако использование таблицы зон региона существенно снижает эффективную точность в исходных данных.
К счастью, есть несколько трюков, которые мы можем использовать для повышения точности до приемлемого уровня. Hensley и др.. 2005 представила ряд предложений по улучшению точности для таблиц сумм региона. Одна из рекомендаций заключается в изменения каждого из элементов на -0.5 до генерации SAT, и возврат после усреднения региона. Такой подход фактически прибавил дополнительные битной точности. Для получения изображения (в нашем случае, теневой карты), которое содержит весьма неравномерное распределение данных, смещение на среднее значение данных, может добавить еще больше данных. Кроме того, авторы предлагают использовать один "начально-приблженный" SАТ ", чтобы сохранить еще два бита, за счет увеличения точности. Это особенно полезно для оптимизации прожекторов так, как они создают районы с низкой точностью к четырем углам теневой проекции так, что какой-нибудь артефакт будет в основном скрытым в циркуляре конуса затухания прожектора.
А трюк, предложенный Доннели и Lauritzen 2006 тоже полезен здесь: распространение точности на несколько компонентов. Вместо того чтобы хранить по два компонента разницы тени на карте, мы сохраняем четыре компонента, распределяя каждому из двух первых моментов по две компоненты. Это точное разделение не может быть сделано произвольно, для правильной работы с линейной фильтрации, она должна быть линейной операцией. Тем не менее, Листинг 8-5 показывает пример реализации, который работает достаточно хорошо на практике.
Листинг 8-5. Распространение точности с плавающей точкой
// Where to split the value. 8 bits works well for most situations.
float g_DistributeFactor = 256;
float4 DistributePrecision(float2 Moments)
{
float FactorInv = 1 / g_DistributeFactor;
// Split precision
float2 IntPart;
float2 FracPart = modf(Value * g_DistributeFactor, IntPart);
// Compose outputs to make reconstruction cheap.
return float4(IntPart * FactorInv, FracPart);
}
float2 RecombinePrecision(float4 Value)
{
float FactorInv = 1 / g_DistributeFactor;
return (Value.zw * FactorInv + Value.xy);
}
Этот шаг, безусловно, удваивает пропускную способность хранения и требования таблицы сумм разницы теневых карт, но в результате осуществления может превзойти нерезонансный сглаживающий фильтр в процентно-приближенной фильтрации во многих ситуациях, как мы покажем в разделе 8.5.3.
Другой вариант, который был представлен на серии аппаратных средств GeForce 8, заключается в использовании 32-разрядных чисел для хранения теневых карт. Хранение теневой карты происходит таким образом, чтобы экономить несколько разрядов точности, которые в ином случае были бы потрачены впустую, на экспонентную часть из float (который мы не используем).
Когда мы используем числа, переполнения являются потенциальной проблемой. Чтобы полностью избежать переполнения, мы должны зарезервировать log (ширина х высота) битов для накопления. К счастью, переполнение в Direct3D 10 (wraparound) на самом деле работает как наше преимущество. В частности, если мы знаем, что максимальный размер фильтра, который мы когда-либо использовали это Мх на Му, то нам нужны биты только резервного входа (Мх на Му). Потому что консервативной верхней границей зачастую можно установить размеры фильтра, а количество битов останется для передачи данных. На практике это решение работает очень хорошо, даже при больших теневых картах и не требует каких-либо трюков, таких, как распространение точности.
Окончательным вариантом, как только появится аппаратная поддержка, является использование двойной точности с плавающей точкой для хранения моментов. Значительное повышение двойной точности (52 бит против 23 бит) будет устранять любые проблемы вызванные дистрибутивностью чисел.
8.5.3 Результаты
Рисунок 8-11 показывает изображение, полученное оказывается с использованием 512x512 суммы по региону разницы теневой карты. Обратите внимание на отсутствие каких-либо видимых псевдотеней. Рисунок 8-12 показывает жесткие и мягкие тени, которые получены лишь минимальным различием ширины фильтра. Эффективность этого метода не зависит от ширины фильтра, чтобы произвольность мягких теней могла быть достигнута без ущерба для кадров.
Рисунок 8-11 Тени получены разницей теневой карты
Рисунок 8-12 твердые и мягкие тени, полученные использованием таблицы сумм разниц теневых карт
Этот метод работает очень быстро на современном оборудовании. Рисунок 8-13 сравнивает эффективность PCF (с аппаратным ускорением), VSMs (с учетом и без тени мультисемплинга), и SAVSMs. Мы выбрали простую тестовую сцену для оценки относительной эффективности, потому что все эти методы работают с изображением пространства и поэтому они в основном зависят от геометрической сложности.
Рисунок 8-13 Соотношение PCF, VSM, and SAVSM
Совершенно очевидно, что стандартное отклонение размытой тенью карты являются наилучшим решением для постоянного фильтра. Даже когда используется мультисемплинг, VSMs быстрее, чем конкуренты. Имейте в виду, что расходы уменьшены теоретически линейным фильтром в ширину, а практически - современными аппаратными средствами, которые могут выполнять все действия чрезвычайно быстро.
Для динамического фильтра в поперечнике сумма региона разницы теневых карт имеет более высокую стоимость, чем настройки процентно-приближенной фильтрации (генерации SAT). Однако, эти затраты сводят на нет более высокие стоимости выборки PCF, особенно для больших минимальных размеров фильтра (например, мягкие тени). По нашему опыту, минимальный фильтр шириной по крайней мере четыре обязан устранить псевдо-артефакты теневых карт. Так SAVSM является очевидным победителем. Мы ожидаем, что дополнительные усовершенствования могут быть реализованы с более агрессивной оптимизацией.
8.6 Доля тесных мягких теней
Теперь, когда у нас есть алгоритм, который может фильтровать произвольные регионы с постоянными затратами, мы готовы использовать SAVSMs для производства правдоподобных мягких теней. Любой алгоритм, который делает PCF отбор проб в течение теневой карты является потенциальным кандидатом для интеграции.
Один такой алгоритм, предложенный Фернандо 2005 года, работает в процентных приближениях мягких теней (PCSS), который является особенно привлекательным в силу своей простоты. PCSS работает в три этапа: (1) блокировщик поиска, (2) оценка размеров полутени, и (3) теневая фильтрация.
8.6.1 Блокировщик поиска
Блокировщик поиска образцов ищет район с выбранным теневым текселом и считает среднюю глубину любого блока в этом регионе. Поиски региона по размеру пропорционален размеру светлой области и расстоянию до источника света. Одна проба считается найденной, если она ближе к свету, чем выделенные фрагменты (с помощью стандартного теста глубины).
К сожалению, следствие этого этапа это то, что он будет вновь обходить проблемы PCF в наши алгоритме мягких теней. Кроме того, принимая многие образцы некоторых регионов, теневая карта разочаровывает после того, как она работала так тяжело для получения постоянной времени фильтра.
8.6.2 Оценка размеров полутени
Данный шаг алгоритма использует ранее вычисленный Блокировщик с углубленной оценкой размера в полутени, на основании параллельных приближениях плоскости. Мы приводим формулы здесь и отсылаем читателя к (Фернандо 2005) для вывода формулы на основе аналогичных треугольников:
Здесь Wlight относится к размеру света.
8.6.3 Теневая фильтрация
Во время фильтрации, сумма региона разницы теневых карт может быть использована непосредственно, повышая качество и эффективность работы алгоритма на равномерной сетке фильтрации процентных приближений, которая была использована в оригинальной реализации.
8.6.4 Результаты
Рисунок 8-14 показывает сравнения PCSS с процентно-приближенной фильтрацией (слева) и сумму по региону разницы теневых карт (справа) для шага фильтрации. Особенно трудно заставить реализации принимать множество образцов (64) во время шага Блокировщика поиска. Независимо от этого выравнивания SAVSM реализации превысили PCF: 40 кадров / сек против 25 кадров / сек при 1600x1200. Кроме того, качество изображения в PCF был ниже, поскольку он слабо отобрал фильтром в регионе.
Рисунок 8-14 Правдоподобные Мягкие тени с использованием PCSS
Несмотря на предварительный характер, эти результаты означают, что суммы по региону разницы теневых карт хорошо подходят для использования в алгоритмах мягких теней. Мы с нетерпением ожидаем дальнейших исследований в этой области.
8.7 Заключение
Мы обсудили тему теневой карты фильтрации в деталях, и при условии решения многих проблем, связанных, например, мини-смещением, смещением, и мягкими тенями.
Мы показали, что разница теневых карт весьма полезна и является перспективным направлением для дальнейших исследований. Тем не менее, стандартное отклонение размытия теневой карты, в сочетании со световой-функцией уменьшает нежелаетльные появления света, очень быстро и надежно, и они обеспечивают отличное качество. Мы настоятельно рекомендуем использовать эту теневую фильтрацию в большинстве приложений, которые не требуют фильтром широкого контроля за пикселями.
Для правдоподобной мягкой тени, разница теневых карт также оказалась полезной. В сочетании с таблицей сумм по региону, они обеспечивают постоянную фильтрацию произвольных прямоугольных регионов.
В заключение, мы надеемся, что эта глава предлагает полезные решения, и что она будет стимулировать научные исследования в отрасли разницы теневых карт и теневые алгоритмы фильтрации в целом.
8.8 Приложение
Crow, Franklin. 1977. "Shadow Algorithms for Computer Graphics." In Computer Graphics (Proceedings of SIGGRAPH 1977) 11(2), pp. 242–248.
Crow, Franklin. 1984. "Summed-Area Tables for Texture Mapping." In Computer Graphics (Proceedings of SIGGRAPH 1984) 18(3), pp. 207–212.
Donnelly, William, and Andrew Lauritzen. 2006. "Variance Shadow Maps." In Proceedings of the Symposium on Interactive 3D Graphics and Games 2006, pp. 161–165.
Fernando, Randima. 2005. "Percentage-Closer Soft Shadows." In SIGGRAPH 2005 Sketches.
Glassner, Andrew. 1986. "Adaptive Precision in Texture Mapping." In Computer Graphics (Proceedings of SIGGRAPH 1986) 20(4), pp. 297–306.
Hensley, Justin, Thorsten Scheuermann, Greg Coombe, Montek Singh, and Anselmo Lastra. 2005. "Fast Summed-Area Table Generation and Its Applications." Computer Graphics Forum 24(3), pp. 547–555.
Kilgard, Mark. 2001. "Shadow Mapping with Today's OpenGL Hardware." Presentation at CEDEC 2001.
Martin, Tobias, and Tiow-Seng Tan. 2004. "Anti-aliasing and Continuity with Trapezoidal Shadow Maps." In Eurographics Symposium on Rendering Proceedings 2004, pp. 153–160.
Reeves, William, David Salesin and Robert Cook. 1987. "Rendering Antialiased Shadows with Depth Maps." In Computer Graphics (Proceedings of SIGGRAPH 1987) 21(3), pp. 283–291.
Stamminger, Marc, and George Drettakis. 2002. "Perspective Shadow Maps." In ACM Transactions on Graphics (Proceedings of SIGGRAPH 2002) 21(3), pp. 557–562.
Williams, Lance. 1978. "Casting Curved Shadows on Curved Surfaces." In Computer Graphics (Proceedings of SIGGRAPH 1978) 12(3), pp. 270–274.
Wimmer, Michael, D. Scherzer, and Werner Purgathofer. 2004. "Light Space Perspective Shadow Maps." In Proceedings of the Eurographics Symposium on Rendering 2004, pp. 143–152.
Комментариев нет:
Отправить комментарий