LINUX.ORG.RU

Идеальное сглаживание шрифта. Как?

 , ,


0

2

Попробовал такие варианты:

  <match target="font">
    <test name="prgname" compare="contains"><string>st</string></test>
    <!-- v0 Без радуги. Самый вменяемый визуально вариант -->
    <edit name="rgba" mode="assign"><const>none</const></edit>
    <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit>
    <edit mode="assign" name="hinting"><bool>true</bool></edit>
    <edit mode="assign" name="hintstyle"><const>hintfull</const></edit>
    <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit>
    <edit mode="assign" name="autohint"><bool>true</bool></edit>
    
    <!-- v1 Без радуги. Чуть хуже(буквы разной ширины)  -->
    <!-- <edit name="rgba" mode="assign"><const>none</const></edit> -->
    <!-- <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="hinting"><bool>true</bool></edit> -->
    <!-- <edit mode="assign" name="hintstyle"><const>hintslight</const></edit> -->
    <!-- <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit> -->
    <!-- <edit mode="assign" name="autohint"><bool>true</bool></edit> -->

    <!-- v0 Радуга. Самая небольшая радуга -->
    <!-- <edit mode="assign" name="rgba"><const>rgb</const></edit> -->
    <!-- <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="hinting"><bool>true</bool></edit> -->
    <!-- <edit mode="assign" name="hintstyle"><const>hintslight</const></edit> -->
    <!-- <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit> -->
    <!-- <edit mode="assign" name="autohint"><bool>true</bool></edit> -->
        
    <!-- v1  -->
    <!-- <edit mode="assign" name="antialias"><bool>true</bool></edit> -->
    <!-- <edit mode="assign" name="autohint"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="hintstyle"><const>hintnone</const></edit> -->
    <!-- <edit mode="assign" name="hinting"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit> -->

    <!-- v2 -->
    <!-- <edit mode="assign" name="rgba"><const>none</const></edit> -->
    <!-- <edit mode="assign" name="antialias"><bool>true</bool></edit> -->
    <!-- <edit mode="assign" name="hintstyle"><const>hintnone</const></edit> -->
    <!-- <edit mode="assign" name="hinting"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit> -->
    
    <!-- v3 самое вменяемое сглаживание, но цветное -->
    <!-- <edit mode="assign" name="hintstyle"><const>hintmedium</const></edit> -->
    <!-- <edit mode="assign" name="hintstyle"><const>hintfull</const></edit> -->
    <!-- <edit mode="assign" name="lcdfilter"><const>lcdnone</const></edit> -->
    
    <!-- v5 -->
    <!-- <edit mode="assign" name="antialias"><bool>true</bool></edit> -->
    <!-- <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="force_autohint"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="force_bw"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="force_bw_monospace"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="hinting"><bool>false</bool></edit> -->
    <!-- <edit mode="assign" name="force_hintstyle"><const>hintnone</const></edit> -->
    <!-- <edit mode="assign" name="lcdfilter"><const>lcdnone</const></edit> -->
    <!-- <edit mode="assign" name="rgba"><const>none</const></edit> -->

Но не один из них не сглаживает идеально шрифты. Если включать rgb - то вырвиглаз радуга, невозможно сидеть. Если выключить то самый лучший v0, но всё как-то не идеально. Взять какой-то андроид - там шрифты идеально сглаженные, при любом увеличении.

Без приблежения выглядит у меня конечно при v0 более-менее https://i.paste.pics/a88017acce572db8cd96fe7f6b9ec6cf.png

Но если приближение включить, то: https://pasteboard.co/VIsZ9QT4QnJo.png

Шрифт Consolas

Это ж, млеать, безобразие!!!

★★★

Последнее исправление: serg002 (всего исправлений: 2)

Вырвиглазная радуга при субпиксельном сглаживании может быть из за несовпадающего порядка следования и\или ориентации субпикселей в пикселе. У тебя может быть не RGB, а V(вертикальное)RGB, BGR, VBGR. Вот тут проверь как у тебя обстоят дела с матрицей и пропиши нужный тип и ориентацию субпиксельного сглаживания в конфиге.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 3)
Ответ на: комментарий от Jameson

