Спасибо, любопытно было почитать про то, как индустрия пришла к полигонам от спрайтовых преобразований.
  • avatar aa-dav
  • 2
Немного еще посмотрел в то как именно работают палетризированные цвета в Saturn, ибо там сразу было видно, что дела обстоят непростым образом, но за ворохом слов было не очень понятно.
Оказалось что и с палитрами там всё очень сложно.
Во первых — при рендере текстурированного спрайта в 16-битный фреймбуфер данные о цвете его битмапа могут быть представлены непосредственно как 16-битные значения, а могут быть 4-битными слотами в 16-цветной палитре 16-битных же цветов. Но в любом случае во фреймбуфер попадает 16-битное данное у которого верхний бит контролирует является оно RGB или является цветом в палитре.
Так вот когда оно является цветом в палитре существует 8 глобально выставляемых форматов того какие биты в нём отвечают за:
а) номер цвета в палитре (до 10 бит)
б) порядок отрисовки между задними фонами (до 3-х бит)
в) номер расширенного вычисления цвета (до 3-х бит)
г) бит «тени»
Кроме того для 8-битного режима фрембуфера есть так же 8 форматов как эти же биты, но уже в урезанном количестве распределены по 8-битному данному о цвете в нём.
И там такая битовая мешанина из сотен регистров управляющих всякими этими битовыми комбинациями, что как говорится «без поллитры не разберешься».
Реально ловлю то же самое ощущение что было в похожем по духу эпохи 3DO — вся эта битово-палитрово-слоевая мехника переусложнена до жути.
Мегадрайв от той же фирмы был просто гимном лаконичности и простоты своей графической начинки — одна палитра, один палитровый режим и для спрайтов и для тайлов, но пасаран. Тут же прям им крышу сорвало на то как впихать в биты как можно большее число всяких палитр, режимов и цветов. Сомневаюсь что даже половина этих всех вещей была в реальности востребована.

А вот дальше еще на другом форуме подсказали, что была такая весьма забавная видеокарта как Diamond Edge 3D — согласно википедии первая видеокарта на пользовательском рынке ПК с аппаратным ускорением (95-ый год). Так вот это был некий синтез видео- и звуковых чипов из Sega Saturn в виде платы для IBM PC. И вот тут всё стало совсем интересно, ведь Diamond Edge 3D в сердце своём содержит чип NV1 который разработала, да, nVidia.
Похоже, что это был одна из первых попыток этой фирмы продвигать 3Д в массы.
В статье про Sega Saturn этому посвящена всего одна строчка (мой перевод):
Шеффилд сказал, что использование Сатурном четырёхугольников подорвало поддержку системы третьими сторонами, но поскольку «nVidia вложилась в четырёхугольники» в то же время есть «отдалённая возможность», что они смогут «стать стандартом вместо треугольников», если каким то образом, магически, Сатурн стал бы самой популярной консолью той эпохи".
И удивительно, но в русском википедии есть гораздо больше интересной информации, чем в английской: ru.wikipedia.org/wiki/NV1
Использование квадратичных поверхностей было элегантным и абсолютно новым решением в 3D-мире. Хотя теория была придумана давно, в железе такого до этого никто не делал. Главная идея заключалась в том, что в 1995 году реализовать операцию деления 1/z в железе была невероятно сложно и дорого, и в результате этого имплементировать перспективную проекцию было очень трудно. Классический подход, заключавшийся в линейной аппроксимации гиперболической функции, имел свою проблему аппроксимации в окрестности нуля и требовал сложного программного обеспечения. Квадратичная теория, использованная в NV1, аппроксимировала функцию 1/z параболической интерполяцией и такая интерполяция по качеству превосходила кусочно-линейную, которая была использована в решениях конкурентов.

Попытка исследовательской группы NVIDIA портировать квадратичную технологию на API Microsoft провалилась. Попытка выполнить наложения текстуры и операцию clipping приводило к уравнениям 5 степени невычислимыми в радикалах. Хотя демонстрационные примеры с квадратичными поверхностями выглядели довольно неплохо, работа с ними оказалась чрезвычайно трудной.

Дальнейшая разработка NV1 под новым названием — NV2 была остановлена, NV1 производство было свернуто. В 1996 году Nvidia начала разработку классического акселератора.
Хех, оказывается за этими квадратностями стояла никто иная, как сама nVidia и это был её первый блин комом.
Большое спасибо за проделанную работу! И было приятно обнаружить пару своих работ в галерее :)
Круто! Аффтар не пей йаду, ты ацкий сотона!

Именно таких обзоров взвесьте мне побольше, раз уж я сам не езжу больше.
  • avatar wbcbz7
  • 2
прошел уже год, а VT3.0 так и не видно на горизонте :)
Полностью поддерживаю.
  • avatar sq
  • 1
Ни в одном из смыслов! Не иди у них на поводу!)
  • avatar aa-dav
  • 0
Вообще там если анализировать — карты все были хорошо подстроены под эту одну только центральную точку — платформы все были очень широкими как на скриншоте и узких вертикальных мест куда бы можно было упасть просто не было. Причём были места похожие на то такие как массив из переплетённых труб под конец третьего уровня, но там всё было обложено минами, прямо таки заставляло расстреливать всё заранее и мелкие подобные косяки просто терялись еще на фоне того, что квадратики-платформы сплетающие трубы были проницаемые во всех направлениях кроме сверху-вниз, что опять таки приводило к замыливанию реальности коллизий, т.к. трубы просто воспринимались частично как задний план на который и не грех немного залезть. В общем один из тех примеров когда оглядываясь понимаешь как программные решения диктовали look&feel.
  • avatar aa-dav
  • 2
