среда, 22 июня 2011 г.

GPU Gems 3 Рендеринг SpeedTree Следующего поколения (Перевод) Часть 2

Александр Харламов
Корпорация NVIDIA
Ян Кэнтлей
Корпорация NVIDIA
Юри Степаненко
Корпорация NVIDIA


4.3.2 Каскадное Теневое Отображение
Улучшение затенения древесных листьев к сожалению не делает сцену свободной от других проблем теневой карты. Для обширных наружных сцен единственная теневая карта обычно недостаточна. Каскадное отображение тени (CSM) является общей методикой, которая обращается к этой проблеме, разбивая обзор на несколько областей и выполняя отдельную теневую карту для каждой области. (Описание CSM может быть найдено в Zhang et al. 2006. Кроме того, см. Главу 10 этой книги, "разбитые на Параллель Теневые Карты на Программируемом GPUs," для большего о теневых картах и методиках, которые связаны с CSM.)
Для уменьшения нагрузки на CPU, различные каскады обновляются с различной частотой:
· Самый близкий каскад обновляется каждый кадр. Все объекты вовлечены в это.
· Второй каскад обновляется каждые два кадра. Ветви не вовлечены в теневую карту.
· Третий каскад обновляется каждые четыре кадра. Только листья вовлечены в теневую карту.
После того, как теневые карты выполнены, у нас есть много путей к отенению нашего трехмерного мира:
1. Выполнять объекты в том же самом порядке, поскольку они были выполнены во время рендеринга теневой карты, используя соответствующий каскад.
2. Выборка пикселей от каждого каскада и смешивание их.
3. Использование массивов текстур и выбор соответствующего каскада в программе построения теней пикселя.
4. Разбиение одной цели в несколько теневых карт, используя области просмотра.
У каждого подхода есть свои собственные за и против. В SpeedTree мы выбрали вторую опцию.

4.4 Освещение Листа

Освещение играет важную роль в восприятии зрителя. Последние версии SpeedTree обеспечивают все данные, необходимые для выполнения попиксельного динамического освещение на картах листа, включая тангенсы и нормальные карты. Дополнительно, карты листа в SpeedTree могут использовать предварительно вычисленные текстуры с разбросанным освещением. Детальное освещение и тени предварительно готовятся в разбросанных текстуры. Мы выбрали первое решение, потому что оно поддерживает полностью динамическую среду освещения.
4.4.1 Двустороннее Освещение
В дополнение к различиям в зеркальном освещении мы заметили, что листья выглядят различными в зависимости от позиции представления относительно индикатора. Иллюстрация 4-13 показывает две фотографии тех же самых листьев демонтированные с различием в секунды, в тех же самых условиях освещения, с теми же самыми параметрами настройки камеры для выдержки, и так далее. (Пристально смотрите на коричневые пятна «болезни» (края листов), и Вы можете сравнить тот же самый лист в обеих фотографиях. Один лист отмечен красным пятном.), Когда лист расположен сзади, большая часть не отражена; вместо этого, крупный вклад в освещение вносится от преломленного света. Как световые сияния через лист, его оттенок немного сдвинут к желтому или красному.
clip_image008
Иллюстрация 4-13 Реальное освещение листа как функция направления обзора
Основываясь на этом наблюдении, мы осуществили следующую схему моделирования двусторонней природы освещения:
· Желтый цвет листа сгенерирован в программе построения теней пикселя как вектор float3 с компонентами (Diffuse.g * 0.9, Diffuse.g * 1.0, Diffuse.g * 0.2).
· В зависимости от значения µ - угол, как показано в иллюстрации 4-14, между направлением света и вектором обзора, мы выбираем между оригинальным цветом и желтой версией. Выборка происходит, если µ будет близко к p, что означает, что мы смотрим на солнце, и если дерево будет на нашем пути, то листья будут казаться немного более желтыми.
clip_image010
Иллюстрация 4-14 Подсветка Листьев
В зависимости от µ, уменьшен зеркальный компонент, потому что никакое световое отражение не должно произойти на задней стороне. Этот подход может казаться наивным, но он делает изображение, более визуально приятным. См. иллюстрацию 4-15.
clip_image012
Иллюстрация 4-15 Сравнение Улучшения Освещения
4.4.2 Зеркальное Освещение
В дополнение к налаживанию для двустороннего освещения мы изменяем зеркальное освещение, чтобы увеличить реализм. Во-первых, с нормальным зеркальным освещением, отдаленные деревья имеют тенденцию мерцать, таким образом мы уменьшаем зеркальное освещение согласно расстоянию. Затем, мы наблюдали, что фактические древесные листья получили некоторые дополнительные неточности. Иллюстрация 4-16 демонстрирует некоторые типичные светящиеся листья, и от нее мы наблюдаем три вещи. Зеркальное отражение доминирует из-за сильного раздела листа в две плоскости вдоль его оси. Относительно эффекта этих плоскостей мелкие детали вен и других особенностей являются довольно незначащими. Зеркальная мощность отражения низка: отражения не так остры, как они идут, например, на стеклянном материале. Поскольку мы заинтересованы в моделировании в масштабах целых деревьев, а не венами листа, мы используем эти наблюдения, чтобы упростить нашу зеркальную модель листьев. Чтобы моделировать осевое разделение, мы используем более грубую карту нормали "V-shaped", чтобы разбить лист на две половины. Наконец, потому что слишком много деталей в зеркальном содействии часто приводит к мерцанию, мы смещаем выборку текстуры к более низкому уровню нормальной карты. Исход - более гладкое, более нежное зеркальное освещение, которое не даёт тяжелую связанную с освещением ступенчатость.
clip_image014
Иллюстрация 4-16 Фотография Листьев, показывающая поведение зеркального освещения