При каждом варианте есть явно выраженные цветные полосы на шрифте

<!-- rgb hint full -->
    <edit mode="assign" name="rgba"><const>rgb</const></edit>
    <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit>
    <edit mode="assign" name="hinting"><bool>true</bool></edit>
    <edit mode="assign" name="hintstyle"><const>hintfull</const></edit>
    <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit>
    <edit mode="assign" name="autohint"><bool>true</bool></edit>

<!-- rgb hint light -->
    <edit mode="assign" name="rgba"><const>rgb</const></edit>
    <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit>
    <edit mode="assign" name="hinting"><bool>true</bool></edit>
    <edit mode="assign" name="hintstyle"><const>hintslight</const></edit>
    <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit>
    <edit mode="assign" name="autohint"><bool>true</bool></edit>

<!-- rgb none hint full -->
    <edit mode="assign" name="rgba"><const>rgb</const></edit>
    <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit>
    <edit mode="assign" name="hinting"><bool>true</bool></edit>
    <edit mode="assign" name="hintstyle"><const>hintslight</const></edit>
    <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit>
    <edit mode="assign" name="autohint"><bool>true</bool></edit>

Скриншот: https://i.paste.pics/7240eef2ef6170edbc8acfd5eb371342.png

serg002 ★★★
() автор топика
Ответ на: комментарий от serg002

Ты реально не понял то что я выше написал? У тебя во всех трёх вариантах rgb режим, я писал про порядок следования субпикселей в пикселе твоей матрицы, а не про хинтинг, это вообще другое совсем. Сходи уже по ссылке в моём посте, переведи что там написано и проверь какой у тебя порядок следования субпикселей в пикселе. И соответственно настрой, может быть причина «радуги» именно это и есть.

Jameson ★★★★★
()
Ответ на: комментарий от Anoxemian

Интересный тест. Референс - сплошное мыло, результат «Rendering of your browser» божественнен. Нерабочий пример

Даже если и так, принцип как проверить там описан, можно и самому тест в любой простейшей рисовалке нарисовать и определить порядок.

Jameson ★★★★★
()

BTW IMHO скриншот не может передать ситуацию с субпикселями, так как захват картинки на уровне пикселей происходит. Соответственно при просмотре «пиксель в пиксель» и без обработки увиденное будет зависеть от матрицы того кто смотрит, а не того кто скриншотил.

Jameson ★★★★★
()
Ответ на: комментарий от Jameson

Хорошо, у меня rgb.

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

Как они могут выглядеть одинаково, лол?

serg002 ★★★
() автор топика
Ответ на: комментарий от serg002

Ну вот так. Изложу простым языком — магию либо уродство субпиксельного сглаживания ты видишь только на своём мониторе своими глазами, я же на своём мониторе увижу на твоём скриншоте что то другое, так как ориентация субпикселей и их порядок у нас могут отличаться. А картинка состоит из пикселей, а не субпикселей, пиксель формируется из субпикселей уже у меня, и не обязательно так же как и у тебя. А ещё расчёты с учётом субпикселей и рендеринг результата происходит на «твоём конце» с учётом твоей ориентации субпикселей. А у меня тут просто картинка с результатом. И у меня вообще VBGR на матрице если что. Так что я вижу совсем не то что ты видишь.

Jameson ★★★★★
()
Ответ на: комментарий от serg002

Хорошо, у меня rgb.

Ну значит «не судьба» с субпиксельным сглаживанием, забей, ты особенный, радугочувствительный.

Jameson ★★★★★
()
Ответ на: комментарий от serg002

И это будет копия байт в байт твоего скриншота. Смысл? Ты же его не обрабатывал алгоритмами с потерей качества, типа jpeg например? Если обрабатывал, то да, копии не будет, но и смысла смотреть и повторно скриншотать изначально запоротый скриншот нет.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Jameson

Давай проверим твои утверждения. Сделай скрин и выложи. Можешь еще вдобавок с скрину сделать фото экрана и тоже выложить

serg002 ★★★
() автор топика
Ответ на: комментарий от serg002

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

