В чем разница между спрайтом и текстурой?

27

У меня есть задание для Университета, и моя задача - обсудить текстуры, используемые в видеоиграх, и как они развивались.

Мой главный вопрос: в чем принципиальная разница между использованием спрайта или другими методами текстуры?

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

Но каковы основные преимущества использования текстур над спрайтами?

jlw8
источник
5
Один - напиток, а другой - нет (я прошу прощения за эту шутку)
CAD97

Ответы:

37

В конце концов, спрайты и текстуры - это просто изображения - блоки растровых цветовых данных (хотя иногда мы немного расширяем границы, чтобы поместить в них данные, не относящиеся к изображениям). Различие в основном в том, как мы их используем.

Обычно мы называем изображение (или часть изображения, содержащую много отдельных частей) «спрайтом», если его предназначение для рендеринга должно быть нарисовано прямо в 2D-сетке экрана, без искажения перспективы. Таким образом, то, что вы видите в запущенной игре, в основном то, что вы видите в самом файле изображения (кроме эффектов тонирования цвета / замены палитры / прозрачности). Это относится к фоновым плиткам и персонажам / интерактивным объектам в 2D-играх, картам-биллбордам, таким как частицы и более старые стили рендеринга деревьев и кустарников, а также к элементам пользовательского интерфейса и значкам в 3D-играх.

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

Это делает границы между двумя нечеткими и не особенно строгими. Если у меня есть изображение, содержащее последовательность шлейфов огня и дыма, которые можно использовать для рисования частиц с биллбордом для эффекта взрыва, я могу назвать это «лист спрайта» или «текстура флипбука» взаимозаменяемо. Или, если у меня есть изображение набора плиток, содержащее все фоновые плитки для 2D-игры, я мог бы назвать это «текстурным атласом» сегодня, по аналогии с текстурами атласа, разработанными для 3D-игр, даже если его данные и использование в моей 2D-игре неразличимы. от того, что кто-то еще назвал бы спрайт-листом. Если у меня есть прямоугольник с геометрией, целью которого является представление одного изображения на экране, я могу назвать это «текстурированным квадратом» или «спрайтом» в зависимости от того, что я хочу подчеркнуть в отношении его использования.

(Обратите внимание, что в этом последнем примере «спрайт» обозначает как сегмент исходного изображения в наших игровых активах, так и экземпляр визуализированного игрового объекта, который использует этот сегмент изображения - еще один способ использования этой терминологии немного непоследовательно)

Вы найдете, что некоторые движки и библиотеки кодируют это различие в намерении рендеринга в свою собственную номенклатуру. Например, в Unity вы можете выбрать импорт ресурса изображения как «Sprite» - это позволяет получить дополнительный набор параметров, которые обычно желательны для изображений пользовательского интерфейса или активов 2D-игр, таких как нарезка и упаковка таблиц спрайтов, а также возможность ссылаться на них. части изображения в виде отдельных объектов в вашей сцене и в настройках объекта. В этих случаях «спрайт» часто означает «изображение (текстуру) плюс метаданные » - но он по-прежнему отображается так же, как обычные текстуры под капотом. Дополнительная упаковка удобна, поэтому нам не нужно микроуправлять ультрафиолетовыми смещениями и т. П. Везде, где мы хотим использовать изображение;

