суббота, 18 июня 2011 г.

Основанный на GPU важностный семплинг (Перевод) Часть 2

 

оригинальная статья: http://http.developer.nvidia.com/GPUGems3/gpugems3_ch20.html
авторы:
Mark Colbert
University of Central Florida
Jaroslav Kivánek
Czech Technical University in Prague

20.4 Mipmap фильтрация сэмплов.

Как показано на Рисунке 20-5A, детерминированный важностный сэмплинг приводит к резким артефактам ступенчатости, которые выглядят как двойные зеркальные отражения. В стандартной квадратуре Монте-Карло, эта проблема решена введением случайности, которая изменяет ступенчатость на более приемлемый для глаза шум, что видно на рисунке 20-5B. Тем не менее, чтобы сохранить низкий уровень шума, необходимы сотни, даже тысячи сэмплов для каждого пикселя, что является неприемлимым для рендеринга в реальном времени на GPU. Мы используем иной подход - фильтрация с использованием mipmap – чтобы уменьшить ступенчатость, вызванную малым количеством сэмплов, как показано на Рисунке 20-5C.
Идея заключается в следующем: если PDF направления сэмпла мал (то есть, если сэмпл не очень вероятен), то маловероятно, что другие образцы будут генерироваться в аналогичном направлении. В этом случае нам необходимо чтобы освещение сцены было распространено равномерно по большой территории, позволяя увеличить общую точность вычислений. С другой стороны, если PDF направления очень высока, многие сэмплы могут быть получены в аналогичных направлениях. Таким образом, многочисленные сэмплы помогут узнать среднюю ошибку по интегральной оценке этой области. В этом случае сэмпл должен составлять только небольшую область сцены, как показано на Рисунке 20-6A.

Рисунок 20-6 Иллюстрация фильтрованного важностного сэмплинга
Проще говоря, чем меньше PDF, тем больше пикселей надо использовать для этого сэмпла. Мы определяем эту связь с точки зрения телесного угла, связанного с сэмплом, вычисляемого как обратное произведение между PDF и общим числом сэмплов, N:

Уравнение 11
Здесь мы должны сосчитать все пиксели сцены в пределах телесного угла W S вокруг направления сэмплинга. Чтобы сделать усреднение эффективным, мы используем mipmap структуру данных, доступную на GPU. Помните, mipmap - пирамидальная структура по текстуре, где каждый пиксель уровня l является средним из четырех соответствующих пикселей уровня l–1, как показано на рисунке 20-6b , а нулевой уровень является оригинальной текстурой. Таким образом, в среднем все пиксели в пределах телесного угла, W S можно аппроксимировать, выбрав соответствующий уровень mipmap.
Вот как мы поступим. Во-первых, нам необходимо вычислить количество пикселей сцены в W S. Это число предоставляется частотой Ws телесного угла, лежащего напротив пикселя из нулевого уровня mipmap Wp, который, в свою очередь, вычисляется исходя из разрешения текстуры, w*h, и фактора искажения d:
Уравнение 12


Давайте предположим на некоторое время, что искажение d (u) известно (мы вернемся к нему в разделе 20.4.1).
Напоминаем, что необходимо, чтобы поиск по отображению соответствовал средним пикселям Ws Wp, что приводит, к простой формуле уровня mipmap:
Уравнение 13


Отметим, что все телесные углы исчезли из окончательной формулы! Кроме того, 0,5 log 2 [( w • h )/ N ] выражение может быть предварительно вычислено с минимальной вычислительной стоимостью. Теперь все что мы должны сделать для каждого направления сэмплинга заключается в том, чтобы оценить PDF P (U, V), а также искажение D (U), подставить эти числа в предыдущей формуле, и экспортировать результат в tex2Dlod (), как параметр уровня детализации (LOD) , при просмотре отображения сцены.
На практике, мы обнаружили, что введение малых количеств перекрытий сэмплов (например, смещение W S W P на постоянную) создает плавный, визуально более приемлемый результат. В частном случае, мы осуществляем смещение, добавляя 1 к расчетному уровню mipmap определенному уравнением 13.

20.4.1 Мэппинг и искажения

