Полученные значения обозначают ширину размытой области. На одной из сторон полоски frac2 будет равно 0, a fracl - соответствовать относительному расстоянию до границы зоны перехода. На другой стороне полоски fracl будет равно 1, a f гас2 - соответствовать относительному расстоянию до границы зоны перехода. Следующая строчка кода (fracl = fracl* (1.0 - frac2)) выдает промежуточное значение для дальнейшего вычисления плавного перехода между BackColor и St ri peCol or. Но вообще-то неплохо было бы создать что-нибудь лучшее, чем простой плавный линейный переход. Следующая строчка кода выполняет интерполяцию Эрмита, так, как это делает функция smoothstep. Окончательное значение fracl в дальнейшем используется для перехода между BackCol or и St ri peCol or.

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

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

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

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

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

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


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