нейросети + херофордж = обложка с нужной позой (фурри, 18+)
Автор: wayerrВообще народ просто фигачит картинки с нейросетей на обложки, но что если нам нужен не просто описанный персонаж, а в какой-то специфической позе, с наклоном головы и т.п.?
Допустим нужна хмурая лиса с горящими неоном глазами, когтями, сидящая в полоборота (или три четверти) на футуристичном ящике. Зачем? Ну вот так захотелось чтобы было на обложке.
Это элементарно. Понадобится stable-diffusion и к нему два расширения: СontrolNet, openОutpaint. (Как их ставить, рассказывать не буду, так как ставил наверное год назад и уже сам не помню.)
Берём в херофордже накидываем персонажа:
Красиво до жути, не так ли? (Раскраска такая не шутки ради.) И лёгким движением нейросети получаем:
Правда ведь очень похоже? Не отличить. Можно лепить надпись и вуаля, обложка готова.
Теперь кратенько расскажу, что входит в вышеупомянутое лёгкое движение.
1. В херофордже надо набросать персонажа в заданной позе. Лучше конечно в блендере (или в чём умеете), для себя по крайней мере я бы делал в блендере, но интересно было использовать именно наименее подходящий инструмент.
2. Делается скриншот этого безобразия. Делать его наверное стоит разрешением не меньше, чем генерируемое изображение и желательно квадратным (меньше потом приключений, хотя нейросеть и такое съест). Скрин в посте первой картинкой, повторять его не буду на ночь глядя.
3. Скрин передаётся в Control Net - это расширение к stable diffusion. Вот как это выглядит на скриншоте из webui:
Нюанс в том, что не все методы определения границ (Control Type) корректно распознают скрин фигурки. Особенно важно чтобы были верно распознаны кисти рук - с ними больше всего мороки, как обычно. В случае фуррей, сложности добавляет хвост и лапы. Потому тут используется такая окраска, чтобы части тела не сливались. Кроме того руки не лежат, а висят и кисти "повёрнуты" так чтобы нейросеть их лучше видела. Потом при генерации она сама их положит как надо (если узнает, потому это важно). Ещё обратите внимание на "preprocessor resolution".
Если у вас референс точно соответствует нужной анатомии, то есть например взят рендер из блендера, на который просто хочется "натянуть" фактуры, то вышеозначенные хитрости могут и не понадобиться. Но в херофордже ещё и пропорции тел немного далеки от привычных, потому нейросети надо давать некую свободу для "укладки" фигуры, а потому нужно отпускать вес (control weight на скрине). Из-за этого если рука или хвост плохо распознаётся, то всё может "поплыть".
4. Выбираем модель под нашу задачу и составлем prompt. Так как для фуррей приличных (если вы понимаете о чём я) моделей нет, то называть их я тут не буду. Тем более вы же наверняка будет генерировать что-то другое. Как составлять prompt написана куча постов в сети, тем более что это достаточно специфично под каждую модель, потому я тоже это описывать не стану.
У меня был вот такой промпт (смесь тегов и просто текста):
anthro, (fox), female, fox sitting on a (transport-case), canine, fur_tuft, (fluffy:1.2), fur, ginger hair, (bangs), (hand on leg), (blue nails:1.2), blue claws, neon, (finger claws:1.2), (glowing claws:1.2), (4 toes), (fingers), (humanoid hands:1.2), (5 fingers), (teeth), (fangs), glowing scifi shorts vest, (glowing eyes:1.3), (blue eyes:1.2), barefoot, (red fox), angry, angry_eyes, evil grin, martian desert, futuristic hitech scifi background, bright, evening, sunset, detailed background, hi res, by ..., by ...
Negative prompt: text, comic, sun, chair, bag, black claws, black nails, handpaw, open mouth, {...}
Steps: 40, Sampler: DPM++ SDE Karras, CFG scale: 10, Seed: ..., Size: 768x768, ControlNet 0: "Module: softedge_pidinet, Model: control_v11p_sd15_softedge [a8575a2a], Weight: 0.6, Resize Mode: Crop and Resize, Low Vram: True, Processor Res: 1024, Guidance Start: 0, Guidance End: 0.3, Pixel Perfect: False, Control Mode: My prompt is more important", Version: v1.6.0
Итак, нейросеть сгенерировала мне три картинки (это размер батча, больше в 8GiB видяхи не влезает):
Тут как видно три лисы куча типичных глюков нейросети, маленькое разрешение (хотя для обложки хватит, но пропорции не те) и т.п.
5. Выбираю подходящий вариант и делаю разрешение побольше через img2img встроенный в stable diffusion:
Ресайз через img2img заметно меняет картинку, так что там надо ковыряться в параметрах и быть осторожным, я немного промухал и потерял кусок ящика, получил лишний хвост и т.п. Тут как обычно можно пробовать разный seed - и выбрать наиболее подходящий вариант. А можно и prompt поменять. Так, например, при генерации акцент на клыках даёт клыки змеиной длины, а вот тут, при ресайзе, тот же акцент рисует нормальные клыки (но если они уже "змеиные" то только мешаются).
6. Следующий шаг нашего "лёгкого движения" - outpaint. Эдакий дорисовыватель. Который позволит получить длинную картинку с разрешением больше чем позволяет видеокарта. Тут снова пришлось подбирать prompt, но может подошёл бы и старый. Так как я пользовался первый раз, то даже простая задача "удлинить ночное небо" у меня получалась не сразу. Модель то не для этого. Тем не менее, я нашёл не очень явную для меня причину проблемы - дорисовывать надо было буквально по одному рядку иначе нейросеть "теряла" контекст и рисовала никак несвязанные куски. По идее для этого есть специально обученные модели, но не факт что они подошли бы под эту задачу.
Дорисовывание удобнее делать в режиме "dream" и выглядит это так (в правом верхнем углу рисунка дорисовывает рядок с зелёным "индикатором прогресса"):
Модель заточена под 768пикселей, потому я рисовал такими квадратами. Другие размеры давали результат похуже.
В итоге получается вот такая картинка (фиговину в левом верхнем углу оригинала я убрал прямо в процессе дорисовывания):
В принципе если бы не проблема с ящиком, то можно было бы уже на обложку. Может она просто подогнула большой палец? А "подпись нейросети" в звездном небе всё равно никто не заметит.
7. Это всё исправляется. Для этого я использовал режим inpaint. Оный есть и в стандартном stable diffusion, так что тащить ради него расширение не требуется, но в расширении удобнее.
Исправляем ящик. Белым - маска. Ну и промпт тут снова меняется:
Исправляем большой палец:
Тут плохо видно, но на месте большого пальца в тени небольшая маска. Ну и промпт снова иной (не знаю, влияет ли это, проверять уже было лень).
Ну и итог можно показать снова:
Вот так вот лёгким движением...