вторник, 22 мая 2012 г.

GIMP стили / композиции слоев - мой концепт, проект, примеры!

Всем привет!

Решил поделится своими концепциями (мыслями) относительно написания патча "Эффектов слоя" для Гимпа 2.8.х . Работа это будет сложная и долгая, поэтому хотелось бы знать мнение пользователей Gimp, т.е. Вас! Стоит ли мне заморачиваться!? Насколько он вам нужен и будите ли вы пользоваться этим патчем вообще  (может только я использую гипм в веб-дизайне)?

Ниже я расскажу и покажу, как будут устроены стили/композиции (наборы эффектов) слоев, как ими управлять из списка слоев. Как будет выглядеть окно редактирования эффектов и т.д. ... Поверьте, ни чего общего со стилями в Фотошопе! Это будет более мощно и удобно и намного круче чем ФП! Но... устроит ли вас предложенная мной концепция реализации стилей слоев? Возможно у вас возникнут вопросы и/или замечания!? Я с удовольствием на них отвечу и приму ко вниманию ваши замечания. Пожалуйста, не стесняйтесь, оставляйте ваши драгоценные соображения в комментариях, я очень на них рассчитываю!



Немного об истории проекта

Начну с того, что пользуюсь Гимпом давно и очень часто, как правило для создания  несложных макетов сайтов, а так же отдельных элементов - веб-виджетов, и все время ощущаю нехватку такого привычного для Фотошопа инструмента как "эффекты или стили слоев"! И самое обидное, что ждать его в Гимпе еще очень долго, в лучшем случае в версии 2.10 релайз которой неизвестно когда :(
Можете сами ознакомится в планами разработчиков Гима: http://wiki.gimp.org/index.php/Roadmap

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

Если вам интересно, вот несколько примеров работы этого плагина (GLS):

Работая над плагином я пытался сделать его как можно удобнее в работы и как можно более гибким в настройках. Когда плагин был готов примерно на половину я уже четко представлял какой я вижу систему эффектов в Гимпе в идеале и, что из этого можно реализовать в плагине.
Разрыв межу желаемым и возможным был огромен! Энтузиазм с которым я начинал разрабатывать плагин угасал и я все сильнее ощущал, что трачу время зря.  В конце-концов я психанул! Скачал исходники гимпа и настроил проект  в Eclipce. С этого момента только патч стал реальным решением проблемы, иначе ни как!

Эра Гимп-хакинга.

Я слышал о том, что каждый желающий может написать патч для Гимпа и со временем его возможно включат в релиз. "Почему-бы и мне не попробовать!?" - подумал я, и попробовал -  написал небольшой патч добавляющий кнопочку фиксации перемещения слоя.
Подробнее см. здесь:  https://plus.google.com/u/0/111325993383249883915/posts/KF1oPz62yTE

Конечно не все прошло гладко и мой засабмиченый на багзилу патч был весь исчеркан, причем не из-за ошибок в коде, а от замечаний касающихся лишних пробелов, пустых строк и оставленных мною технических комментариев! А чего стоило освоить работу с git-ом, но это отдельный разговор!

Как бы там ни было, за два месяца ковыряний в исходниках, я более-менее разобрался с устройством Гимпа и вник в особенности работы с opensource. Так же в течении это времени я общался с разработчиками в IRC конференциях и пристально следил за разработкой версии 2.9.x, чтоб как можно лучше понять чем "живет" сообщество и каковы их планы.

Сейчас могу сказать, что с задачей написать систему управления эффектами слоев я справлюсь, хоть будет это сложно, о-о-о-очень сложно! Так-же знаю о том, что разработчики Гимпа не планируют добавлять никакие новые функции в версию Гимпа 2.8 (даже мой крохотный патч с дополн. кнопочками фиксаций). Так-же известно, что сейчас все силы сообщества брошены на "допилку" интеграции GEGL в Гимп т.к. это на прямую связано с поддержкой 16/32 цвета.  И судя по последней сборке Гимпа 2.9, работы у них на год, минимум!

Из выше сказанного получается, что если я даже напишу патч, то все равно он не будет добавлен не в один из ближайших билдов! Обидно, конечно, но есть решение - не официальный патч. Можно обустроиться на гитхабе - где будут выложены исходники для тек кто умеет компилить гимп. Для всех остальных и особо ленивых - время от времени выкладывать сборки обновлений Гимпа с патчем в виде .deb/.rpm пакетов. Для пользователей Windows (которых очень много!) выкладывать exe-ки под 32/64бит.

Еще проблема - с версии 2.9 произошел переход на GEGL и идет активный "допил, который влечет за собой очень серьезные изменения в коде (например выброшены исходники composite-операций (режимы смешивания слоев) и заменены на operations которые работают на GEGL) . Возможно (хотя я очень сомневаюсь) эти изменения затронут и версию 2.8 в части GEGL операций. Плюс, было бы правильным к моменту появления более менее стабильного билда 2.9 иметь и для него вариант патча.
Из выше сказанного, получается, что патч должен покрывать особенности legacy-rendering механизма, текущего GEGL рендера и нового, реализованного и активно меняющегося в ветке 2.9!

Конечно, на два стула "одним местом" не сядешь, если только эти стулья не поставить вместе!    Я имею ввиду - продумать устройство стилей слоев так, чтоб оно минимально затрагивало функции рендера и по возможности было реализовано в рамках объекта GimpLayer.  А так-же реализовать функций эффектов на уровне по-плиточной/по-пиксельной обработки. Но это конечно все в очень общих чертах ... :)

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

