Техническая сторона вопроса интересна, за статью спасибо, плюсанул.
А вот всё нижесказанное ИМХО, конечно, но…
Сама идея использовать жуткие фильтры и эффекты вроде этого — ужасна-ужасна-ужасна-Ужасна-УЖАСНА. На реальном ЭЛТ-мониторе середины 90х картинка так не выглядела, это точно.
Обожаю старые игру, люблю двухмерную графику, но подобные фильтры, особенно неотключаемые — лучший способ отпугнуть игрока. Блин, у меня зрения и так не идеальное, я не хочу его ещё сильнее портить.
Пожалуйста, не калечьте графику. Не учите людей плохому. Эти картинки справа страшны во всех примерах. Не надо в играх такими убогими фильтрами ухудшать графику. Пожалуйста. Отличный же писксельарт на картинке. Пожалуйста. Не делайте так в реальных продутках. Если у вас пиксельарт — используйте его, не надо дубовых сглаживаний, мыльной картинки и издевательств над глазами игрока. Не надо фильтров. Не надо блумов. Не надо мыла. Как игрок прошу…
Обратите внимание на абзац в начале статьи. Я же специально сказал — надо юзать к месту. Например, если вы хотите сымитировать такой эффект в каких-то заставках и т.п. Заставлять юзера играть в таком на постоянку — не тру, согласен.
Просто, возможно, стоило бы показать применение шейдеров на красивом эффекте. Ну скажем рисование шлейфа за изображением и/или пульсация (см. Принц Персии — Пески Времени, момент отматывания времени назад).
Иногда подобные фильтры поверх пиксельной графики дают свой позитивный эффект на атмосферу. Пример - Lone survivor, где обычная пиксельная графика смотрелась бы хуже. Но злоупотреблять, конечно, не стоит.
Спорно и на любителя. Я в Silent Hill 2 дальше всегда вырубал эффект «шума экрана». Не знаю лично ни одного человека, кто бы его оставлял. Может на телевизоре он и смотрится хорошо, но на мониторе — дико на любителя.
А вот например эффект «потертой плёнки»+«не жесткий фильтр-сепия» из того же Nosferatu (игры) смотрится изумительно. Но опять же, отключается.
Давно делаю игры, очень люблю это. Но часто вижу такое вот «не калечьте графику»… Ну блин, вот это мое творение, можна сказать произведение моей фантазии, стрим моего мира. Это как пойти к Ван Гогу, и сказать «Ну че ты краску переводишь, давай рисуй реалистично, а не эту размазню. Можешь ведь!» Я не говорю что игры над которыми я работаю в одной линейке с его произведениями, но чувствую я о них не меньше.
Тут должна бить какая-то такая картинка: i.imgur.com/3Y4eCy1.png
Заводим текстуру, например такую
Настраиваем текстурные координаты так, чтобы она репителась столько раз, сколько разрешение «ЭЛТ-монитора» и просто умножаем выборку из нее, на выборку из текстуры кадра (возможно с неким коэффициентом).
В Unity есть одна не очевидная вещь, которой можно проверять производительность шейдеров. Откройте собранный шейдер и найдите вот такие строки:
Program «vp» {
// Vertex combos: 1
// opengl — ALU: 8 to 8
// d3d9 — ALU: 8 to 8
и
Program «fp» {
// Fragment combos: 1
// opengl — ALU: 7 to 7, TEX: 3 to 3
// d3d9 — ALU: 6 to 6, TEX: 3 to 3
Здесь отображается количество циклов ALU, затраченное на обработку каждой вершины и пикселя соответственно. Таким образом можно сравнить разницу между вашим методом и методом, предложенным в комментах. Это скорее к вашей разработке, чем к статье, поскольку каждая операция сложения, умножения, функция cg, особенно в фрагментных шейдерах, делает ваш шейдер тяжелее.
Простите но этот фильтр создает иллюзию не ЭЛТ дисплея а дешевого STN экранчика. Я помню у меня был Sony Ericsson T630, так вот там примерно такая же картинка была.
ЭЛТ характерна искажниями и иным расположением субпикселей относительно ЖК.
Для эффекта ЭЛТ я бы сделал немного иное. Выгнул бы бикубиком изображение, чтобы ближе к углам изображение было скругленным и попытался бы эмитировать RGB триаду. На ЭЛТ пиксели стояли триадами.
RBRBRBRB
_G_G_G_G_
RBRBRBRB
_G_G_G_G_
Соотвественно такой алгоритм, как здесь, делает скорее старые сименсовые мобильники, нежели ЭЛТ.
Создание игры на ваших глазах — часть 2: Шейдеры для стилизации картинки под ЭЛТ/LCD