Jameson ★★★★★
()
Ответ на: комментарий от serg002

Я тебе ничего доказывать не собираюсь. Не веришь — не надо, мне тащемто всё равно. Заниматься тем в чём я смысла не вижу я не хочу. И меряться матрицами и процентами зрения тоже не буду. Компьютер твой, настраивай его как пожелаешь. Я просто рассказал тебе про существование отличных от rgb ориентаций, а ты делай с этой инфой что хочешь.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от papin-aziat

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

Jameson ★★★★★
()

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

Чтобы шрифты были как на андроиде, надо DPI такой же. Покупай 4к монитор.

goingUp ★★★★★
()
Ответ на: комментарий от rupert

Причём там про это написано на страничке теста, но кто же написанное читает...

Jameson ★★★★★
()
Ответ на: комментарий от serg002

Dell 2412 это типичый RGB. Вообще, на 24" FHD ты всегда будешь видеть пиксели. Тебе надо либо QHD/4K, либо от монитора сидеть на расстоянии в 1.5 метра.

rupert ★★★★★
()
Ответ на: комментарий от rupert

либо от монитора сидеть на расстоянии в 1.5 метра

Я цветные шрифты и с 1.5 метра вижу(только что проверил)

serg002 ★★★
() автор топика
Ответ на: комментарий от goingUp

В андроиде цветных шрифтов. Попробуй увеличение сделай

serg002 ★★★
() автор топика
Ответ на: комментарий от Jameson

lcdlight даёт наилучший результат

Без rgb пиксель в пиксель с lcddefault

serg002 ★★★
() автор топика

У тебя неоптимальная (с моей точки зрения) конфигурация по нескольким параметрам:

  • Consolas - фигово отображается в линуксе, потому что там хинты специально под Шindows сделаны.
  • hintfull - насколько я помню, этот вариант активно ломают с каждым новым релизом freetype. Уже как 10 лет нормально работает только hintslight.
  • autohint=true - эта штука вообще очертания шрифтов ломаетменяет. У меня всегда стоит autohint=false.
  • rgba=none - хорошо работает только с dpi=200 и более. Хотя на Федоре по-умолчанию именно так (слышал, что мэнтейнеру так больше нравится). Я использую rgba=rgb.
rupert ★★★★★
()
Ответ на: комментарий от serg002

Раз тебя это раздражает просто не используй субпиксельный рендеринг. И включи фильтрацию lcdlight, она полутонами серого делается. И у тебя автохинтинг включён, выключи его, он ужасен и придуман для сделанных непрофессионалами шрифтов не содержащих в себе правила хинтинга, шрифты с прописанными в них правилами хинтинга он портит, так как кладёт на них болт. Режим hintfull сейчас сломан в самой библиотеке, наименьшим злом для шрифтов с «кривым» хинтингом является hintlight, но он у тебя не работает как задумано если включён автохинтинг.

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

Ну и правильно говорят, 4к\8к мониторы с большим DPI решают проблему рендеринга шрифтов на корню просто за счёт плотности пикселей.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)
Ответ на: комментарий от Jameson
<!-- v0 Без радуги. Самый вменяемый визуально вариант -->
    <edit name="rgba" mode="assign"><const>none</const></edit>
    <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit>
    <edit mode="assign" name="hinting"><bool>true</bool></edit>
    <edit mode="assign" name="hintstyle"><const>hintfull</const></edit>
    <!-- <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit> -->
    <edit mode="assign" name="lcdfilter"><const>lcdlight</const></edit>
    <edit mode="assign" name="autohint"><bool>true</bool></edit>

