Спрайт

Материал из SpeccyWiki
Перейти к: навигация, поиск

Спрайт (англ. Sprite) — в компьютерной графике объект, перемещающийся по экрану. В играх спрайтами являются изображения героя, противника, различных подвижных предметов. Фон также может состоять из подвижных или неподвижных спрайтов, если они имеют одинаковый размер и расположены на равномерной сетке, они называются "тайлами" (англ. Tile, плитка).

На игровых консолях и большинстве домашних компьютеров конца 1970-х — начала 1990-х спрайты поддерживаются на аппаратном уровне и выводятся видеоконтроллером поверх изображения фона. Это позволяет очень быстро "выводить" спрайты в нужное место экрана, просто указав координаты, а также избавляет от необходимости восстанавливать фон под спрайтом. Недостатком такого подхода является большое количество непреодолимых ограничений, налагаемых на количество отображаемых спрайтов на экране и на одной строке растра, а также на размеры спрайтов. Среди непосредственно конкурировавших с ZX Spectrum компьютеров, имеющих аппаратную поддержку спрайтов, такие компьютеры, как Atari (8-битная линейка), Commodore 64 и MSX.

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

Одной из основных сложностей, возникающих при выводе спрайтов на ZX Spectrum, является позиционирование по горизонтали с точностью до пикселя, так как в видеопамяти каждые восемь соседних по горизонтали точек представлены битами одного байта. Для экономии памяти может использоваться один экземпляр спрайта и сдвигаться на нужное количество пикселей при выводе. Для увеличения быстродействия в памяти может храниться восемь (или менее) заранее сдвинутых экземпляров спрайта. Для зеркального отражения спрайта по горизонтали также может использоваться либо медленное отражение в процессе вывода, либо заранее подготовленные копии.

При выводе спрайты могут накладываться на уже существующее изображение разными способами. При наложении с помощью логических операций типа OR или XOR происходит сильное искажение графики. Для устранения этого эффекта используются так называемые "маски". Основное 1-битное изображение спрайта указывает, какие пиксели должны быть нарисованы, а 1-битное изображение маски указывает, какие пиксели должны быть стёрты перед выводом. Таким образом, спрайт с маской представляет собой 2-битное изображение. Маски могут рисоваться художником вручную и храниться в памяти, удваивая объём памяти, требуемой для хранения спрайтов. Для экономии памяти маски могут генерироваться программно на основе изображения спрайта по мере необходимости (но не в процессе вывода), либо храниться с пониженным разрешением. Так как вывод спрайтов с масками медленее, чем без масок, в играх в зависимости от ситуации некоторые спрайты могут не использовать маски — в игре Exolon спрайты героя и некоторых крупных объектов имеют маски, а спрайты осколков взрывов и небольших противников выводятся без масок.

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

Из-за ограниченных возможностей по отображению цвета спрайты на ZX Spectrum бывают цветными только при крупной графике и познакоместном выводе, как в играх Astro Marine Corps или Savage. В остальных случаях спрайты либо монохромные и окрашивают фон в свой цвет (эффект клэшинга), либо не имеют собственного цвета, окрашиваясь в цвет фона.

Графика спрайтов может создаваться в графических редакторах общего назначения, но ввиду наличия определённой специфики (маски, анимация) были созданы специализированные редакторы спрайтов.