Флейм
GameDev.ru / Флейм / Форум / Блеск и нищета 8/16-битных консолей и ПК (5 стр)

Блеск и нищета 8/16-битных консолей и ПК (5 стр)

Поделиться

Страницы: 1 2 3 4 5 6 7 8 9 Следующая

=A=L=X=Забаненwww13 июля 201710:37#60
Пока тырил спрайты из первого уровня игры с Famicom/NES/Dendy - Contra Force для Contra Force Advance накопилось материала для еще одного поста здесь.

В денди одновременно на экране может быть не более 64 спрайтов 8x8 или 8x16 (при этом еще и не более 8 спрайтов в одной строке).
Каждый из спрайтов при этом ссылается однобайтным индексом на один из 256 тайлов 8x8 в таблице тайлов для спрайтов. Тайлы 4-цветные, 2 бита на пиксель (один цвет означает прозрачность при этом, так что цветов как таковых не более 3-х на тайл), что даёт 16 байт на тайл 8x8 и 4Кб на всю таблицу спрайтовых тайлов. Выше уже упоминалось, что есть еще такая же таблица тайлов для фона, но здесь не о ней.
Все эти таблицы - и спрайтов и тайлов находятся в самой настоящей VRAM видеочипа. Доступ к ней центральным процессором осуществлялся только через порты ввода-вывода и он практически полностью блокировался на период формирования кадра (VDraw).

Итак, вот у нас 256 тайлов 8x8 для формирования одного кадра картинки - много это или мало?
Вроде бы прилично... но нет, на деле оказывается что это довольно таки мало.
Разглядывая тайлы спрайтов Contra Force в отладочных окнах эмулятора Famicom/NES я обнаружил, что в ней видеопамять тайлов спрайтов разделена на 2 равных области по 128 тайлов 8x8 в каждой - первая/верхняя и вторая/нижняя.

В первой хранятся:
- тайлы ног, общие для всех человечков, в большинстве своём квадраты 16x16
- торсы первого и второго игроков (в игре на выбор 4 разно-выглядящих героя и можно играть вдвоём одновременно)
При этом да - при выборе того или иного игрока тайлы в видеопамяти тайлов спрайтов меняются полосками. Можно сказать что происходит заполнение VRAM на лету - техника весьма перекликающаяся с современными техниками VRAM-буферов и всяческими стримингами. Вот так выглядит эта зона (в серой палитре) для когда выбраны для игры первые 2 человечка (Burns и Smith):

Изображение

Здесь красными линиями как раз очерчены эти 3 зоны - общие для всех ноги, торсы Бурнса и Смита. Можно так же заметить неиспользованные тайлы - немного, но даже такие тут есть.

А вот дальше запутанней - вторая половина в 128 тайлов спрайтов занята:
- подвижными объектами, включая патроны, боеприпасы и взрывы.
- торсами врагов
Первые всегда занимают определенные (нижние-последние) слоты в ней, но вот далеко не все торсы врагов могут появится в ней одновременно.
Самый "детальный расклад" принадлежит человечку с пистолетом - он подвижный, у него много анимаций торса.
С ним могут соседствовать 2 других торса - чувак с гранатой, который просто стоит на месте и бросает на фиксированную длину гранату постоянно - у него 3 анимации торса для замаха.
И третий - чувак с огнеметом. У него всего 1 кадр 24x16 вообще - он не двигается и если его поразить - даже взрывается как граната, а не падает мешком-трупом как все остальные.
Вот как выглядит этот "суповой набор":

Изображение

(в принципе ноги снизу возле арсенала тоже никогда не меняются, так что могут быть отнесены физически к банку тайлов арсенала - но так как человечки всегда к ним удачно пристыкованы, я буду их очерчивать как бы относящимися к человечкам)
Другие виды врагов в моменты когда на экране присутствуют эти появится не могут. Видеопамяти не хватает. :)
Но на первом уровне есть и другие враги - когда они должны появится на экране видеопамять тайлов подменяется на другие варианты, причём они взаимно исключают какие-то другие.
Первыми появляются чувак тоже с пистолетом (или УЗИ? по этим спрайтам трудно понять), но с другой формой фуражки и чувак с базукой.
У первого тоже много анимаций у второго же с ними всё скромнее - правда из-за длинного тубуса базуки его спрайты сами по себе большие.
Эти два чувака могут сосуществовать одновременно, давая следующую картинку нижней половины буфера тайлов:

Изображение

А вот дальше на первом уровне идёт длинная полоса препятствий, с катящимися на игроков бочками, ездящими и падающими платформами и т.п., где единственным возможным врагом является человек с ружьём.
Потому что все остальные тайлы опять таки распределены на эти самые препятствия, бочки и платформы. Выглядеть нижняя половина тайлов спрайтов начинает так:

