суббота, 30 апреля 2011 г.

Синильный рендеринг и поверхностное рисование–Часть 2

 

Ссылка на статью оригинал:

GPU Gems - Chapter 15. Blueprint Rendering and "Sketchy Drawings"

 

15.3 Поверхностный рендеринг

Техника поверхностного рисования рассматривает наиболее важные видимые ребра и поверхностные цвета для создания неоднородного наброска 3D геометрии.

Метод работает следующим образом: Как и синильный рендеринг, сначала мы создаем промежуточные результаты рендеринга, которые отображают ребра и поверхностные цвета 3D геометрии. Затем мы применяем неопределенные значения в пространстве изображения для создания неоднородного текстурированного наброска. И наконец мы регулируем информацию глубины таким образом, чтобы результат поверхностного рисования можно было объединить с остальными объектами 3D сцены.

15.3.1 Грани и цветные заплатки

Мы опять используем технику улучшения ребер, для сохранения ребер 3D геометрии как карты ребер, чтобы использовать ее позднее, как показано на Рисунке 15-5а. Кроме того мы рендерим поверхностные цвета 3D геометрии для текстурирования созданных цветных заплаток, кажущихся плоскими, затем накладываем все поверхностные детали и эмулируем в мультипликационном стиле. Мы называем эту текстуру картой теней; см. Рисунок 15-5b.

clip_image001

Рисунок 15-5 Применение неопределенных ребер и карт теней

15.3.2 Применение неопределенности

Мы применяем неопределенные значения для ребер и поверхностных цветов в изображении, для симуляции эффекта "наброска на плоской поверхности". Для этой цели мы текстурируем выравненную четверть, используя ребра и карты теней как текстуры. Кроме того, мы применяем дополнительную текстуру, чьи тиксели(пиксели текстуры) являются неопределенными значениями. Так как мы хотим иметь неразрывную границу наброска и связанные кадры, то мы выбираем шумную текстуру, значения тикселей которой, были бы определены шумовой функцией Перлина (Перлин 1985); таким образом граничные неопределенные значения согласовываются в изображении. Созданная однажды (на шаге предварительной обработки), шумная текстура служит текстурой смещения для доступа к ребрам и картам теней при рендеринге. Другими словами, значения этих тикселей нарушают координаты текстуры для каждого фрагмента четверти, благодаря этому достигаются ребра и карты теней.

В дополнение мы введем степень неопределенности для контроля суммы возмущений, для которой мы используем произвольную матрицу 2х2. Мы умножаем значения неопределенности, получившиеся от перемножения шумов текстуры на матрицу, и затем используем полученный вектор смещения для переноса координат текстуры. Рисунок 15-6 иллюстрирует возмущения в координатах текстуры, дающие доступ к карте теней, используя степень неопределенности.

clip_image002

Рисунок 15-6 Применение неопределенности в изображении

Для увеличения эффекта наброска, мы создадим возмущение в координатах текстуры другим способом. Мы применяем две различные матрицы 2х2, результатом являются различные степени неопределенности для каждой карты. Одна степень неопределенности смещает координаты текстуры на карте ребер, другая на карте теней— другими словами, мы двигаем их в противоположные стороны. Рисунок 15-5 изображает ребра и карты теней после применения неопределенностей.

Мы обозначим значения текстуры, соответствующих фрагментам 3D геометрии, как внутренняя область; значения текстуры не соответствующих фрагментам 3D геометрии назовем внешняя область. В заключении, текстурирование четверти и возмущение координат текстуры, используя неопределенности, мы можем обратиться к внутренним краям ребер и карт теней, несмотря на то, что начальные координаты текстуры будут обращаться к внешнему краю и обратно (Рисунок 15-6). Таким образом, внутренний край может быть нарисован за границей 3D геометрии, и внешний край может проникать во внутренний. Мы можем выравнивать наброски за границами 3D геометрии(Рисунок 15-5).

И наконец, мы объединяем значения текстуры ребер и карт теней. Мы умножаем интенсивность значений, принятых от возмущения карты ребер, на значения цветов,
принятых от возмущения карты теней. Для поверхностного рисования на Рисунке 15-7a, мы устанавливаем значения неопределенности (offs , offt ) используя функцию турбулентности (основана на шуме Перлина):

      offs clip_image003 turbulence(s, t); and offt clip_image003[1] turbulence(1 - s, 1 - t);

clip_image004

Figure 15-7 Различные стили Sketchy Rendering

15.3.3 Регулирующая глубина

