Как разобраться с кистями в Фотошопе и начать жить

В чем проблема?

Несколько лет я рисовал в Corel Painter, мне вполне хватало пары кистей и все было хорошо. Потом я перелез в Ps и кисти стали без моей воли копиться в угрожающем количестве, причем реально нужны были из них ну максимум процентов 5.

fcb9ad3f8b6c6efc505ecЗнакомое многим чувство

Фотошоп — универсальный комбайн, он может делать всё, но с разной степенью кривоты. Он совсем не идеален для рисования, и организация кистей — одно из самых слабых мест. Хоткеи можно вешать почти на что угодно, только не на кисти. Кисти можно хранить в Brush presets, где всё, что у вас есть, выводится одним списком. Вы не можете разложить кисти по папкам, не можете выделить их цветом, не можете присвоить теги, категории, отсортировать их хоть как-то.

Что может нам предложить бессменный лидер индустрии кроме ковыряния в бесконечном списке пресетов?

1d9ac89e1b1126abb16f7И это я просто загрузил пару брашпаков разных художников

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

Что с этим можно сделать?

1. Для начала выбираем кисти, которыми вообще пользуемся хоть когда-то и сохраняем в Tool Presets. У меня таких набралось около 70.

e92d906257fc3e60cc283

Почему не хранить кисти прямо в Brush presets? Любой добавленный брашпак будет засорять ваши сохраненные кисти и вы никак не сможете их отсортировать.

2. Назначаем хоткей для меню Tool Presets, (у меня F1, например) и вызываем список, когда вам удобно. Такого приема мне хватало пару лет, но как-то я посмотрел мастер-класс Сергея Рыжова, где он, среди прочего, рассказывает, как у него организованы кисти. Оказалось, на любой тулпресет можно повесить экшн с хоткеем.

Назначаем кнопки на любые отдельные пресеты.

Под экшны в Фш выделены только клавиши F2-F12, Ctrl и Shift. Таким образом, теоретически мы можем назначить хоткеи на 48 кистей (на самом деле чуть меньше, что-то занято системой и самим ФШ).

Как это делается:

b383c1e71901bddfe339c

Мы получили нужные хоткеи, но тут есть две проблемы.

1. Мы можем назначить много сочетаний, но как запомнить, что где? Я выбрал по три кисти со схожими свойствами и сгруппировал их по папкам на каждой функциональной кнопке. Так у кистей появились категории.

0f95d3ce347d931498f2a

Те кисти, которыми пользуемся постоянно (у меня таких 3-4), вешаем под левую руку на кнопки без модификаторов (F2-F5). Хоткеи для остальных кистей выбираем по тому же принципу — чем чаще пользуемся кистью, тем удобнее для руки выбираем хоткей.

2. Может и бывают люди с руками-лопатами, но мне, например, прожать Ctrl+Shift+F12 одной левой рукой практически нереально, а жать двумя не очень удобно, по времени быстрее тыкнуть курсором в список. Такой проблемы нет, например в 3D-Coat, где любые хоткеи стакаются и на одну кнопку можно повесить сколько угодно команд. Было бы идеально повесить по три кисти на клавишу и быстро прожимать по одному, два или три раза, чтобы вызвать нужную кисть. И вот как это сделать.

Autohotkey. Вешаем по три кисти на одну кнопку.

До текста Олега Краснова про Autohotkey для приложений я думал, автохоткей это что-то для читеров в доте и макросников в BF3. У меня нулевые навыки программирования, поэтому я попросил братишку-погромиста написать мне нужный скрипт, который бы подменял, например, двойную F2 на Ctrl+F2, тройную — на Ctrl+Shift+F2 и так далее.

Вот такой скрипт он мне прислал:

; Helper functions

HandleMultiplePresses(pressHandlerNames*) {
 Recurse:
 keyPresses += 1
 strippedHotkey := StripHotkeyModifiers(A_ThisHotkey)
 KeyWait, %strippedHotkey%     ; Wait for KeyUp. 
 KeyWait, %strippedHotkey%, D T.12 ; Wait for same KeyDown or .12 seconds to elapse.
 keyPressedBeforeTimeout := (ErrorLevel = 0)

 If (keyPressedBeforeTimeout) {
  Goto, Recurse
 }

 Return pressHandlerNames[keyPresses]()
}

StripHotkeyModifiers(hotkeyToStrip) {
 ; from https://autohotkey.com/board/topic/32973-func-waitthishotkey/
 RegExMatch(hotkeyToStrip, "i)(?:[~#!<>\*\+\^\$]*([^ ]+)( UP)?)$", Key)
 Return Key1, ErrorLevel := (Key2 ? "Down" : "Up")
}

; Logic itself

#IfWinActive ahk_class Photoshop

 SendHotKey() {
  Send, {%A_ThisHotkey%}
 }

 SendCtrlHotkey() {
  Send, ^{%A_ThisHotkey%}
 }

 SendCtrlShiftHotkey() {
  Send, ^+{%A_ThisHotkey%}
 }

 F2:: HandleMultiplePresses("SendHotKey", "SendCtrlHotkey", "SendCtrlShiftHotkey")
 F3:: HandleMultiplePresses("SendHotKey", "SendCtrlHotkey", "SendCtrlShiftHotkey")
 F4:: HandleMultiplePresses("SendHotKey", "SendCtrlHotkey", "SendCtrlShiftHotkey")
 F5:: HandleMultiplePresses("SendHotKey", "SendCtrlHotkey", "SendCtrlShiftHotkey")

#IfWinActive

Часть кода взята вот с этого форума. По сути наш скрипт — просто .txt файл, которому мы вручную присваиваем расширение .ahk. Мы можем сами редактировать в блокноте текст после строчки ; Logic itself, назначая нужные для себя кнопки и сохраняя .ahk-файл. Я, например, добавил кнопки с F1 по F12.

Как сделать, чтобы все работало.

1. Качаем экзешник автохоткея 1.1.28 c оффсайта и устанавливаем, куда нам удобно.

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

ccc61781880b305bbbbc2

3. Нажимаем кнопки в фотошопе, рисуем, радуемся. При этом, нет никакой разницы, где лежит скрипт, где лежит автохоткей, что запускается первым, Ahk или Ps.

Чтобы каждый раз не запускать, я добавил ярлык скрипта в папку автозагрузки: Win+R/shell:startup 

Или если вам совсем лень возиться со скриптами, вот .exe с кнопками F1-F12, который я для себя скомпилировал (ох, надо было бы туда майнер встроить).

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

Автор: Сергей Кузьмич