Адаптивное обновление плитки — это технология компьютерной графики для видеоигр с боковой прокруткой . Наиболее известное применение этой технологии Джоном Кармаком из id Software в таких играх, как Commander Keen, для компенсации низкой графической производительности ПК в начале 1990-х годов. Ее основное новшество — это новое использование нескольких аппаратных функций EGA для выполнения прокрутки на оборудовании. Технология названа в честь другого ее аспекта — отслеживания перемещенных графических элементов с целью минимизации количества перерисовок, необходимых в каждом кадре. Вместе эта комбинация экономит время обработки, которое в противном случае потребовалось бы для перерисовки всего экрана. [1] : 50 Кармак разработал программный движок на основе прокручиваемого дисплея для больших изображений из 1970-х годов. [2]
Поколение графики IBM PC, предшествующее EGA, — это CGA , в котором отсутствуют возможности для прокрутки на аппаратном уровне. Поэтому прокрутка CGA выполняется программно, путем перерисовки всего экрана для каждого кадра, для чего таким системам не хватает производительности для полноэкранной анимации. Адаптивное обновление плиток минимизирует вычислительную мощность, необходимую для игр с боковой прокруткой, чтобы быть в пределах досягаемости современного оборудования. Это работает путем пометки растровых плиток и перерисовки только той графики на экране, которая фактически обновляется. [3]
Адаптивное обновление плитки с использованием аппаратной прокрутки дебютировало в неизданном прототипе игры Dangerous Dave в Copyright Infringement , реализованном Кармаком. Название « Dangerous Dave » ранее использовалось Джоном Ромеро при программировании игр для Softdisk . Это было разработано в течение одной недели как воссоздание первого уровня Super Mario Bros. 3 от Nintendo , задуманное как реалистичный прототип концепции адаптивного обновления плитки. Затем команда будущих сотрудников id Software, все еще работающая в Softdisk, завершила реплику всей игры, которая была представлена Nintendo для лицензирования для ПК. Nintendo отклонила предложение после того, как id Software закончила прототип. [4] [5] [1]
Впервые адаптивное обновление плиток Кармака было реализовано в первой части серии игр Commander Keen от id Software — Marooned on Mars .
EGA имеет несколько функций, которые обеспечивают эффект адаптивного обновления плитки:
Кармак использовал эти возможности для создания буфера, который на 64 пикселя шире и выше экрана, оставляя место для двух дополнительных строк и столбцов плиток в буфере за пределами края экрана. Он использовал возможности смещения карты, чтобы экран мог скользить через буфер для плавной прокрутки, которая частично раскрывает дополнительные плитки.
Когда видимая часть достигает конца буфера, позиция буфера смещается назад на одну плитку, а измененные плитки перерисовываются. [6] Это сделало технику зависимой от повторения плиток, чтобы ограничить количество перерисовываемых плиток. [7]
Другая версия техники, представленной в Commander Keen в Keen Dreams, оборачивает память EGA, чтобы отображать данные с другой стороны буфера. [7] Чтобы прокрутить весь уровень, когда прокрутка достигает значения целой плитки, следующая строка плиток с уровня затем рисуется в буфере, сразу за краем экрана, готовая к отображению, когда прокрутка продолжится в этом направлении.
Поскольку в любой момент времени перерисовываются только края экрана, спрайты в видимой части экрана не будут перерисовываться, пока не достигнут края экрана. Чтобы противостоять этому, код вычисляет, какие плитки ранее покрывал движущийся спрайт, и перерисовывает их, чтобы стереть старое изображение спрайта, а затем рисует новое изображение спрайта в его новом положении. Это позволяет анимировать спрайты независимо от прокрутки с минимальными вычислительными усилиями.
Поскольку перемещение спрайта таким образом включает в себя его стирание, а затем перерисовку, изображение стертого спрайта может быть видно на короткое время, вызывая мерцание. Последняя часть техники Кармака заключается в использовании тех же аппаратных функций прокрутки EGA для реализации двойной буферизации . Это устанавливает второй буфер, в который код может рисовать, пока отображается первый буфер, который затем отключается во время обновления экрана. Это гарантирует, что ни один кадр не будет отображаться во время отрисовки, что обеспечивает плавную анимацию без мерцания.