Визуально вот это выглядит лучше всего :(

serg002 ★★★
() автор топика
Ответ на: комментарий от rupert

Consolas - фигово отображается в линуксе, потому что там хинты специально под Шindows сделаны.

Это ты кстати зря, хинты они везде хинты, в Микрософтовских шрифтах они хотя бы есть и их делали люди понимающие что они делают. В их шрифтах есть проблемы с хинтингом литер отличающихся от латиницы, потому что с ними тупо никто не напрягался и их не исправлял. А с латиницей там всё хорошо. А ещё плохо не с самим хинтингом в шрифтах, а с интерпретацией на уровне библиотек. Hintfull действительно сломан, автохинтинг прописанную в шрифте инфу просто не учитывает (его в том числе и внедряли потому что «честный» хинтинг на основе шрифтовой информации использовать было нельзя из за патентов Адоба) и пытается автоматически универсально размазать всё что рисует, естественно получается это ужасно. А вот легкий хинтинг обрабатывается как задуман, если в винде его же включить выглядеть будет одинаково (без учёта эффектов субпиксельного сглаживания или LCD фильтрации).

Jameson ★★★★★
()
Ответ на: комментарий от serg002

Ну главное чтобы тебе нравилось. Странно конечно, но у тебя отличное зрение и матрица, тебе там виднее...

Jameson ★★★★★
()
Ответ на: комментарий от serg002

Вообще hintfull в сочетании с автохинтингом действительно может давать результат лучше чем без автохинтинга, с «родными» хинтами из шрифта. Если тебя на этом шрифте такое сочетание устраивает больше чем лёгкий хинтинг без автохинтирования — пусть будет. Просто далеко не факт что другие шрифты будут хорошо при этом смотреться, автохинтинг он такой, он особенности не учитывает и размазывает всё без разбора.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)
Ответ на: комментарий от Jameson

Да, только что перепробовал все варианты. Вот этот лучше, чем прошлый

 <edit name="rgba" mode="assign"><const>none</const></edit>
    <edit mode="assign" name="embeddedbitmap"><bool>false</bool></edit>
    <edit mode="assign" name="hinting"><bool>true</bool></edit>
    <edit mode="assign" name="hintstyle"><const>hintfull</const></edit>
    <edit mode="assign" name="lcdfilter"><const>lcddefault</const></edit>
    <edit mode="assign" name="autohint"><bool>true</bool></edit>

т.е hintfull + lcddefault. На нём не съезжают всякие m и некоторые буквы чётче выглядят

А так, лучше(или хотя бы на уровне) Consolas - ничего нет. Все эти roboto mono, inconsolata, dejavu mono заточены на определенный размер. Если повторить размер Consolas - они все плывут. И у некоторых с межстрочным интервалом беда

serg002 ★★★
() автор топика
Последнее исправление: serg002 (всего исправлений: 2)
Ответ на: комментарий от serg002

Только ты учти что помимо консольки с Consolas у тебя ещё как минимум браузер есть, и на веб страничках встречаются самые разные шрифты. Так что не забудь убедиться что у тебя и в браузере разные шрифты прилично смотрятся.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от serg002

Вообще консольные шрифты это отдельная песня, у них фиксированное начертание литер, к их хинтингу несколько другие требования, попроще. Я бы вообще их отдельно обрабатывал, так как их хинтинг отличается от серифных и бессерифных шрифтов с литерами переменной ширины и переменным начертанием штрихов.

Но главное чтобы тебе нравилось тащемто. Устраивает результат — ну и прекрасно, можешь пометить тему как решённую.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)

Чем тебя terminus в терминале не устраивает? Ну или другие шрифты которые без сглаживания работают.

e1nste1n ★★★★★
()
Ответ на: комментарий от e1nste1n

А что там не так с Ъ?

Опиши своими словами. Ъ по ссылкам не ходят. Я, конечно, сходил, но так и не понял, что ты имел в виду.

posixbit ★★
()
Ответ на: комментарий от e1nste1n

Конкретно terminus не устраивает тем, что он неюзабелен для кода и даже для терминала. Нечитабельный он. Остальные подобные еще хуже, чем терминус

serg002 ★★★
() автор топика
Последнее исправление: serg002 (всего исправлений: 1)
Ответ на: комментарий от serg002

Тут вопрос вкуса конечно, но могу посоветовать попробовать Luculent и UW ttyp0. Первый векторный, работает одинаково хорошо и со сглаживанием и без. Второй битмапный, может выглядеть приятнее строго геометрического terminus'а.
http://eastfarthing.com/luculent/
https://people.mpi-inf.mpg.de/~uwe/misc/uw-ttyp0/

e1nste1n ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.