Есть ли причина, по которой логотип Хиллари Клинтон имеет скрытые выемки?


226

Этот вопрос ни в коем случае не политический!

введите описание изображения здесь

Глядя на SVG-версию логотипа Хиллари, найденную здесь , я заметил, что на двух вертикальных полосах буквы H есть выемки. Перекладина со стрелкой закрывает выемки, поэтому они не видны при просмотре логотипа. Но мне очень любопытно, почему дизайнер вставил эти надрезы. Кто-нибудь знает?

введите описание изображения здесь


53
Технически это схема обхода ошибок. Немного удивительно и тревожно думать, что все университеты и основные поставщики движков 2D-рендеринга снова и снова совершают одну и ту же ошибку, даже несмотря на то, что мы знаем причину, мы знаем, как ее исправить, и это не так уж плохо для производительности. на современном компьютере. И нет 3D-графики, люди редко делают эту ошибку и знают об этом более 30 лет.
Джуджаа

6
@NickT Проблема не в бою, а в смешивании непрозрачности и покрытия, но 3D - это больше, чем игры. В 3D мы веками использовали мультисэмплинг, чтобы решить проблему. Мультисэмплинг (как правило, даже если бы результаты были бы не столь выраженными) не вычисляет покрытие и, следовательно, не допускает ошибки, полагая, что 50% -ое покрытие является 25% видимым через еще одно 50% -ое покрытие. Хотя это может быть правдой, ответ также может быть 50% видимым или ни один не виден. В этом случае, чтобы избежать путаницы, остальные 50% удаляются вручную, мы можем исправить 3 случая, но не все. Не должно быть нужно.
joojaa

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

5
@FranciscoPresencia - это не проблема с SVG, а просто проблема с тем, как мы решили ошибочно реализовать рендеры. Разные рендеры SVG имеют разную серьезность этой проблемы
joojaa

12
@ DA01 нет, наивное исправление невероятно просто, оно меньше кода, чем текущий алгоритм. Вместо того, чтобы делать расчеты на основе покрытия, просто визуализируйте, как будто вы вообще не сглаживаете при более высоком разрешении, затем отфильтруйте изображение до реального разрешения. Это никогда не выльется снизу вверх, так как не может допустить ошибки, так как передний элемент скрывает его полностью. Видеокарты делают это все время, в соответствии с настройками x4 x8 x16 aa в настройках карты gfx.
joojaa

Ответы:


233

Для предотвращения возможных артефактов рендеринга.

Без выемок вы, скорее всего, увидите края нижних фигур там, где они встречаются с краями наложенных фигур (в любом случае на экране это не проблема при печати).

Вы можете увидеть примеры и объяснение возможных артефактов здесь:

Редко есть какая-либо причина иметь идеально выровненные края, которые могут привести к таким артефактам, поэтому использование «надрезов», таких как логотип Хиллари, является хорошей привычкой.


6
Это на самом деле может быть такой же большой проблемой с печатью. В цифровой печати, по крайней мере, svg обычно растеризуется перед отправкой на принтер, и могут появляться такие же типы артефактов. (последний проект моего последнего работодателя (крупный коммерческий типограф) занимался написанием программного обеспечения, помогающего идентифицировать подобные вещи до того, как была проделана дорогая работа по нанесению чернил на бумагу.)
Мистер Миндор

1
Раз мы говорим о политике США, вы имеете в виду «артефакты»?
Андрей Расмуссен

5
Согласно english.se я имею в виду артефакты, а не артефакты. (Но так как я британец, я имею в виду артефакты независимо от того)
Цай

Там редко какая - либо причина ... просто любопытна: существует ли когда - либо какая - либо причина?
Алоис Махдал

@AloisMahdal Я очень в этом сомневаюсь.
Цай

61

Понимание растеризации и алгоритма художника может помочь.

Один из способов рендеринга векторной графики (графики, определяемой полигонами, а не пикселями) в пикселях - это растеризация полигонов при запуске алгоритма рисования.

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

Когда вы размещаете слой, вы обращаете внимание на его покрытие (обычно хранящееся на дополнительном канале, альфа-канале) и используете его для смешивания добавленного цвета с тем, что уже есть.

Если ваш новый слой покрывает пиксель на 50%, и он синий, вы усредняете текущий цвет этого пикселя синим цветом и рисуете его там.

Все становится немного сложнее, если вы создаете изображение с прозрачностью, но не принципиально.

Растеризация - это процесс превращения многоугольника в пиксели. Здесь мы определяем, насколько многоугольник покрывает данный пиксель, используя некоторую алгебру, а затем вычисляем величину покрытия.

Если у вас есть два ребра многоугольника, которые совпадают - точно друг над другом - но оба наполовину покрывают данный пиксель, то случается проблема.

Предположим, что нижний многоугольник красный, а верхний синий и фон белый.

Сначала мы красим красным. Это смешивается с белым, что приводит к 50% белого и 50% красного.