4.5 Расширенный динамический диапазон и Сглаживание

Наша демонстрационная версия SpeedTree осуществляет расширенный динамический диапазон, объединенный с мультитиповым сглаживанием (MSAA). Мы используем буфер кадра формата "GL_RGBA16F_ARB", вместе с расширением "GL_ARB_multisample".
Значения буфера исходят из блока неба, который является HDR изображением, и от рендеринга дерева. SpeedTree поддерживает сверхяркий рендеринг. Наша демонстрационная версия корректирует это так, чтобы она выводила значения слегка вне [0, 1] диапазона.
Фильтр постобработки добавляет "God rays" к ярким пятнам в буфере кадра при использовании радиального размытия. Иначе, наше использование HDR не ново.

4.6 Альфа к Освещению

Альфа к освещению преобразовывает альфа-значение, выведенное пиксельный шейдером к маске освещения, которая применена в подпиксельной резолюции MSAA, отражая цель. Когда решение MSAA применено, результат - прозрачный пиксель. Альфа к освещению работает хорошо для сглаживания, что иначе было бы 1-битовыми очертаниями прозрачности.
4.6.1 Альфа к Освещению Применительно к SpeedTrees
Такие 1-битовые очертания распространены в отражениях растительности, и SpeedTree использует прозрачные текстуры для ветвей и листьев. Мы применяем альфу к освещению к этим текстурам, и иллюстрация 4-17 показывает выгоды, когда применено к ветвям. Пиксели и "тяжёлые" края в левом изображении очень уменьшены, когда альфа к освещению применена. Выгоды больше, когда растительность двигается (SpeedTree поддерживает реалистические действия ветра), поскольку резкие края очертаний прозрачности имеют тенденцию сверкать. Альфа к освещению в значительной степени устраняет эти недоразумения сверкания. В отличие от альфа сопряжения, альфа к освещению - имеет независимый порядок, таким образом листья и ветви не должны быть сортированы по глубине, чтобы достигнуть правильного изображения.
clip_image016
Иллюстрация 4-17 Воздействие Альфы к Освещению
4.6.2 Плавное наложение Уровня деталей
Однако, есть проблема. Связное SpeedTree отражение использует альфа-очертания в различных целях: уровень беспокойства деталей (LOD). Шумовая текстура в альфа-канале применена с переменным альфа-значением связи. С изменением значения связи различное количество шумовой текстуры проходят тесты. (Для большего количества подробностей, см. 2005 Whatley.)
Чтобы постепенно пересечься между LODs, две модели LOD оттянуты одновременно с отличающимися альфа-значениями связи. Беспокойство использует альфа тест, чтобы постепенно плавно сделать наложение на уровне пикселя. Все пошло не так, как надо, когда альфа к освещению была наивно применена вместе с беспокойством LOD (наиболее очевидно, стволы дерева стали частично прозрачными).
К счастью, альфа к освещению может также адаптироваться, чтобы осуществить плавное накладывание. Альфа к освещению - не прямая замена для альфа сопряжению: большие полупрозрачные области не всегда работают хорошо. В частности альфа к освещению не суммирует таким же образом как смешанная альфа. Если два объекта оттянуты один сверху другого с 50-процентной альфой альфы к освещению, они оба используют ту же самую маску освещения. Получающееся изображение - объект, который проходит тест глубины, оттянутый с 50-процентной прозрачностью.
Мы решаем эту проблему, смещая кривые альфа-постепенного изменения двух LODs. Результат не совершенен: в некоторых пунктах во время перехода полное дерево все еще более прозрачно, чем мы хотели бы. Но этот дефект редко примечателен на практике. Иллюстрация 4-18 показывает дерево в середине алгоритма плавного накладывания, используя альфу для освещения.
clip_image018
Иллюстрация 4-18 Дерево в Середине плавного накладывания LOD