До сих пор, мы просто текстурировали выравненную четверть с эскизным описанием. Этот метод имеет значительные недостатки. Когда мы рендерим текстурированную четверть с текстурированной 3D геометрией, то, (1) z-значений оригинальной геометрии нет во внутренней области, и в частности, (2) никаких z-значений оригинальной геометрии нет во внешней области когда мы применяем неопределенность. Таким образом поверхностный рендеринг не может правильно взаимодействовать с другими объектами в сцене.

Чтобы преодолеть эти недостатки, мы применяем рендеринг спрайта глубины, учитывая предыдущие возмущения. Таким образом, мы дополнительно текстурируем четверть с картой глубины высокой точности (уже существует) и обращаемся к ней, дважды используя возмущение в координатах текстуры. В первом возмущении, мы применяем степень неопределенности для обращения к карте ребер; во втором возмущении мы применяем степень неопределенности для обращения к карте теней. Минимальным значением для обоих значений текстур является создание заключительных z-значений фрагмента, для тестирования глубины. Рисунок 15-5c' показывает результат обоих возмущений, примененных для карты глубин. Внутренний край возмущенной карты глубины соответствует сочетанию внутренних областей возмущений карты ребер и возмущений карты теней.

Таким образом, изменение рендеринга спрайта глубины, позволяет нам подгонять z-значения текстурируемой четверти, представляющие собой эскизное описание 3D геометрии. Таким образом, z-буфер остается в правильном состоянии, соблюдая геометрию, и его поверхностное изображение может быть в дальнейшем сопоставлено с 3D геометрией.

15.3.4 Варианты поверхностного рендеринга

Мы представляем два варианта поверхностного рендеринга, оба работают в реальном времени.

Шероховатый профиль и цветные переходы

Хотя мы делаем набросок ребер и поверхностных цветов неоднородно, профили и цветные переходы поверхностного описания остаются точными, как если бы мы делали набросок карандашом на плоской поверхности. Мы придаем профилю шероховатость и цветные переходы для симуляции различных способов рисования, например рисование мелом на шероховатой поверхности. Мы применяем случайно выбранные значения шумов; следовательно, смежные значения шумовой текстуры являются некоррелированными. Следовательно, степени неопределенности, которые мы применяем к координатам текстур смежных фрагментов, также являются некоррелированными. Таким образом, мы делаем поверхностное описание со сглаженными и потертыми ребрами, и цветными переходами, как на Рисунке 15-7b. Шероховатость и степень детализации, особенно ребер, моделируется изменением давления, как при рисовании мелом. Этот эффект зависит от количества неопределенности, которую мы применяем для изображения.

Дорисовка ребер

Фундаментальной техникой рисования рукой, для получения рисунка или схемы, является многократная дорисовка ребер. Мы сделаем набросок только визуально важных ребер для симуляции этой техники. Для этого, мы исключаем карту теней, но многократно применяем карту ребер, используя различные степени неопределенности и возможно различные цвета ребер. В этом случае ребра будут наложены неоднородно и получится впечатление, что ребра 3D геометрии неоднократно дорисовывались, как на Рисунке 15-7c. Мы также должны отредактировать информацию глубины, многократно обращаясь к карте глубины, используя соответствующие степени неопределенности.

15.3.5 Управление неопределенностью

Управление значениями неопределенности, позволяет нам настраивать визуальное появление поверхностного рендеринга. Обеспечивая значения неопределенности, основанные на функции шума Перлина для каждого пикселя изображения, (1) мы получаем последовательность кадров, как например при взаимодействии со сценой (потому что соседние значения неопределенности коррелированы), и (2) мы можем обратиться к внутренним областям из внешних и наоборот, а также сделать набросок за границами 3D геометрий. Однако, значения неопределенности остаются неизменными в изображении и не имеют явных соответствий геометрических свойств оригинальной 3D геометрии. Следовательно, поверхностное рисование стремится "плавать" в изображении (известен как эффект душевой двери) и мы не можем определить его появление.

Чтобы преодолеть эти ограничения, мы стремимся сделать следующего:


  • Сохранение геометрических свойств, как положения поверхности, нормали, или информацию кривых для вычисления значений неопределенности.
  • Продолжайте обеспечивать значения неопределенности, как можно ближе к 3D геометрии.


Сохранение геометрических свойств

