О Среднее значение результатов некоторого количества вызовов функции должно приближаться к 0.
□ Возвращаемые значения воспроизводимы, то есть при заданном входном значении всегда получается одно и то же выходное значение.
О Возвращаемые значения статистически инвариантны к вращению (не важно, как будет вращаться область, значения имеют такой же статистический характер).
□ Возвращаемые значения статистически инвариантны к преобразованиям (не важно, как будет преобразовываться область, значения имеют такой же статистический характер).
□ Обычно после преобразования возвращаемые значения изменяются.
□ У функций есть узкое ограничение по частоте (нет видимых элементов, которые выделялись бы сильно в большую или меньшую сторону, выходя за какой-то узкий диапазон).
□ функции везде С-непрерывны вместе со своей, первой производной.
5.10. Итоги
Язык шейдеров OpenGL содержит богатый набор встроенных функций. Некоторые из них похожи на аналогичные в С и C++, другие похожи на функции из RenderMan. Эти функции предназначены для расширения аппаратной функциональности (например, доступа к текстурам) или для поддержки стандартных операций (например, вычисления квадратного корня, приведения значения к заданному диапазону и т. д.), либо они представляют операции, которые будут ускорены аппаратно в будущих версиях графических ускорителей (тригонометрические функции, шум).
Здесь в большом объеме используется перегрузка функций, так как многие из них должны выполнять операции как над векторами, так и над скалярными числами. Производители, поддерживающие язык шейдеров OpenGL, ожидают, что реализация этих функций будет оптимальной, так как рекомендуется, чтобы разработчики использовали эти функции, а не делали вычисления самостоятельно.
Встроенные математические функции можно использовать несколько неожиданным способом, например, для создания текстур, что можно будет увидеть в примерах шейдеров, приводимых в следующих главах этой книги. При этом визуали-зация функции может быть жизненно необходима в процессе разработки, так как она позволяет оценить полезность функции для реализации какого-либо эффекта и сделать правильный выбор.
5.11. Ссылки
Чтобы рассмотреть примеры применения встроенных функций, описанных в этой главе, просто продолжайте читать книгу. Некоторые дополнительные подробности можно найти в книге [2].
Различные встроенные функции языка шейдеров OpenGL, включая функции производных и ширины фильтра, были заимствованы из языка RenderMan, смысл применения этих функций обсуждается в книгах [7 и 1]. За подробным описанием функций шума обращайтесь к заметкам Перлина [3 и 4], а также к дополнительным ссылкам из главы 12.
1. 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).
2. Kessenich J., Baldwin D., Rost R. The OpenGL Shading Language, Version 1.051/ 3Dlabs. 2003 (http://www.3dlabs.com/support/developer/ogl2).