Для отображения сцены, как правило, используется кубический мэппинг. Однако, несмотря на то, что кубический мэппинг имеет очень низкие искажения (что хорошо), у него есть серьезный недостаток - mipmap поколение выполняется на каждом лице отдельно. К сожалению, наша операция фильтрации предполагает, что mipmap сгенерирован путем усреднения пикселей со всей сцены. Поэтому, мы нуждаемся в способе ввести так много информации о сцене, насколько это возможно для одного изображения, которая уберет артефакты, похожие на швы, от mipmaps, не изменяя ускоренное аппаратными средствами mipmap поколение.
Таким образом, вместо того, чтоб использовать кубический мэппинг, мы используем двойной параболоидный мэппинг окружения (Хайдрих и Зейдель 1998, Килгард 1999). Окружение хранится в двух текстурах: один представляет направления из верхнего полушария (Z >= 0), а другая представляет направления из нижнего полушария (Z <0). Несмотря на то, что mipmap для двух текстур вычисляется отдельно, в полученном изображении изредка появляются артефакты. Почему? Потому что текстуры, соответствующие каждому полушарии содержат некоторую информацию из противоположного полушария.
Тем не менее, некоторые швы изображения при рендеринге могут появляться в том месте, где круг на рисунке 20-7A касается края текстуры. Чтобы исправить эту ситуацию, мы усовершенствовали обычный параболоидный мэппинг, добавив коэффициент масштабирования b, равный 1.2, которое добавляет еще больше информации из противоположного полушария, как показано на Рисунке 20-7B.

Рисунoк 20-7B.Масштабированный двойной параболоидный мэппинг окружения.
Задавая направление, U = (X, Y, Z), то координаты текстуры (s,t) для этого масштабированного мэппинга вычисляются следующим образом, показанным в Таблице 20-2.

Таблица 20-2. Уравнения для масштабированного двойного параболоидного мэппинга
Нижнее полушарие (Z <0),Верхнее полушарие (Z >=0)
Вычисляя обратный детерминант матрицы Якоби этого мэппинга, мы можем устанавливать частоту перехода от области на полушарии к области текстуры (другими словами, искажение мэппинга, d (u)):
Уравнение 14


20.5 Исполнение

Как показано в перечислении 20-1 вставка алгоритма происходит при помощи оценщика Монте-Карло (Уравнение 2) и вычисления уровня mpmap (Уравнение 13). Для оптимизации качества и представления мы используем сферическое представление гармоник для диффузного компонента материала (Ramamoorthi 2001). Сферические гармоники работают наилучшим образом для низкочастотного диффузионного шейдинга и вместе с нашим подходом к забору для блестящего шейдинга обеспечивают идеальное гибридное разрешение.
Рисунок 20-8а показывает ошибку аппроксимации касательно ссылочного разрешения, демонстрируя моментальное сопоставление точности воспроизведения числу использованных семплов. На практике, для поверхностей со сложной геометрией необходимы только 24 или меньшее число семплов . Ровным поверхностям, таким как сферы на рисунке 20-8b, часто необходимо больше семплов, но 40 семплов достаточно для визуально приемлемого разрешения. Таким образом,, wavelet подходы и подходы похожие на них, важнофильтрованные семплинг не требуют большого количества семплов , чтобы произвести точное отражение блестящей поверхности, рисунок 20-9 показывает, что наш метод хорош на различных GPU и что представление меняется почти линейно с числом семплов.

Рисунок 20-8. Ошибка интеграции

Рисунок 20-9. Алгоритмическое отображение
Пример 20-1. Псевдокод нашего алгоритма семплинга
На самом деле реализация шейдера выглядит немного иначе, чем представлено в этом псевдокоде, но это просто оптимизированная версия. Самые важные оптимизации следующие:
(1)Четыре адреса генерируются параллельно. (2) BDRF не оценено точно, потому что оно появляется отдельно только в PDF, который исключает собой почти все основы BDRF. (3) Тригонометрические функции ассоциированы с генерацией адреса семпла, используя при этом последовательность Хаммерслея (Уравнение 10), которое предварительно рассчитано.


  1.    float4 GPUImportanceSampling(  
  2.   float3 viewing : TEXCOORD1  
  3.    uniform sampler2D env) : COLOR  
  4. {  
  5.   float4 c = 0;  
  6.   // Sample loop  
  7.    for (int k=0; k < N; k++) {  
  8.     float2 xi = hammersley_seq(k);  
  9.     float3 u = sample_material(xi);  
  10.     float pdf = p(u, viewing);  
  11.     float lod = compute_lod(u, pdf);  
  12.     float2 texcoord = convert_to_dual_paraboloid(u);  
  13.     float3 L = tex2Dlod(env, float4(texcoord, lod.xy));  
  14.     c += L*f(u,viewing)/pdf;  
  15.   }  
  16.   return c/N;  
  17. }  