Чтобы сохранить геометрические свойства 3D геометрии при управлении неопределенностью, мы делаем следующее:


  1. Мы рендерим геометрические свойства прямо в текстуру, чтобы создать дополнительный G-буфер.
  2. Далее мы текстурируем выравненную четверть дополнительной текстурой, и обращаемся к геометрическим свойствам через координаты текстуры (s, t).
  3. И, наконец, мы высчитываем значения неопределенности, основанных на функции шума, используя геометрические свойства в качестве параметров.

Затем, мы можем использовать значения неопределенности для определения различных степеней неопределенности, чтобы получить возмущение координат текстуры (s', t'). Математически, мы используем следующую функцию, чтобы определить возмущенные координаты текстуры (s', t'):







f : (s, t) clip_image003[2](s', t')


f (s, t) = p(s, t, g(s, t)),


где (s, t) являются координатами текстуры фрагмента, полученного от растеризации выравненной четверти, g() делает доступными геометрические свойства в дополнительной текстуре, и p() определяет возмущение примененное к (s, t), используя g() в качестве входа.

Для поверхностного рендеринга, мы применяем две функции f(s, t), чтобы обработать возмущения различных карт ребер (fEdge (s, t)) и теней (fShade (s, t)).

Расширение геометрии

Мы расширяем оригинальную 3D геометрию, чтобы создать геометрические свойства в окрестности изображения. Делаем это путем сдвига вершин объекта вдоль ее нормали. Для этой техники, чтобы получить ожидаемый результат, поверхность должна иметь мало соединенных компонентов и каждый из ее вершин по отдельности должна иметь интерполяционную нормаль.

Расширив 3D геометрию таким образом, мы можем отрендерить геометрические свойства в текстуру для вычисления значений неопределенности во внутренних областях, как и во внешних (вблизи оригинальной 3D геометрии). Теперь внутренние области могут быть нарисованы за границей 3D геометрии и внешние области могут проникать во внутренние. Мы можем применить возмущения, основанные на значениях неопределенности, у которых есть очевидное соответствие основной 3D геометрии.

15.3.6 Уменьшение эффекта душевой двери

Теперь покажем как управлять наброском для уменьшения эффекта душевой двери.

Мы создаем расширенную 3D геометрию с объектными координатами, как значение цветов в текстуре. Для этого мы определяем координаты объекта в пространстве для каждой из смещенных вершин и определяем их, как координаты текстуры в ходе растеризации. Тогда rasterizer создает координаты объекта в пространстве для каждого фрагмента. Специальный фрагмент программы построения теней выводит их, как значение цвета высокой точности для текстуры высокой точности. Таким образом, g(s, t) сохраняет позиции объектного пространства.

Основываясь на g(s, t), мы можем определить координаты текстуры f (s, t) используя p(). В нашем примере, функция p() высчитывает возмущение произвольной матрицы 2х2 и с помощью функции шума Перлина кодируется в 3D текстуру. Затем мы обращаемся к 3D текстуре, используя g(s, t) в качестве координат текстуры. Мы умножаем получившееся значение текстуры на матрицу 2х2, в результате получаем степень неопределенности. Затем функцию f (s, t) применяем степень неопределенности для возмущения (s, t), результатом становится (s', t').

Вычисляем fEdge (s, t) и fShade (s, t), используя различные результаты матриц в описании поверхности, в Рисунке 15-8. Рисунок 15-8 иллюстрирует весь процесс поверхностного рендеринга, учитывая основные геометрические свойства.

clip_image006

Рисунок 15-8 Буферы и результаты промежуточного рендеринга необходимые в Sketchy Rendering

Хотя этот пример просто уменьшает эффект душевой двери, он дает подсказку относительно того, как управлять поверхностными описаниями, используя геометрические свойства. Используя высокоуровневый язык затенения, такой как GLSL (Рост 2004) или Cg (Марк и др. 2003), можно далее проектировать и стилизовать наброски.


15.4 Заключение


Синильный рендеринг представляет собой первую пространственную технику, которая рендерит видимые и закрытые ребра 3D геометрии. В нашей будующей работе мы будем стремиться повысить зрительное восприятие комбинируя карты ребер, полученных техникой объемного рендеринга.

Поверхностное рисование, также первая пространственная техника, которая создает 3D геометрию в мультипликационном стиле. Так как мы создаем и взаимодействуем с геометрическими свойствами и значениями неопределенности во внешних областях, используя промежуточные результаты рендеринга, программы построения теней, написанные на языках высокого уровня не достаточны для техники поверхностного рисования. В будущем, мы хотим создать приятные на вид наброски.

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

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