Обновить
32K+
415
Александр Семенов@shiru8bit

Узкий специалист широкого профиля

145,4
Рейтинг
349
Подписчики
Отправить сообщение

На стационарных консолях как-то такой подход терпят же.

Это совершенно не быстро. Это 145 тысяч тактов, два с лишним полных телевизионных кадра. А переключение экранов на 128К требует один 12-тактовый out. И переключать экраны можно много раз за проход луча по растру, хоть каждые несколько пикселей, и это реально используется.

На NES типичный трюк — расширение VBlank, чтобы проталкивать в видеопамять больше данных. Экран в начале кадра не включаем, а включаем на X строк позже, и выключаем на X строк раньше. На Сеге никогда не пробовал, но теоретически тоже должно работать. В эмуляторе нужно 192 строки из 224, это неплохие лишние 32 строки времени на пересылки (стандартно 20 строк гашения), ещё 6 килобайт на кадр, если будет работать DMA. А оно должно.

И да, сетку нужно загонять и чистить от шума. Но это едва ли проблема учитывая вышеприведённые инструменты. Можно долго говорить на тему того что это всё не то. Но, без конкретных примеров увы, это опять предвзятость.

Во-первых, это проблема, потому что вышеприведённые инструменты не решают задачу, хоть unfake, хоть ноды в comfy. И аналогичные им самописные тоже. Попробуйте написать unfake без агента, своим умом, и наступит понимание, почему. Обе задачи в принципе не имеют полного алгоритмического решения, ни сетка, ни цветовая квантизация. Можно только сидеть, крутить параметры, и надеяться, что очередной выбранный алгоритм сохранит именно те пиксели и цвета, какие хочется. Единственное 100% рабочее решение, пригодное для производства, я озвучил: перерисовать собственными руками по сгенерированному референсу.

Во-вторых, примеры есть выше. Если откровенно не работает самая база, дальше рассуждать бессмысленно. В более детализированных изображениях есть те же самые проблемы, и они сильно хуже.

Для того, что ИИ давал хороший результат, нужно понимать, как выглядит хороший результат. Для генерации пиксель-арта нужно понимать философию этой культуры и уметь рисовать, чтобы сразу отличать хорошее от плохого. У большинства работает первое впечатление — о, это же так похоже на пиксели, ух как круто. Опытный глаз видит: нет, это не пиксели, это сплошной брак, технически непригодно для использования в реальных проектах.

У меня нет когнитивного искажения. У меня есть практический опыт применения этих инструментов в разработке. Я им поделился по состоянию на текущий момент. А у вас пока только аргументы по поводу моей предвзятости и неопытности.

Что именно из моих работ и с какими целями вы хотите увидеть? Это аргумент ad hominem, и вы очень зря на него рассчитываете. У меня нет предвзятого отношения, я активно пользуюсь всеми современными нейросетями во всех областях своей деятельности, там, где качество результата позволяет это делать. Нейросети пока не умеют генерировать настоящий пиксель-арт. Я писал об этом статью два года назад, и до сих пор мало что изменилось.

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

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

Нейросети генерируют результат из шума. В итоговой картинке присутствует шум. Даже если у вас там сплошные цвета, и картинка выглядит малоцветной, шум остаётся, на пару пунктов в пределах близких RGB-значений. Это очень мешает всем алгоритмам квантизации, которые из-за него не могут сделать оптимальную палитру. В результате в 16-цветном спрайте будет, например, 5 белых, а некоторые близкие цвета разойдутся дальше, и станут различимы глазом. И тогда надо делать не 16, а 256, И это критично, потому что мешает ручным доработкам — а доработки всегда нужны, замедляет их, что сводит на нет весь выигрыш во времени.

Нейросети не любят рисовать простые вещи. Они обязательно будут пытаться их усложнить непрошенным образом, и бороться с этим можно очень долго и упорно. Простой плоский ящик, например, как блок в Марио — самая базовая потребность пиксельной графики. Нейросети не могут его нормально рисовать. И в целом не могут нормально рисовать малоцветную графику, постоянно пытаются добавить больше цветов.

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

Примеры.

Grok Imagine очень хорошо рисует и реалистичную графику, и спрайты. Он хорошо разбирает запросы на человеческом языке, не нужно играть в игры с тегами, как в SD.

Он даже знает, что такое пиксели, и иногда, если распознаёт запрос именно пиксельной графики, будет пытаться рисовать её не как произвольную картинку, а в реальном пиксельном разрешении. А иногда не будет. Но простейшие вещи сбивают его с толку:

Знакомитесь, Ящик
Знакомитесь, Ящик

