Понимание растеризации и алгоритма художника может помочь.
Один из способов рендеринга векторной графики (графики, определяемой полигонами, а не пикселями) в пикселях - это растеризация полигонов при запуске алгоритма рисования.
Алгоритм рисования представляет собой процесс «снизу вверх», в котором вы сначала откладываете фон, а затем рисуете поверх этого фона каждым слоем цвета, пока не достигнете верхнего слоя.
Когда вы размещаете слой, вы обращаете внимание на его покрытие (обычно хранящееся на дополнительном канале, альфа-канале) и используете его для смешивания добавленного цвета с тем, что уже есть.
Если ваш новый слой покрывает пиксель на 50%, и он синий, вы усредняете текущий цвет этого пикселя синим цветом и рисуете его там.
Все становится немного сложнее, если вы создаете изображение с прозрачностью, но не принципиально.
Растеризация - это процесс превращения многоугольника в пиксели. Здесь мы определяем, насколько многоугольник покрывает данный пиксель, используя некоторую алгебру, а затем вычисляем величину покрытия.
Если у вас есть два ребра многоугольника, которые совпадают - точно друг над другом - но оба наполовину покрывают данный пиксель, то случается проблема.
Предположим, что нижний многоугольник красный, а верхний синий и фон белый.
Сначала мы красим красным. Это смешивается с белым, что приводит к 50% белого и 50% красного.
Затем мы рисуем синий. Это смешивается с 50% белого 50% красного, и мы получаем 25% белого 25% красного 50% синего. То же самое происходит, если красный и синий встречаются посередине, или если синий полностью закрывает красный.
Но «на самом деле» синий многоугольник полностью покрыл красный, так почему мы видим это? Потому что алгоритм забывает детали позиционирования субпикселя.
До тех пор, пока охват одного полигона составляет 100%, это не проблема.
Теперь эта проблема не принципиальна. Вы можете сделать рендеринг полигонов с помощью метода трассировки лучей (где вы делаете избыточный рендеринг с коэффициентом N ^ 2 в точках), или даже чисто векторного подхода (где вычитаете блокирующие фигуры из геометрии фигур под их, вырезая их). Ни в том, ни в другом случае «скрытые» цвета не просачиваются в выходное изображение.
Алгоритм художника - не единственный случай, когда «скрытая» геометрия может просочиться. Если вы печатаете на непрозрачных носителях, иногда цветовые слои не идеально выровнены. Таким образом, нижние слои просачиваются, когда верхний слой должен полностью покрывать его.
Поскольку вы не знаете, как будет выводиться ваше векторное изображение, такие отметки позволяют создавать изображения, более устойчивые к несовершенным методам печати / отображения.