(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));

}

el se {

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

}

gl_F ragColor = vec4(color, 1.0):

}

14.6. Итоги

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

4.7. Ссылки

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

Книга [2] содержит главу, описывающую сглаживание в шейдерах в понятиях языка шейдеров RenderMan, но большинство методов могут применяться и в языке шейдеров OpenGL. Дарвин Пичи тоже пишет о методах сглаживания в книге [7].

Берт Фрейденберг разработал шейдер на языке шейдеров OpenGL для выполнения адаптивного сглаживания и представил эту работу на выставке SIGGRAPH-2002 в Сан-Антонио, штат Техас. В этой главе я просто воспроизвел его примеры, но Берт заслуживает особой похвалы за иллюстрации к некоторым темам этой книги.

1. 3Dlabs. Веб-сайт для разработчиков (http://www.3dlabs.com/support/devetoper).

2. Apodaca A. A., Gritz L. Advanced RenderMan: Creating CGI for Motion Pictures. San Francisco: Morgan Kaufmann Publishers, 1999 (http://www.bmrt.org/arman/ materials, html).

3. Cook R. L. Stochastic Sampling in Computer Graphics//ACM Transactions on Graphics. 1986. Vol. 5, № 1. P. 51-72.

4. Crow F. C. The Aliasing Problem in Computer-Generated Shaded Images//Comm. of the ACM. 1977. № 20 (11). P. 799-805.

5. Crow F. C. Summed-Area Tables for Texture Mapping//Computer Graphics (Proc. SIGGRAPH-84). 1984. July. P. 207-212.

6. Dippft M. A. Z., Wold E. H. Antialiasing Through Stochastic Sampling//Computer Graphics (Proc. SIGGRAPH-85). 1985. July. P. 69-78.

7. Texturing and Modeling: A Procedural Approach. 3rd ed.//D. S. Ebert, J. Hart, B. Mark, at al. San Francisco: Morgan Kaufmann Publishers, 2002 (http:// www.texturingandmodeling.com).


⇐ вернуться назад | | далее ⇒