Сфера с полосками, созданными процедурно с помощью текстурной координаты б1

Рис. 15.1. Сфера с полосками, созданными процедурно с помощью текстурной координаты б1

1 Рисунок любезно предоставлен Бертом Фрсйдспбсргом, университет Магдебурга, 2002.

Нефотореалистичные шейдеры

15.1.4. Вычисление толщины штриха Сейчас полоски выглядят довольно хорошо, но они не одинаковой ширины"images/tmp16FC-52.png" alt="Выравнивание частоты полосок">

Рис. 15.2. Выравнивание частоты полосок: а - целая часть логарифма градиента используется для определения частоты полосок; б- сфера с высокой частотой полосок; в - целая часть логарифма используется для выравнивания частоты полосок; г- полоски с конусовидными окончаниями1

В результате получается значение градиента, то есть скорость изменения V в заданной точке поверхности (см. раздел 14.4.3). С помощью этого значения можно выровнять ширину линий. (Теперь приблизительное значение градиента, описанное в разделе 14.4.3, не годится, так как здесь вычисляется не ширина фильтра для сглаживания, а частота полосок. Значения должны быть инвариантны при вращении объекта. Поэтому нужно знать не сумму абсолютных значений двух компонентов вектора-градиента, а его реальную длину.) Логарифм (с основой 2) этого значения нужен для согласования ширины по шагам: каждый раз ар удваива1 Рисунок любезно предоставлен Бертом Фрейденбсргом, университет Магдебурга, 2002.

15.1. Штриховка ется, количество линий - тоже (результат показан на рис. 15.2, а). Линии получаются слишком тонкие или слишком жирные. Чтобы избежать этого (так как мы добиваемся постоянной ширины линий), нужно уменьшить количество линий при значительном увеличении их ширины. Это достигается отрицанием логарифма:

float logdp = -log2(dp);
float ilogdp = floor(logdp);
float frequency = exp2(ilogdp):
float sawtooth = fract(V * 16.0 * frequency):

Сфера с большей частотой линий показана на рис. 15.2, б. Видно, что в нижней части сферы линии выглядят нормально, но на полюсе их слишком много. Внесем изменения в частоту линий, и получится, что по всей сфере полоски практически одинаковы (рис. 15.2, в). (Заметьте, как соотносятся рис. 15.2, а и в.)


⇐ Предыдущая| |Следующая ⇒