Результатом всех этих вычислений является плавно размытый край в зоне перехода между цветами. Без этого эффекта переход между цветами был бы довольно грубым и перемещался при движении объекта. Выполнение плавного размытия устраняет эти проблемы. Увеличенное изображение перехода между цветами показано на цветном рис. 14. (О процедурных шейдерах сглаживания можно прочитать в главе 14.)

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

11.2. Игрушечный шар

С помощью программируемости можно процедурно определять все виды текстурных шаблонов. Следующий шейдер делает немного больше, чем предыдущий, заполняя сферу процедурно определенным шаблоном звезды и процедурно определенной полосой. Автор этого шейдера, Билл Лайси-Кейн из ATI Research, Inc., хотел создать шар, похожий на одну из ранних анимаций от Pixar - Luxo Jr. Этот шейдер очень специализированный. Как бы сказал Билл, «он заполняет любую поверхность, если это поверхность сферы». Причина этого заключается в особенности фрагментного шейдера, который использует одно из свойств сферы - то, что нормаль любой точки поверхности указывает в том же направлении, что и вектор от центра сферы до этой точки поверхности. При этом нормаль поверхности вычисляется аналитически для дальнейшего использования внутри фрагментного шейдера.

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

Фрагменты в полоске вычислить легче, После того как каждая точка поверхности определена как «звезда», «полоска» или «иная», можно соответственно закрасить каждый фрагмент. Вычисления цвета происходят в порядке, который гарантирует приемлемый результат, даже если шар удален от точки обзора. Нормаль поверхности вычисляется во фрагментном шейдере. Вычисленные значения освещения, включая значения зеркального отражения, также накладываются на каждый фрагмент.

11.2.1. Подготовка приложения

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


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