Ремейк я делать расхотел по копирайтским причинам, но возможно буду пилить самостоятельного клона без копирайтных материалов. Сплюнуть только через плечо надо. :)
Перенёс движок который накопился под GBA на SDL2 и винду/андроид и даже немного своих спрайтов нарисовал уже (человечек тут «сломанный»):

но пока только намётки. зато эксплуатируя материалы по автоматическому портированию карт из тайловых игр под свой движок чисто в рамках прикола добавил параллакс в третий уровень контры форс:
youtu.be/RBe5IZUlYnE
но это так, просто эксперименты, полноценный порт делать не вижу смысла.
  • avatar Shiru
  • 3
Ресурсоёмкость расчёта столкновений напрямую зависит от количества объектов и типа столкновений — точка-фон, либо объект-объект. Точка-фон занимает не так уж много, зависит от способа хранения карты. Как правило надо щёлкнуть банком, перевести x/y в смещение метатайла в карте, прочитать индекс, далее либо сразу прочитать табличку флагов, либо карту уточнения формы. Т.е. один расчёт и несколько LUT. Объект-объект (игрок на подвижной платформе) считать гораздо медленее, особенно если расчёт идёт в мировых координатах. Для того, чтобы стали возможными игры типа Contra, где туда-сюда летает множество пуль и бегает много врагов, там пускаются во все тяжкие, с целью уменьшения и упрощения просчёта столкновнений. Например, считают столкновения не в мировых координатах, а уже после проекции в пространство экрана — тогда расчёты становятся 8-битными и автоматически исключают вышедшие за края экрана объекты.
В моём случае ~150 тактов на точку. У главного персонажа их 4. Также за проверкой коллизий в карту лазает каждый враг на экране, но это можно делать один раз в 8 кадров, например. В моём проекте предусмотрено 10 объектов на экране (враги, подвижные блоки, рычаги и т.д.), пока что фпс не проседал (пишу на cc65).
Вторую часть вопроса не совсем понял. Графику, разумеется, в любой игре можно улучшить, этим постоянно занимаются т.н. ромхакеры.
  • avatar Bugrim
  • 0
Скажите, а много ли ресурсов сжирает расчет, например на NES, и можно ли улучшить графон в играх без коллизий?
Кстати, забыл спросить, как продвигается-то ремейк?
Ты заставил меня загрузить этот ром)
Действительно, раньше даже не придавал этому значения. Тут ещё лихо выкрутились из этого, неизвестно намеренно или случайно так вышло — опорная нога у персонажа одна, а вторая словно на заднем плане, поэтому и «узкая» коллизия выглядит вроде бы как и надо. На «раскоряченных» персонажах типа Марио из Wrecking Crew это было бы заметнее.
Спасибо!
Ну в каком-то смысле конверсия )
  • avatar aa-dav
  • 4
Ковырялся когда над клоном Contra Force заметил одну забавную штуку — коллизии с полом в этой игре проверялись только по одной центральной точке. Заметить это можно было следующим образом:

Забавно, но заметить такую казалось бы вопиющую глючность было на самом деле практически невозможно — когда игрок двигается вперед с обрыва, то он почти наверняка скрадывает это упрощение продвинувшись вперёд. Чтобы встать так как изображено на скриншоте нужно подходить к делу осознанно. Кроме того когда я воспроизвёл это упрощение у себя, то понял что оно кроме всего прочего резко упрощает движение по наклонным полам, что тоже было в оригинальной игре — когда пол наклонный, то с этими B-D надо тоже напрягать мозг, но с одной точкой всё получается довольно просто.
Помню, в телеге я сказал что Валли — конверсия. Не знал, что здесь был такой подход издалека и с предварительным рендером-блендером. Короче, беру слова назад, отличная работа от и до!
Редакторов таких не существовало. Метод простой. Первая картинка загружается в страницу памяти №5 (буфер 0), другая на стр.№6 (буфер 1). Далее включается 50hz таймер и каждый раз на vblank'e через регистр 177662 попеременно включается буфер 1/0. Совместно с переключением буфера меняется и палитра (она тоже в регистре 177662).

Благодаря убогим комбинациям палитр, которые наверняка составлял бухой инженер, комбинаций цветов в гигаскрине не так много, в районе 40-50, а годных итого меньше.

Так же можно переключать палитру «на ходу». Некоторые игры на БК использовали этот способ и на экране было >4 цветов одновременно. Можно переключать в начале каждой из 256-ти строк, и даже несколько раз за строку (в нашей демке «Однажды» так сделан горизонтальный скрол поля на 0:25).

Есть ещё один интересный режим, который возможен, благодаря аппаратному, вертикальному «скроллу». По примеру, описанному выше, каждый vblank попеременно делается скролл на 1 строку вверх/вниз. Таким образом можно «сглаживать» эффекты, которые рисуются через строчку. Причём скролл можно и не во время vblank переключать, т.к., отрисовка экрана с измененным скроллом всегда только после vblank, т.е. когда луч в центре экрана «дергать» скролл бесполезно — отобразится только на новом кадре.
Что вы? Какое против? Только за.
А нет у Вас случайно исходников/редакторов/инструкции к описанному аналогу гигаскрина на БК?)