Генерируем пиксель арт
Окей, для пиксель арта характерно две вещи:
- Низкое разрешение (или имитация оного)
- Ограниченная цветовая палитра
Что у нас может делать stable diffusion:
- лучше всего генерирует на разрешении 512x512
- с помощью моделей, лор и остального, можем попробовать стилизовать как "пиксель арт"
В таком случае, мы можем сгенерить стилизованную под пиксель арт картинку, а затем каким-нибудь расширением подправить размер и цвета, так? Так. Давайте делать, только прежде два понятия:
- квантизация - процесс при котором мы уменьшаем количество цветов в изображении
- дизеринг - попытка изобразить цвет которого нет в палитре, теми которые в ней есть - используется для теней и градиентов
А теперь давайте быстренько пройдемся по расширениям, которые у нас есть:
- PXL8: скрипт, который использует nQuantCpp. Можем уменьшить картинку, есть много методов квантизации, ограничение цветов, включение/отключение дизеринга. В общем ок, но во-первых это скрипт и чтобы мне просто обработать картинку, мне нужно закинуть ее в img2img, поставить нулевой денойзинг и ждать, пока вся цепочка функций отработает ничего не делая и только потом отработает скрипт - это долго. Во-вторых, нет других цветовых режимов (черно-белого, градации серого или возможность закинуть свою палитру)
- pixel art: скрипт. Можем уменьшить картинку, выбрать метод квантизации и количество цветов, а дизеринг ставят за нас по умолчанию. Остальные недостатки те же, что и у предыдущего
- pixelization: добавляется в extras. Использует три сетки, чтобы обработать картинку. Можно только повлиять на размер картинки
- sd-pixel: добавляется в extras. Размер картинки, количество цветов и перевод в черно-белый - это все, что нам доступно. Ни выбора квантизации, ни выбора дизеринга
В целом все скрипты более менее с задачей справляются, но каждый по своему хорошо и по своему плохо, а иметь четыре расширения для решения одной задачи, как-то много. Ну, я человек простой. Написал свое расширение и засунул туда все, что захотел: sd-webui-pixelart
- Выбор количества цветов, методов квантизации и дизеринга + при добавил функцию для лучшего выбора цветов при квантизации (эта которая в конце, "Enable k-means for color quantization")
- Добавил несколько режимов: цветной, градаций серого, черно-белый и возможность закинуть свою палитру или просто фотографию и использовать цвета из нее
- Функционал в двух вариантах: скрипт - чтобы обрабатывать сразу после генерации, секция в extras - чтобы можно было быстро обработать отдельные фотки
Как пример, картинка прогнанная через pixelization и мое расширение
Так работают разные цветовые режимы
Хорошо, теперь технически у нас все готово, пришло время найти хорошую модель и погенерить. Но тут, к сожалению, все совсем плохо. То ли я не нашел, то ли действительно нет нормальных моделей для пиксель арта да и геймдева в целом. Есть хорошие рпгшные модели для всяких концепт артов, может найдется парочка лор для генерации ассетов, но по большей части толкового очень мало. Поэтому в двух словах о том, что накопал
Для всяких зелий неплохо подходит связка pixhell + gag-rpg-potions-or-lora-21
Для простенького пиксель арта подойдет rev-animated + mpixel lora (и вообще, это наверное лучшая лора, из тех, что есть)
Прикольные анимешные портреты получаются если использовать anything-v3 + pixel-art-style lora
Простенькие пейзажи можно сделать с помощью pixel-landscapes
Нейронки интересная и непростая штука, поэтому если хотите лучше в них разобраться, подписывайтесь на канал, там рассказываю как работать со stable diffusion
SD всё ещё не умеет в пиксельарт. Да и не научится никогда, потому что latent diffusion, апскейл и все дела. Вот Dalle-2 могёт, потому что там ничего этого нет. Зачем пытаться натягивать сову на глобус - решительно непонятно.
А как latent diffusion и апскейл мешает делать пиксель арт? Dalle-2 так то тоже диффузионная или дело в другом?
Мне кажется, с хорошей моделью может получаться вполне себе. Те же pixellabs и retrodiffusion свои модели сделали. Но если делать прям красиво, то по хорошему нужно изначально под другое разрешение модель делать, например под 64 и 128, а потом если нужно nearest'om интерполировать.
Пузырьки вышли плохо, а рыцари неплохо