Изображение

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

Все эти динамические подмены тайлов на лету прямо во время перемещению по уровню до боли напоминают современные VRAM-буфера, стриминги и прочие мегатекстуры. :) Концепция выделенной видеопамяти на марше.


И вот какая закавыка - если вы сейчас начнёте вспоминать, или запустите те 8-битные игры в эмуляторе сейчас, то обнаружите, что эта нехватка видеопамяти торчит на самом деле очень заметными ушами, нередко даже отражаясь на геймплее игр.
Вспомните битемапы - они все как на подбор происходят в виде последовательно выходящих на экран волн врагов где в каждой волне не может появится более двух-трёх видов оных. Больше разных спрайтов одновременно просто не влазило в видеопамять.
Остаётся только удивляться как хорошо эти технические ограничения были в тех или иных играх замаскированы.

Правка: 13 июля 2017 11:46

kanadetsПостоялецwww13 июля 201718:20#61
zlos
> БК-0010 помню. Там было 32Кб памяти, половина на основную память, половина на
> настоящий фреймбуффер. Процессор был аж 16-и битный.
innuendo
> Это издержи советской системы :)
там советский клон стоял 16 битного PDP-11 американской фирмы DEC.
0iStalkerМодераторwww13 июля 201719:22#62
kanadets
> там советский клон стоял

Не было там  никакого клона,  была заимствована система команд, а сам процессор свой был.

ZonoIDПостоялецwww13 июля 201720:07#63
0iStalker
Система команд тоже была только частично скомунизжена.
kanadetsПостоялецwww13 июля 201720:33#64
0iStalker
> Не было там никакого клона, была заимствована система команд, а сам процессор
> свой был.
Ну тем хуже, БК-0010 это самый говённый был ПК и по графическим возможностям очень сильно отставал от 8-битных Корвета, Ямахи-MSX  и того же Спектрума.
SuperInoyПостоялецwww13 июля 201721:48#65
хм, а я и не знал что на NES была Elite...
+ Показать
Shurik7777Постоялецwww13 июля 201722:43#66
SuperInoy
> хм, а я и не знал что на NES была Elite...
С учетом устройства экрана, хотелось бы знать как это сделали. Может =A=L=X= найдет время и на эту игру...

Кстати, никто не знает, как аппаратно реализована работа спрайтов?

+ Мои домыслы на этот счет

0iStalkerМодераторwww13 июля 201722:50#67
Да вроде бы особо никто не скрывает https://wiki.nesdev.com/w/index.php/PPU_rendering
SuperInoyПостоялецwww13 июля 201722:57#68
Shurik7777
> С учетом устройства экрана, хотелось бы знать как это сделали.
в двух словах - там было дофига спрайтов с белой(ладно ладно, голубой) линией под разными углами.

Правка: 13 июля 2017 22:58

Shurik7777Постоялецwww14 июля 20170:00#69
0iStalker
О, спасибо.
=A=L=X=Забаненwww14 авг. 201714:49#70
Shurik7777
> С учетом устройства экрана, хотелось бы знать как это сделали.

Свежайшие эмуляторы Nestopia и FCEUX не могут корректно отобразить эту игру - на экране куча глитчей, хотя присутствуют и правильные куски изображения.
Очевидно они не поддерживают должным образом какой то секретик маппера этой игры, который делает важные какие то штуки, ведь действительно система видеочипа у денди ни в борщ ни в красную армия для такого изображения.
Инструкции с сайта кажется создателя игры http://www.elitehomepage.org/nes/index.htm увы, но не помогли, последняя версия iNES тупо не имеет указанных там опций и изображение точно так же глитчит.
В том же FCEUX можно посмотреть что творится в буферах тайлов - и творится там форменный ад кромешный, буфер тайлов это ОЗУ и в нём на лету строятся тайлы с разными отрезками линий. Тем не менее очевидно, что для произвольной формы на экране тайловых буферов просто недостаточно и действительно нижняя часть изображения как правило безмерно испорчена - что именно должен был делать с этим маппер я не особо понимаю.
Так что загадка.
Выглядит это вот так:

Изображение

Дассс, есть некоторая загадка.

=A=L=X=Забаненwww14 авг. 201715:06#71
P.S.

А, надо было регион принудительно сменить на PAL в том же FCEUX и нормально работает. Странно, впервые встречаю такую разницу.
Вообще всё-равно непонятно как ей удаётся не вылазить за лимиты тайлов и почему у неё в обоих банках и спрайтов и тайлов содержится много данных.
Возможно она умудряется в середине экрана переключать какой из банков тайлов относится к спрайтам а какой к тайлам и этим трюком как бы удваивает количество возможных комбинаций тайлов на экране и когда она это не успевала делать из-за отличий в таймингах между регионами в нужный момент мы я и видел глитчи на экране. Что-то типа того...

