10. NeiderJ., Davis Т., WooM. OpenGL Programming Guide. 3rd ed. Reading, MS: Addison-Wesley, 1999.

11. Sloup J. Physically-based Simulation: A Survey of the Modeling and Rendering of the Earth’s Atmosphere//Proc. of the 18th Spring Conference on Computer Graphics. April 20Q2, P. 141-150 (http://sgi.felk,cvut.cz/~sloup/htmL/research/project).

Процедурные текстурные шейдеры

Имея полнофункциональный высокоуровневый язык программирования для обработки каждого фрагмента, можно алгоритмически вычислять рисунок на поверхности объекта. Это позволяет создавать множество эффектов визуализации, которые иначе создать было бы невозможно.

В предыдущей главе обсуждались шейдеры, которые должны считывать данные из текстурной памяти, чтобы получить требуемый эффект. В этой же главе описываются шейдеры, которые работают с интересными эффектами в основном с помощью алгоритмов, определенных в этих шейдерах. Изображения, построенные с помощью таких шейдеров, создаются алгоритмом, а не основываются на предварительно вычисленных значениях, таких как оцифрованный рисунок или фотография. Иногда такие шейдеры называют процедурными текстурными шейдерами, а выполнение вычислений с помощью такого шейдера - процедурным текстурированием. Зачастую текстурных координат или координат каждой точки объекта бывает достаточно для рисования поверхности объекта процедурным текстурным шейдером.

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

□ Процедурно созданные текстуры требуют немного памяти по сравнению с хранимыми текстурами. Единственное представление текстуры - в алгоритме, определенном кодом процедурного текстурного шейдера. По сравнению с размерами хранимых 20-текстур, такое представление является очень компактным. Обычно это несколько команд, которые занимают гораздо меньше памяти, чем изображения (сравните несколько килобайт кода в процедурном шейдере и несколько сотен килобайт или даже мегабайты для 20-текстуры высокого качества). Это означает, что процедурные текстурные шейдеры требуют меньше памяти графического ускорителя. Такие шейдеры еще экономнее, если на объект необходимо наложить ЗО-текстуру (сравните несколько килобайт и десятки или даже больше мегабайт для хранимой ЗИ-текстуры).

□ Текстуры, созданные процедурными шейдерами, не фиксированы и не имеют какого-либо конкретного разрешения. Их можно накладывать на любые объекты любого масштаба и получать хорошее изображение, так как эти текстуры определены алгоритмически. А вот двухмерное изображение не всегда можно хорошо наложить на трехмерный объект - иногда нужно его растягивать или повторять, что не лучшим образом сказывается на качестве: при приближении объекта к точке обзора иногда видны куски повторяемого изображения или дефекты растягивания. Для алгоритмически созданной текстуры таких проблем не существует.


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