4.6.3 Сглаживание Края Силуэта
В нашем отсекающем силуэт алгоритме рассмотрение высоты выполнено в программе построения теней пикселя. Это означает, что схема силуэта определена только для каждого пикселя, не для каждой выборки. Поскольку видимый край больше не геометрический край, стандартное мультиосуществление выборки не делает сглаживания видимого края.
Альфа к освещению может быть использована для сглаживания краёв силуэта. Чтобы сделать это, мы генерируем узкий пограничный район, на краю силуэта, через который силуэт смутно размывается от непрозрачного к очиститься.
Мы сохраняем 1, или 0 в векторе обзора W в программе построения теней геометрии. Вектора V 0 и V 1 хранят 0 и V 2 и V 3 хранят 1, как показано в иллюстрации 4-19. Это значение будет интерполировано через ребро и представит гладкое изменение высоты.
clip_image002
Иллюстрация 4-19 Альфа-Распределение на Ребре Силуэта
Во время рассмотрения высоты мы помним, что минимальная потеря действует против карты высоты и измененяем пиксельную размытость согласно тому значению. Мы берем ddx () и ddy () компоненты вектора обзора W, чтобы определить изменение высоты на пиксель. После этого мы проверяем минимальные потери (от вектора представления до рассмотрения карты высоты) против занимаемой площади, чтобы определить альфу пикселя как линейную функцию. Альфа-значение равняется 1.0, если вектор представления пересекает карту высоты ствола. Если мы промахиваемся, мы позволяем альфе затемниться к 0, если минимальные потери менее чем приблизительно 1.5 пикселя в модулях экрана. Иначе, альфа установлена в 0.
Иллюстрация 4-20 показывает силуэт без сглаживания и тому же самому силуэту с примененной границей альфы к освещению.
clip_image004
Иллюстрация 4-20 Сглаживание Альфы к освещению на Вытесненных Силуэтах 

4.7 Заключение

