Шайтанам Фотошопа — Панели и приборы

Тут уже шла речь о рисовании «красивых» приборов… Вот, решил поделиться собственным опытом.

Опытным путем пришел к выводу, что основная причина того, что «то, что красиво в Фотошопе — не всегда красиво в Симе» в используемом последним методе антиалиазинга. (Это можно легко проследить, нарисовав разные геом. фигуры известного размера (в пикселях) и поместив битмап на панель с разным маштабированием. Если потом выдрать скрин и изучить его в том же Фотошопе, можно отследить, что и как «антиалиазится») В общем и целом Сим пытается получить лучшие результаты для любого масштабирования и, соответственно, нужно просто пойти ему на встречу.

Суть антиалиазинга вообще в простейшем случае сводится к следующему. Для устранения «зубов» на невертикальных/негоризонтальных линиях (например, при рендеринге векторного шрифта) оные рисуются, скажем, в два раза больше требуемого р-ра. Затем битмап уменьшается, при этом для квадрата 2х2 высчитывается среднеарифметический цвет, коим и закрашивается один пиксел результирующего битмапа. (Понятно, что этот простейший метод применим, если есть исходный вектор, который можно пересчитать на любой р-р, отрендерить и отантиалиазить. Но он хорошо иллюстрирует суть явления.)

Такой антиалиазинг происходит косвенно и в Фотошопе, например, при уменьшении битмапа — не спроста там есть разные опции «Bicubic», «Bilinear» и «Nearest Neighbor». Сим тоже использует более сложный — как мне показалось, еше и совмещенный с фильтром, типа метода «Ланчоса». Но суть от этого не меняется.

Отсюда вывод — нужно дать ему достаточно красивых, но самое главное — РАЗНЫХ (по цвету) пикселей. Тогда можно даже не заботиться об уменьшении битмапа идеально до нужного р-ра (тем более, что р-р этот, как правило, все равно разный для 2Д и ВК) — он вполне может быть больше и Сим сам справится с его уменьшением (вопрос эффективности пока оставим в стороне, т.к это все равно отдельная тема).

Это все — теоретические изыскания. А вот примерно так это выглядит на практике:

— шкалу рисуем в векторе и переводим в растр.(Судя по всему оптимальный вариант — Корел. У меня его под рукой не было — я взял «Пожмакер» и для перевода в растр просто увеличил на весь экран и сделал скриншот. Таким образом я получил большого р-ра битмап из 2х цветов — черного и белого — со всеми «зубами», которые возникают на экране.)

— в Фотошопе в слое со шкалой выделяем цвет фона и убиваем его — остаются только элементы шкалы — риски и цифры. Одним единственным цветом (в моем случае — белым).

— вниз подкладываем слой, залитый цветом фона шкалы.

— если хотим придать надписям/рискам объем (как это было в моем случаее — надписи оригинальной шкалы на фотке выглядят как бы выпуклыми) — задаем слою шкалы соответствующие «blending options» — «bevel and emboss» — «up/down» и т.д.

— объединяем слои шкалы и ее фона («merge down»)

— теперь не скупясь делаем Гауссовскую размывку «Gaussian blur»(Я делал три-четыре раза по 1,0).

— уменьшаем битмап до нужного р-ра («Bicubic»)

— полученный результат можно еще немного размыть, но совсем слегка (где-то 0,2 — 0,3)

— Готово! Вставляем в панель, предварительно конвертировав его из RGB в 128бит, и наслаждаемся результатами :blink:

На картинке оригинальный прибор уменьшен Симом в 2 раза. При этом шкала осталась довольно четкой и даже сохранился «объем» надписей.

Прикрепленные изображения

  • test.jpg


Ответов: 3

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

Отсюда вывод — нужно дать ему достаточно красивых, но самое главное — РАЗНЫХ (по цвету) пикселей

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

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

Позвольте с Вами не согласиться.

Приаттаченная картинка выполнена указанным способом (попиксельное уменьшение в 2 раза, наскоро сваял программку…) Венигрета не возникает — возникают артефакты, аналогичные тем, что возникают при компрессии JPEG на границах линий, но это уже совсем другая длинная ковбойская история :hmm1:.

И, потом, я не предлагаю именно этот метод использовать :). Он был описан для иллюстрации сути антиалиазинга, как такового.

П.С. Кстати, даже при этом (самом примитивном) методе… Сравните 2 _маленьких_ буквы «А». Левая размыта, правая отрендерена с родным фотошоповским антиалиазингом…

Прикрепленные изображения

  • res50.gif

Очень верные выводы.
В теории не силен, дошел до этого опытным путем. Практически ни одного элемента прибора не рисую без Гаусовского размытия. Особенно это относиться к стрелкам и шкалам. Для создания заготовки элементов прибора полезно сделать заготовку в два раза больше и залить чистым уветом. Потом оттекстурить мелко и уменьшить в два раза. Тогда на глаз текстура практически незаметна, но прорисовывается элемент лучше.

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

Степан