Листинг 14.3. Исходный код шейдера шахматной доски со сглаживанием

uniform vec3 Colorl: uniform vec3 Color2: uniform vec3 AvgColor; uniform float Frequency:
varying vec2 TexCoord;
void main(void) {
vec3 color;

// Определение ширины проекции одного пиксела в пространстве s-t vec2 fw = fwidth(TexCoord):

// Определение степени размытости vec2 fuzz = fw * Frequency * 2.0;

float fuzzMax = max(fuzz.s, fuzz.t):

// Определение координат шаблона шахматной доски vec2 checkPos = fract(TexCoord * Frequency):

if (fuzzMax < 0.5) {

// Если ширина фильтра слишком маленькая, вычисляется цвет шаблона vec2 р = smoothstep(vec2 (0.5), fuzz + vec2 (0.5), checkPos) + (1.0 - smoothstep(vec2(0.0). fuzz. checkPos)):

color = mix(Colorl. Color2. p.x * p.у + (1.0 - p.x) * (1.0 - p.y)):

// Постепенное изменение цвета к среднему при приближении к краю color = mix(color. AvgColor, smoothstep(0.125, 0.5. FuzzMax));

}
else
{

// В противном случае используется только средний цвет color = AvgColor:

}
gl_FragColor = vec4(color, 1.0):
}

14.6. Итоги Больше свободы - больше ответственности. Язык шейдеров OpenGL позволяет вычислять любые процедурные текстуры. Можно легко написать шейдер, который

14.7. Ссылки будет рисовать изображение с уродливыми неровностями и дефектами изображения (обычно в нем используются только условные выражения и функция step), но избавиться от этих проблем будет куда труднее. После общего описания нескольких проблем в этой главе были рассмотрены методы сглаживания процедурных текстур. Некоторые возможности языка помогают выполнять сглаживание, например встроенные функции для гладкой интерполяции (smoothstep), для производных (dFdx, dFdy) и для вычисления ширины фильтра (fwidth). Эти функции широко используются в шейдерах, выполняющих сглаживание с помощью фильтрации, адаптивной фильтрации, интегрирования и отбрасывания частот.

4.7. Ссылки В большинстве книг по обработке сигналов и изображений обсуждаются принципы семплинга, преобразований и дефектов изображения. Книги [10, 12 и 16] могут служить дополнительными справочниками по этой теме. Технические записи Альви Рэя Смита[13-15] описывают проблему дефектов изображения непосредственно для компьютерной графики.


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