=A=L=X=Забаненwww15 авг. 201716:13#72
На этот раз речь зайдёт не про 8 и даже не про 16 бит, а про довольно таки уже 32-битную (Motorola 68000) Amiga.
Первый модельный ряд компьютеров Amiga базировался на чипсете Original Chip Set (OCS).
Видеочип для него переделывался из более ранних моделей компьютеров для видеосистемы NTSC и в последней был особый режим когда в системе HSV (типичной для телевизионных видеорежимов) фиксировались цветовые компоненты, а менялась только яркость в следующем пикселе - был опять таки особый бит что значение берется не из палитры следующего пикселя, а 4-битное целое описывающее яркость. это было с NTSC.
В Амиге они перешли в RGB и конструктор решил выкинуть это дерьмо как уже неактуальное, но инженер проектирующий чип сказал что если совсем убрать, то придётся сильно менять раскладку дорожек и это только замедлит разработку - проще просто переделать эту часть чипа под RGB модель и они переделали...
Штатные видеорежимы в Амигах позволяли иметь на битмапе заднего фона 32 цвета из палитры плюс один бит понижающий яркость в 2 раза - то есть 64 цвета с ограничениями за раз.
Однако этот вот самый "дарвиновский хвост" - режим Hold and modify позволял отображать одновременно на экране до 4096 разных оттенков (причём он первый среди персоналок взял этот рубеж). Но как он это делал!
Если в пикселе первые два бита равны 00, то следующие 4 содержат индекс цвета в 16-битной палитре.
А вот если первые два бита равны:
01 - то следующие 4 бита описывают установку зеленой компоненты цвета (16 градаций) данного пикселя, сохраняя красную и синюю компоненты от предыдущего пикселя.
10 - то же самое для красной компоненты
11 - то же самое для синей
То есть, отталкиваясь от опорной 16-цветной палитры можно за несколько "ходов" тем не менее изменить цвет пикселя на произвольный цвет в 4+4+4=12-битной палитре.
Это даёт 4096 возможных одновременно выводимых цвета - но не всякий "ход" мог дать удачный оттенок следующего пикселя в силу того, что менялась только одна компонента цвета. Нередко выводимая таким образом картинка давала артефакты схожие в чём то с пережатым джепегом.
Правильный выбор опорной 16-цветной палитры + максимально удачные "ходы изменений компонент" породили целый класс алгоритмов по кодированию картинок и видео на амигах.
В общем у пользователей и программистов амиг видеорежим HAM6 это целый пласт ощущений и ностальгии - на этом компьютере впервые можно было разглядывать фотографии слабо отличимого от бумаги качества (при удачном подборе компонент конечно).
Изображение

Правка: 15 авг. 2017 17:53

Shurik7777Постоялецwww17 авг. 201722:36#73
До режима HAM был интересный "предок" (на более древних машинах). Позволял рисовать закрашенные полигоны (flat shading) со скоростью сравнимой с выводом проволочной графики.
Из набора цветов один (например, 0) был специальным. Когда видеосистема по мере вывода пикселей "натыкалась" на этот номер, то вместо него выводилось ранее сохраненное значение из спец. регистра. Когда же выводился любой другой номер цвета, то он и сохранялся в этот регистр.
Экран весь закрашивается цветом 0. Если поместим в левый верхний угол экрана какой-нибудь "нормальный" цвет, то получим экран закрашенный этим цветом (цвет фона).
Теперь рисуем полигон. Выбираем две группы ребер: ребра расположенные с левой стороны полигона и с правой.
Если у полигона вершины перечисляются против часовой, то в "левую" группу попадают все ребра рисуемые сверху-вниз, а в "правую" - снизу-вверх.
Строго горизонтальные ребра не учитываем.
Левые ребра рисуются цветом полигона, а вот правые - цветом фона (и со сдвигом в право на один пиксель). Все что между - на экране становится цветом полигона (у нас ведь слева направо строчная развертка).
Чтобы стереть полигон - достаточно ребра нарисовать нулевым цветом.
Это упрощенный алгоритм, так как не учитывает пересечения нескольких полигонов.
eMan.LivedПостоялецwww18 авг. 20170:49#74
=A=L=X=
> Свежайшие эмуляторы Nestopia и FCEUX не могут корректно отобразить эту игру
У меня есть две версии Элиты. Одна воспроизводится обоими эмуляторами с порченным изображением. Другая же отлично воспроизводится на FCEUX 2.2.2 , а вот Nestopia и с ней не справляется.

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

Правка: 18 авг. 2017 0:53

Страницы: 1 2 3 4 5 6 7 8 9 Следующая

/ Форум / Флейм / Железо

2001—2017 © GameDev.ru — Разработка игр