Вопрос о том, как к патчу отнесутся разработчики Гимпа, остается открытым. Я не начну работу, пока с ними не переговорю на эту тему. Хотя вряд ли это будет конструктивным разговор - они слишком заняты работой над веткой 2.9. (возможно их разозлит, что вместо того, что-бы помочь решить текущие проблемы, я пытаюсь опередить время и писать не планируемое ими дополнение... а возможно и нет...)

-------------------------------------------------------------------------------------

Концепция "Стилей"

Эффекты слоев в GIMP


Ну а теперь, когда вы знаете предысторию и имеете представление об ожидающих сложностях, позвольте рассказать и показать, собственно то ради чего, все это :)

Для начала окончательно определимся с понятиями - "стили" и "эффекты" слоя исходя из моей концепции:

  • Стиль слоя -  примененный набор эффектов к выбранному слою.
    Стиль имеет название, может быть импортирован в файл или быть встроенным в документ Гимпа. Стилей может быть как угодно много.
  • Эффект слоя - часть стиля слоя.
    Существует ограниченный набор эффектов, которые доступны для определенной версии Гимпа. Эффект не может быть сохранен отдельно, а только в составе стиля. Базовый набор эффектов: 
    1. Bevel ad Emboss - фаска и рельеф
    2. Color Overlay - заливка сплошным цветом
    3. Drop Shadow - отбрасываемая тень
    4. Gadient Overlay - заливка градиентом
    5. Inner Glow - внутренние свечение
    6. Inner Shadow -    внутренняя тень
    7. Outer Glow - внешнее свечение
    8. Pattern Overlay - заливка текстурой
    9. Satin - сатин
    10. Stroke - обводка

И так начнем ...
Эффекты  будут добавляться к слою кнопочкой , которая расположена на панели кнопок под списком слоев. Для индикации слоев со стилями предусмотрена иконка (1) справа он названия слоя, рис. 1.a:

рис. 1.a

Двойной клик по этой иконке разворачивает список эффектов (2) под выбранным слоем.  Двойной клик по имени эффекта открывает этот эффект в редакторе.

Редактор стилей/эффектов состоит из списка эффектов слева и области с настройками эффектов справа.  Примечательно то, что вы можете добавльть несколько одинаковых эффектов с разными настройками, если этого требует композиция. Так же вы  можете управлять порядком эффектов применяемых к слою.
Свободный набор эффектов и управление порядком их применения в стиле слоя - основная особенность отличающая стили слоев Гимпа от Фотошопа.  см. рис:

рис. 1.b

  1. название слоя к которому применяется стиль
  2. имя стиля
  3. кнопка сохранения стиля в файл (экспорт стиля)
  4. настройки выбранного эффекта (fill color)
  5. список эффектов входящих в стиль
  6. иконка временного вкл./откл. эффекта
  7. кнопка добавления эффекта в список с выдающим меню (12)
  8. дублирование эффекта
  9. "растрирование" стиля
  10. изменение позиции эффекта в списке
  11. удаление всех эффектов
  12. меню выбора доступных эффектов

Здесь же, в редакторе эффектов вы можете сохранять стили в файл .lfx, - этот файл будет считаться файлом стилей-слоев. Сохраненный стиль может быть импортирован и открыт любым другим пропатченным гимпом.

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

Для быстрого просмотра библиотеки стилей, а так-же встроенных стилей предусмотрен дополнительный диалог с палитрой имеющихся стилей:


рис. 1.с

  1. Образцы стилей
  2. Отображение библиотечных стилей
  3. Отображение стилей примененных к документу
  4. Импорт стиля из файла
  5. Удаление стиля (только для библиотечных стилей)
  6. Обновить список стилей


Палитра стилей, редактор стилей/эффектов и дополнительный список эффектов в списке слоев Гимпа - вот пожалуй основные элементы пользовательского интерфейса для управления стилями слоев.

Однако это еще не все, далеко не все, что я хотел вам предложить! Читайте дальше ....


-------------------------------------------------------------------------------------

Концепция "Композиций"

Долой стили! Да здравствуют композиции!!! 


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

