Я хотел бы сделать мою игру масштабированной с помощью одного из фильтров hqx (hq2x, hq3x или hq4x) или фильтра xBR в шейдере.
Как я могу сделать это в XNA 4.0 и SM3?
Примечание: этот вопрос был отредактирован, чтобы стать тем, чем он является сейчас.
hqxSharp
проекта, но, черт возьми, он медленный (о чем он предупреждает). Мне нужно что-то, что может поддерживать приличную частоту кадров.Ответы:
Вы можете уменьшить количество команд, используя векторные операции: например, вместо
ты можешь написать
Операторы в HLSL могут применяться к векторам, даже к логическим, например,
&&
к двумbool3
значениям. Эти операторы будут выполнять операцию компонентно.Код шейдера
Картинки
Исходное изображение по Redshrike было уменьшено на коэффициент 4.
источник
ir_lv1 = ((e != f) && (e != h));
ir_lv2_left = ((e != g) && (d != g));
ir_lv2_up = ((e != c) && (b != c));
Это хорошие оптимизации, которые я пропустил, но вы мне не понадобились для решения моей проблемы, потому что я смог уменьшить количество команд с помощью других оптимизаций.Я получил это работает. Он не использует фильтр hqx, он использует фильтр xBR (который я предпочитаю). Для меня это не проблема. Если вам требуется фильтр hqx, вам нужно преобразовать файлы .cg в их соответствующий эквивалент XNA.
В целях полноты и поиска я буду редактировать вопрос, чтобы сделать его более кратким, а затем размещать всю соответствующую информацию, чтобы ответить на вопрос здесь.
Шаг 1: Настройка игрового кода
Во-первых, вы, скорее всего, захотите установить цель рендеринга, в которой вы рисуете свою игру в масштабе 1: 1, а затем просмотрите фильтр.
Шаг 2: Файл эффекта
Ниже приведен XNA-совместимый файл эффектов для выполнения фильтра xBR.
Результаты
Текстура, которую я использовал для рендера 240x160:
Выход из запуска игры:
источники
Файл .cg, который я конвертировал в XNA-совместимый, пришел отсюда . Таким образом, кредиты идут к ним для написания этого.
источник