Д.М.Григорий
источник
«Текстуры» обычно включают или допускают прозрачные пиксели? Я бы подумал об объекте, который ведет себя как отображенная на пикселях плоская поверхность, которая содержит прозрачные пиксели как «спрайт», независимо от того, перпендикулярна ли поверхность оси камеры.
суперкат
2
Они, конечно, могут, не отказываясь от своего «текстурного» названия. Обычно люди называют изображение для рендеринга, скажем, листьев или ограждения в виде цепочки, как «текстуру листвы» или «текстуру забора», даже если они визуализируются с альфа-тестом / дитрингом или альфа-смешанной прозрачностью , Мы также можем назвать листовой случай «спрайтом листвы», если он отображается как рекламный щит, обращенный к камере, но было бы необычно применять имя спрайта, если оно используется в геометрии перспективы, такой как 3D-забор.
DMGregory
При рендеринге непрозрачных объектов с текстурным отображением механизму рендеринга не нужно беспокоиться о том, как будет выглядеть их внутренняя часть, поскольку непрозрачная поверхность будет скрывать внутреннюю часть. Я бы подумал, что что-то вроде забора из дерева или рабицы лучше всего сделать, сделав непрозрачные части, а затем отобразив частично прозрачные части как отдельные частично прозрачные поверхности. Хотя они могут не соответствовать тому, что некоторые люди называют «спрайтами», если они не смотрят в камеру, они также не будут такими же, как «нормальные» объекты.
суперкат
Обычно это действительно так. Геометрия для столбов забора и стволов отображается в непрозрачном проходе, а затем геометрия для участков забора и листвы / веток отображается в альфа-тесте или альфа-смешанном проходе впоследствии.
DMGregory
1
Я обычно слышу «прозрачную текстуру» или «альфа-текстуру» / «текстуру с альфа-каналом» - может быть, иногда «вырез» / «вырезанную текстуру», если это прозрачность с жесткими краями / альфа-тестирование.
DMGregory
7

Спрайт - это реликт из истории компьютерных игр. Подумайте 8-битный Ataris около ок. 1980. Маленькое изображение, обычно с битовой маской покрытия (или специальным «прозрачным» цветом), которое имеет положение на экране и каким-то особым образом комбинируется с экраном. С отверстиями, где в спрайте есть «дыры», согласно карте покрытия. Обычно «просто работает» и позволяет легко создавать иллюзию движущихся объектов, обычно сохраняя и восстанавливая перезаписанные исходные пиксели экрана.

Раньше спрайты были аппаратной функцией на компьютерах, раньше вы могли рисовать / отрисовывать их с автоматическим сохранением содержимого экрана, раньше у вас их было только очень ограниченное количество (и не перекрывающихся, ура!) И раньше они были чертовски маленькими (например, 16x16) и ограниченными.

Курсор мыши - это то, что ближе всего к спрайту в наши дни (и раньше он был настоящим спрайтом в некоторых системах до 10-15 лет назад).

В настоящее время такого не существует, но слово остается. Спрайт - это, в основном, небольшое 2D-изображение, которое вы рисуете (составное) где-то Обычно, рисуя небольшой текстурированный квад.

С другой стороны, текстура - это концепция читаемого изображения, используемая в более современных графических API. Или, точнее, область памяти («буфер» в терминах современных API) с некоторыми связанными дополнительными данными, такими как размер, из которых можно выбирать с помощью некоторых средств. Обычно, но не обязательно шейдером, работающим на графическом процессоре. Обычно, но не обязательно, с нормализованными координатами, и обычно, но не обязательно, с фильтрацией (и mipmapping, и некоторым конкретным режимом границы, и, и, и ...).

Таким образом, текстура может быть источником данных, которые вы используете для рисования спрайта.

Damon
источник
3
Надлежащие спрайты накладываются на оборудование, поэтому видеоданные в памяти не изменяются и даже не должны использовать один и тот же режим (например, в C64 у вас могут быть растровые спрайты над текстовым фоном). Объекты, которые отображаются путем сохранения растрового изображения и замены данных, называются BOB (объекты Blitter).
Саймон Рихтер
1
@SimonRichter: Я не знаком с C64, за исключением игрушки, но у Amiga они тоже были, 8 из них, если я правильно помню. Не уверен, как это работает на аппаратном уровне, но с таким же успехом мог быть прямой оверлей (кажется вероятным). На ST спрайты A00D/ AOOCopcode, безусловно, имели вид, изменяющий фреймбуфер draw / undraw. BOB, да, это тоже существовало, типичная вещь для Amiga. Думаю, это было ближе всего к современной текстуре (любой размер, один раз загрузить в графический процессор, много раз нарисовать).
Деймон
4

Это своего рода сравнение яблок и апельсинов. Текстура - это просто изображение, а спрайт - это изображение и то, как оно используется.

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

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

Более конкретно для 2d игр, это стилистический выбор. Можно, например, создавать нарисованные от руки или нарисованные персонажи в игре, используя спрайты. Технически, это могут быть игры в Южном парке.

Таким образом, вы не можете использовать только текстуру вместо спрайта.

JZX
источник
3

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

ADuckWhat
источник