GPT Image-2 и Nano Banana в целом генерируют похуже, погрубее, труднее делает перенос стиля, зато быстро и дёшево. За счёт этого они иногда лучше справляются с такими простыми запросами. Но все проблемы, которые я описал, в наличии: полупиксели, не тот размер, изометрия вместо плоского изображения. Это постоянно воспроизводимый результат всюду.

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

Я покупал первый Свич ради ремейка Link's Awakening, который увидел ещё на Игромире 19-го года. До сих пор не нашёл времени пройти. Так что Окарине придётся подождать.

На первом Switch игр столько, что не пересмотреть за время жизни Вселенной. Поэтому во втором потребности пока не ощущаю.

Идея в том, чтобы 16-цветных тайлов стало меньше при том же количестве визуальной информации в них. Чтобы вливать 384 тайла вместо 768, например. Если бы это была чисто монохромная графика без цвета, в тех же 256 на 192, это было бы 6 килобайт вместо 24, что укладывается в один VBlank. Но как в такой схеме сделать цветовые атрибуты, мне придумать не удалось.

А что, если шарю? Например, сам писал «всякое разное» и очень хорошо понимаю проблематику запихивания нерегулярной сетки в регулярную и квантизации шума? А ещё и сам умею рисовать пиксель-арт, и понимаю разницу? В статье нет ничего, что хотя бы отдалённо было «качественным», ни с художественной, ни с технической точки зрения. Творческий диапазон? Ящик квадратный нарисуйте, удивитесь.

К сожалению, такая графика практически непригодна для использования в реальных пиксельных играх. Пиксели разного размера и формы, разрешение неизвестное и неуправляемое, количество цветов неопределённое и содержит дикий шум (попробуйте выкрутить контраст), сбивающий все алгоритмы уменьшения количества цветов. Для чего-то пикселе-подобного, работающего в HD-разрешении, это может и пойдёт, но даже в этом случае будет немало проблем с удалением фона вокруг спрайта. Пока ИИ неплох как генератор референса, но нормальные спрайты всё равно в итоге проще прорисовать руками, чем пытаться вычистить всё это.

Есть трюк с повторным использованием одного тайла для разных блоков малоцветной графики: в одном битплане один бит, в другом другой, и с разными палитрами в разных местах экрана отображается разная графика из одного и того же тайла. Если графика двухцветная, можно запихать 4 тайла в один 16-цветный. Но пока не удаётся придумать, можно ли выжать из этого подхода что-нибудь полезное для нужд эмуляции экрана ZX.

Примерно об этом и идёт речь в статье.

Слух-то он не режет, я много времени уделил FM-синтезаторам, где синус — это норма. Но когда придумывают вымышленный звуковой чип типа того же AY, у которого в базе вдруг синусоидальные генераторы, это показывает отсудствие привязки к техническим историческим реалиям. Синус сложнее всего получить в железе, это LUT, и ещё и мультиплексирование доступа к LUT, а гармонически это самый бедный тембр, какой только бывает (одна гармоника). Поэтому он редко встречался в чипах 1980-х, и поэтому не стал частью эстетики игровой музыки тех лет. Это всё тот же вопрос технической подоплёки, приведшей к рождению определённой эстетики.

Пожалуй да, неплохая аналогия. Ну и нормально, всё же главное в этом деле - получать фан. А махать при этом деревянными пикселями или настоящими стальными - не так уж и важно.

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

Справедливости ради, в «других» там есть несколько платформ хотя бы с вымышленными процессорами.

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

Как именно можно выключить ИИ-модель? Как определяется её состояние, включена она или выключена?

ЦАП на компьютерах появились, когда в их память не помещалось и секунды звука. Пофиг стало только в эпоху мультимедиа, когда появился CD-ROM.

Covox — это просто название самодельного простейшего ЦАП. Любая платформа, оснащённая звуковым чипом, автоматически содержит 4-битный ЦАП. Tandy CoCo имел штатный 6-битный ЦАП (и ничего больше). У NES был штатный 7-битный ЦАП, у Sega Genesis - 8-битный. Но никакой настоящий синтезатор, то есть бандура с клавишами, не поможет сделать для этих устройств музыку. Поможет только придумать, но играть её предстоит «ненастоящему синтезатору» — программному коду, который нужно ещё изобрести.

Музыку придумывают нотами. А писали, то есть программировали придуманное, в 1980-х как раз hex-кодами.

1
23 ...

Информация

В рейтинге
31-й
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

Разработчик игр, Разработчик приложений
Старший
От 9 000 $
Английский язык
C++
C
Программирование микроконтроллеров
Оптимизация кода
Разработка программного обеспечения
Системное программирование
Assembler