Фигуры в этом конечном разделе покажут некоторые типичные результаты наших методик. Они выполнены с помощью нашей GeForce 8800 и методикой SpeedTree в высококачественном демо. Иллюстрация 4-21 показывает нашу двустороннюю модель распространения света на лист, взаимодействующей с высокодинамичными эффектами расстояния. Детальные силуэты ствола также отлично видны. Близкий осмотр ствола около нижнего центра иллюстрации 4-21 демонстрирует некоторые неоднородности между сетью ствола и силуэтом. Однако, мы думаем, что эти неоднородности маленькие и приемлемые. 
clip_image006 
Иллюстрация 4-21 Двустороннее Освещение Листа и Силуэты Ветвей 
Иллюстрация 4-22 демонстрирует, что отсечение силуэта применялось к различным типам стволов: высокие, тонкие деревья. Заметьте, как хорошо силуэт перекликается с рельефной картой, применённой к сети ствола. Силуэты также имеют тонкий эффект на самые тонкие стволы, например, на очень правый край изображения. Эффект является тонким, но он убирает то, что в противном случае было бы прямыми многоугольными краями. Освещение и эффекты расширенного динамического диапазона также видимы, и все деревья показывают детальное самозатенение. 
clip_image008 
Иллюстрация 4-22 Расширенный динамический диапазон и Двустороннее Освещение Плюс Силуэты 
Иллюстрация 4-23 показывает приближённое рассмотрение нашего затенения. Дерево на переднем плане создаёт точные тени на камне ниже и на его собственном стволе, включая ребра силуэта. Эти тени двигаются реалистично, вслед за колебанием дерева из-за эффектов ветра SpeedTree. Листья в крайнем верхнем правом и в центре изображения демонстрируют самозатенение. Оно не столь строго точно, но зато реалистично. Источник освещения расположен почти непосредственно наверху. Заметьте, как затенение листьев отражает это: в центре изображения кластеры светятся сверху и в тени в основании, с реалистическим покрытием между. 
clip_image010 
Иллюстрация 4-23 Детальное, Точное Самозатенение 
Отметьте также эффект каскадных теневых карт. Очень детальная тень видима в переднем плане иллюстрации 4-23. Все же, только к правому центру, тени созданы отдаленными деревьями, к ограничению расстояния обзора. Все видимые тени динамически сгенерированы и двигаются как живые деревья. 
Эти изображения демонстрируют, что программы построения теней SpeedTree могут быть с готовностью настроены хорошо и вне стандартной реализации связей. Они также демонстрируют, что NVIDIA GeForce 8800 способен к рендерингу чрезвычайно высококачественной, реалистической растительности. 

4.8 Справочная информация

Donnelly, William. 2005. "Per-Pixel Displacement Mapping with Distance Functions." InGPU Gems 2, edited by Matt Pharr, pp. 123-136. Addison-Wesley. 
Dummer, Jonathan. 2006. "Cone Step Mapping: An Iterative Ray-Heightfield Intersection Algorithm." Available online at
King, Gary. 2004. "Shadow Mapping Algorithms." Presentation. Available online at 
ftp://download.nvidia.com/developer/presentations/2004/GPU_Jackpot/ Shadow_Mapping.pdf. 
Lloyd, Brandon, David Tuft, Sung-Eui Yoon, and Dinesh Manocha. 2006. "Warping and Partitioning for Low Error Shadow Maps." In Proceedings of the Eurographics Symposium on Rendering 2006, pp. 215-226. 
NVIDIA Corporation. 2005. "Anti-Aliasing with Transparency." White paper. Available online at
Oliveira, Manuel, Gary Bishop, and David McAllister. 2000. "Relief Texture Mapping." InACM Transactions on Graphics (Proceedings of SIGGRAPH 2000) 19(3), pp. 359-368. 
Oliveira, Manuel, and Fabio Policarpo. 2005. "An Efficient Representation for Surface Details." UFRGS Technical Report RP-351. Available online at
Policarpo, Fabio. 2004. "Relief Mapping in a Pixel Shader Using Binary Search." 
Sander, Pedro, Xianfeng Gu, Steven Gortler, Hugues Hoppe, and John Snyder. 2000. "Silhouette Clipping." In ACM Transactions on Graphics (Proceedings of SIGGRAPH 2000)19(3), pp. 327-334. 
Tatarchuk, N. 2006. "Dynamic Parallax Occlusion Mapping with Approximate Soft Shadows." In Proceedings of ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games 2006, pp. 63-69. 
Whatley, David. 2005. "Toward Photorealism in Virtual Botany." In GPU Gems 2, edited by Matt Pharr, pp. 7-26. 
Addison-Wesley.Zhang, F., H. Sun, L. Xu, and K. L. Lee. 2006. "Parallel-Split Shadow Maps for Large-Scale Virtual Environments." In Proceedings of ACM International Conference on Virtual Reality Continuum and Its Applications 2006, pp. 311-318.

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

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