Так как этот способ незначительно использует ресурсы графического ускорителя (например, память), он может работать медленнее, чем применение антиалиасинга в процедурной текстуре. Мы не полностью избавляемся от алиасинга, но проявляется он уже на более высокой частоте.
Описанная процедура иллюстрируется рис. 14.2. Для каждого из пикселов цвет определяется четыре раза, затем вычисляется среднее значение. Конечно, рисунок стал выглядеть лучше, но еще недостаточно хорошо, так как мелкие детали все равно не видны.
Рис. 14.2. Супердискретизация с четырьмя пробами цвета на пиксел дает хорошие результаты, но полностью от алиасинга не избавляет: а - форма объекта для рендеринга; б- семплинг выполняется четыре раза для одного пиксела; в - средний результат. Некоторые пикселы, на которые объект попал только одним семплом, считаются имеющими цвет фона Суперсемплинг также можно реализовать во фрагментном шейдере. Код для вычисления цвета фрагмента можно написать как функцию, которая вызывается несколько раз из главной функции и получает цвет нескольких мест фрагмента. Затем вычисляется окончательный цвет фрагмента как среднее значение. Недостаток такого метода - вызов функции ТУраз, где /у7 - количество семплов, вычисляемых для каждого фрагмента.
14.4. Пример сглаживания полосок Иногда случается, что алиасинга избежать невозможно, а суперсемплинг недопустим. Если нужно выполнять процедурное текстурирование и для этого должен использоваться единственный шейдер, тут мало что можно сделать, но лучше постараться написать шейдеры таким образом, чтобы сглаживание все же выполнялось.
14.4. Пример сглаживания полосок
[ Алиасинг возникает при попытке представить непрерывное изображение на экI ране. Это происходит при растеризации, и попытки смягчить дефекты выполня\ ются во фрагментном шейдере. В языке шейдеров OpenGL для этого есть несколько
[ функций, доступных только из фрагментного шейдера. Чтобы продемонстриро[ вать в этом примере несколько приемов борьбы с алиасингом, придумаем наихуд-