Затем мы рисуем синий. Это смешивается с 50% белого 50% красного, и мы получаем 25% белого 25% красного 50% синего. То же самое происходит, если красный и синий встречаются посередине, или если синий полностью закрывает красный.

Но «на самом деле» синий многоугольник полностью покрыл красный, так почему мы видим это? Потому что алгоритм забывает детали позиционирования субпикселя.

До тех пор, пока охват одного полигона составляет 100%, это не проблема.

Теперь эта проблема не принципиальна. Вы можете сделать рендеринг полигонов с помощью метода трассировки лучей (где вы делаете избыточный рендеринг с коэффициентом N ^ 2 в точках), или даже чисто векторного подхода (где вычитаете блокирующие фигуры из геометрии фигур под их, вырезая их). Ни в том, ни в другом случае «скрытые» цвета не просачиваются в выходное изображение.

Алгоритм художника - не единственный случай, когда «скрытая» геометрия может просочиться. Если вы печатаете на непрозрачных носителях, иногда цветовые слои не идеально выровнены. Таким образом, нижние слои просачиваются, когда верхний слой должен полностью покрывать его.

Поскольку вы не знаете, как будет выводиться ваше векторное изображение, такие отметки позволяют создавать изображения, более устойчивые к несовершенным методам печати / отображения.


1
Ваше описание применимо в случае графики, содержащей альфа-каналы, или в случае субпиксельного рисования при сглаживании. Пример OPs покажет артефакты надреза для смешанных слоев вопреки тому, что предполагается. Я бы предположил, что проблема больше связана с ошибками регистрации при печати.
Пекка

2
@pekka да, но большинство рендеринга делает сглаживание сегодня.
Якк

Если верхний слой имеет какую-либо прозрачность, то выемка приведет к постепенному отводу нижнего слоя от края, влияя как на сглаживание, так и на цвет верхнего уровня. Более подходящим ответом было бы иметь прямоугольную скидку (размера, который трудно оценить) в области, где смешивание нежелательно. Как вы оцениваете это?
Пекка

@pekka Если верхний слой имеет среднюю степень прозрачности, эта проблема гораздо менее проблематична (так или иначе, вы можете увидеть красный под синим). Когда прозрачность вершины приближается к непрозрачности, подойдите к вышеуказанному решению. Поскольку это уходит от непрозрачности, подходите к предварительной компоновке. Общая проблема сложна из-за ошибок регистрации, проблем с наращиванием (слишком много слоев!), Сглаживания и всего остального: в какой-то момент вы захотите написать собственные векторы для каждого выходного формата или каким-то образом их обработать. Я просто попытался ответить на точную техническую причину проблемы, которую решает насечка.
Якк

1
@Pekka прямоугольник сложнее нарисовать, и тогда вы заканчиваете противоположную проблему той же самой проблемы в том, что фон показывает впадину. Паз - это своего рода компромисс между одной ошибкой над множеством других (паз для того, чтобы на экране рендеринга не было квадратной полости, чтобы при необходимости можно было делать надпечатные пластины с минимальными ошибками). Но на самом деле нет никаких причин для этого, просто наши рендереры работают неправильно, вот и все. Мы могли бы легко решить все 3 проблемы, переключив способ растрирования.
Джуджаа

48

Цай это правильно. Я решил добавить визуальный ответ.

Причина в том, что это SVG. В отличие от растрового изображения, где вы управляете каждым визуализированным пикселем, растеризация SVG происходит в браузере ... поэтому браузер принимает эти решения.

Одно из решений, которое должен принять браузер, - когда делать сглаживание. Обычно это происходит, когда точка вдоль линии падает на пиксель. Затем будет сглаживать этот пиксель. Так как он будет рендерить все слои SVG, он будет делать это с каждым слоем, и именно здесь вы можете начать получать краевые артефакты. Это особенно верно, когда вы играете с масштабированием SVG, так как это приведет к тому, что он будет перекрывать разные пиксели экрана.

Вот снимок экрана с зеленой рамкой, перекрывающей красную рамку в Chrome. Верхняя часть страницы имеет 100% масштабирование страницы, нижняя часть увеличена. Обратите внимание на разницу в рендеринге этого края:

введите описание изображения здесь

Если я сделаю снимок экрана и увеличу масштаб, чтобы показать растеризацию, вы сможете получить более четкое представление о том, что происходит:

введите описание изображения здесь

В этом случае идеальным решением было бы растеризировать SVG-браузер в браузере, чтобы он был «умнее» и не отображал вещи в стеке, но, учитывая, что элементами SVG можно манипулировать извне и жить (так как это всего лишь файл XML), это не практичное решение. для браузера.

Так что вместо этого дизайнер принимает это решение, используя вырезы, которые вы видите.

Кстати, в принципе это похоже на то, как бороться с регистрацией в печати с помощью треппинга .


16

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.