20.6 Заключение

Наш основанный на GPU семплинг реального времени предоставляет алгоритм для различно параметризированных моделей материала, освещенных окружающей средой. Выполняя интеграцию Монте-Карло с фильтрованием, основанным mipmap, он уменьшает комплекс вычислений, ассоциированный с семплингом важности, чтобы процесс был выполнимым при помощи отдельного шейдера GPU. Эта комбинация также показывает, что не специфицированные на BDRF фильтры (такие как mipmap’ы) достаточны для аппроксимации интеграла освещенности. Следовательно, BDRF’ы b окружение могут меняться в реальном времени.
Задано, что BDRF и окружение могут быть полностью динамичными, визуализация для приложений, такая как материал или дизайн освещения становятся простыми и позволяют создать новый пользовательский интерфейс. На рисунке 20-10 показан такой интерфейс для пространственно различного BDRF и рисование его на холсте в реальном времени. В целом, наша техника представляет обеспечение решения, которое легко интегрировать в нутро существующей продукции, используя один единственный шейдер, обуздывающий вычислительную силу GPU.

Рисунок 20-10. Дизайнер пространственно меняющегося BDRF.

20.7 Дальнейшей чтение и справки

Для более глубокого введение в Монте-Карло и его использование в рендеринге, мы предлагаем вам прочесть книгу Physically Based Rendering: From Theory to Implementation (Pharr and Humphreys 2004). А также отчет Александра Кёллера - Deterministic Sampling Methods in Computer Graphics" (Keller 2003), предоставляющий детальную информацию об использовании последовательностей
Clarberg, P., W. Jarosz, T. Akenine-Möller, and H. W. Jensen. 2005. "Wavelet Importance Sampling: Efficiently Evaluating Products of Complex Functions." In ACM Transactions on Graphics (Proceedings of ACM SIGGRAPH 2005) 24(3), pp. 1166–1175.
Heidrich, W., and H.-P. Seidel. 1998. "View-Independent Environment Maps." In Proceedings of the ACM SIGGRAPH/Eurographics Workshop on Graphics Hardware 1998, pp. 39–45.
Kautz, J., P.-P. Vázquez, W. Heidrich, and H.-P. Seidel. 2000. "A Unified Approach to Prefiltered Environment Maps." In Proceedings of the Eurographics Workshop on Rendering Techniques 2000, pp. 185–196.
Keller, A. 2003. "Strictly Deterministic Sampling Methods in Computer Graphics." In "Monte Carlo Ray Tracing," ACM SIGGRAPH 2003 Course No. 44, July 2003.
Kilgard, M. 1999. "View Independent Environment Mapping with Dual Paraboloid Maps." Presentation at Game Developers Conference 1999.
Lafortune, E. P., S. Foo, K. E. Torrance, and D. P. Greenberg. 1997. "Non-linear Approximation of Reflectance Functions." In Proceedings of SIGGRAPH 97, pp. 117–126.
Lewis, R. R. 1994. "Making Shaders More Physically Plausible." Computer Graphics Forum 13(2), pp. 109–120.
Pharr, Matt, and Greg Humphreys. 2004. Physically Based Rendering: From Theory to Implementation. Morgan Kaufmann.
Ramamoorthi, R., and P. Hanrahan. 2001. "An Efficient Representation for Irradiance Environment Maps." In Proceedings of SIGGRAPH 2001, pp. 497–500.
Ramamoorthi, R., and P. Hanrahan. 2002. "Frequency Space Environment Map Rendering." In ACM Transactions on Graphics (Proceedings of SIGGRAPH 2002) 21(3), pp. 517–526.
Walter, B. 2005. "Notes on the Ward BRDF." Technical Report PCG-05-06, Cornell Program of Computer Graphics.
Wang, R., J. Tran, and D. Luebke. 2006. "All-Frequency Relighting of Glossy Objects." ACM Transactions on Graphics 25(2), pp. 293–318.

Комментариев нет:

Отправить комментарий