Если постараться абстрагироваться от понятия "Стили слоев" и задуматься лишь об эффектах как об операциях которые можно применять к слоям, и учесть тот факт, что Гимп уже перешел на нодовый GEGL, то в таком свете мне видится более прогрессивный инструмент, чем фотошопо-подобные стили, а именно - композиции слоев.


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

Что касается редактора композиций, то это уже не линейный список эффектов, а нодовый редактор! На подобии редактора нодов Блендера, только ноды доступны в пределах слоя, а не всего изображения, как это принято в нодовых редакторах.

Кода вы решаете добавить к слою композицию, вам открывается редактор нодов выбранного слоя, с двумя базовыми нодами (эти ноды нельзя удалить) - Layer и Render. Если слой видимый, но между Layer и Render будет связь - выход Layer на вход Render. Вы можете разорвать эту связь, тогда слой станет не видим (попадет глазок в списке слоев).
рис. 2.а

 Чтоб добавить например эффект обводки, необходимо добавить нод эффектов типа Stroke и вставить его между Layer и Render. Таким же способом вы можете добавлять цветовую коррекцию: Тонирование, Контраст, Насыщенность и т.д. ... Или одновременно и цвето-коррекцию и эффекты. Причем вы можете сами управлять, что после чего будет следовать!

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

Диалог палитры композиций такой же как и для стилей (рис. 1.с), меняется только ее название со Styles на Compositions.

Вот как примерно, будет выглядеть редактор нодов:

рис. 2.b


  1. Базовый нод слоя
  2. Нод цвето-коррекции и эффекта обводки
  3. Базовый нод рендера
  4. Выпадающее меню доступных фильтров (шум, фрактал и т.п. ...)
  5. Выпадающее меню доступных цвето-коррекций
  6. Выпадающее меню доступных эффектов
  7. Растрирование композиции
  8. Форма сохранения композиции в файл .lfx
  9. Удаление композиции
Во всем остальном композиции схожи со стилями. Основное различие лишь в способе редактирования - через нодовый редактор и большей гибкости.

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

Вы вероятно заметили, что ни чего не мешает в редактор стилей добавить возможность использовать цвето-коррекцию и фильтры. Тем, не менее я пишу, что это можно реализовать только в композициях. Естественно возникает вопрос почему!? Ок, я попытаюсь на него ответить...  
Дело здесь не столько в технических проблемах, сколько в функциональной логике. Как то тупо создавать стиль который будет изменять насыщенность цвета и еще более тупо искать к какому из слоев мы добавили цвето-коррекцию, когда мы видим только стили. Тут следует разделить функциональность инструментов - пусть стили добавляют только эффекты, а цвето-коррекция изменяет цветовые характеристики изображения слоя. 
В дальнейшем можно написать отдельный патч который будет добавлять к слоям только цвето-коррекцию. Добавить к списку слоев иконку, сигнализирующею о том, что к слою была применена цветовая-коррекция. Такой патч будет на 80% повторять патч стилей, однако добавлять новый функционал - цветовую-коррекцию слоев. 
Другое дело инструмент под названием "Композиция", он подразумевает более обширные действия над слоем, а редактор нодов упрощает роботу со сложными эффектами и цветом.
Надеюсь вы уловили, что я имею ввиду!


Плюсы и минусы стилей и композиций

Последнее на чем хочу остановится - видимые мной достоинства и недостатки каждой и описанных выше концепций.

  • Стили

    • Плюсы:
      • Простота в использовании
      • Схожесть со стилями PS
      • Функциональная объеденёность операций (только эффекты)
      • Проще в реализации чем композиции
      • Возможность использовать уже для версии 2.8 (не использует GEGL на 100%)
    • Минусы (по сравнению с композициями)
      • Меньшая гибкость
      • Поддержка только эффектов

  • Композиции

    • Плюсы
      • Высокая гибкость
      • Высокая эффективность
      • Решение сразу двух проблем - эффекты и цвето-коррекция слоев.
      • Уникальность - редактор нодов слоев, где такое есть еще?
    • Минусы
      • Высокая сложность в реализации!!!
      • Требует полную поддержку GEGL (только для Гимпа 2.9 и выше)


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


1 комментарий:

  1. Идеи хорошие! можно было бы уже в далеком и прекрасном будущем совместить ноды гимпа с блендеровскими, хоть это и не имеет почти смысла, но если и говорить о возможном экспорте, то в блендере так называемый графический редактор потусклее будет, мне кажется это и пытались сделать адобы в cs4 фотошопе, текстурирование и наложение своих эффектов через fbx и obj, хотя может и не так все было. Gimp крутая прога, пользуюсь с тех пор как перешел на Linux, тогда же не сразу , но и на гимп перескочил. Его стоит развивать, удачи в диалоге с проектом Gimp, если все получится с радостью заценю плагин а то и официальный инструмент гимпа.

    ОтветитьУдалить