Энтузиаст добавил в ретроконсоль трассировку лучей

Разработчик и энтузиаст Бен Картер добавил в Super NES аппаратный трассировщик лучей. Напомню, что самой консоли уже 30 лет.

Для реализации этой идеи его надоумил друг и желание получше изучить Verilog и FPGA. Таким образом появился проект SuperRT. Блогер хотел сделать аналог чипа SuperFX - даже названия похожи. Чип SuperFX располагался в картридже и обрабатывал визуальные эффекты недоступные самой консоли из-за ограничения "железа".

В итоге, Картер собрал кастомную плату картриджа с тремя дополнительными вычислительными ядрами с частотой 50 МГц - они обеспечивают поддержку трассировки лучей и базовой геометрии недоступной обычной SNES. На КПДВ можно можно видеть их работу. Автор извиняется за качество видео - виновата плата видеозахвата.

На фото можно видеть снятый корпус для монтажа проводов, по словам автора, никаких изменений в железо не вносились. Для создания модифицированной платы, автор купил древний картридж с "ужасной игрой Pachinko", удалил ПЗУ с игрой и вставил туда кабели. Еще он использовал несколько логических преобразователей (level shifters) и программируемую схему (FPGA) DE10-Nano. Большинство проводов на снимке выше обеспечивают коммутацию логических преобразователей, необходимых для конвертации напряжения с 5В, передаваемых SNES, в 3,3В допустимых для современных чипов.

Получившееся в итоге произведение Франкенштейна, способно просчитывать и отображать геометрию, цвета, тени и отражения для примерно 50 миллионов базовых объектов: плоскостей, сфер и трёхмерных объёмов (AABB). Отрендеренное изображение конвертируется в пригодный для SNES формат и передаётся в видеопамять консоли, откуда выводится на экран с разрешением 200x160.

Чип вычисляет и записывает в буфер RAM результаты своей работы. Дизассемблированный командный буфер выглядит так:

0000 Start
0001 Plane 0, -1, 0, Dist=-2
0002 SphereSub OH 2, 1, 5, Rad=5
0003 SphereSub OH 4, 1, 4, Rad=4
0004 SphereSub OH 5, 1, 9, Rad=9
0005 SphereSub OH 2, 1, 2, Rad=2
0006 SphereSub OH -0.5, 1, 2, Rad=2
0007 RegisterHitNoReset 0, 248, 0, Reflectiveness=0
0008 Checkerboard ORH 48, 152, 48, Reflectiveness=0
0009 ResetHitState
0010 Plane 0, -1, 0, Dist=-2.150146
0011 RegisterHit 0, 0, 248, Reflectiveness=153
0012 AABB 4, -2.5, 11,    8, 3.5, 13
0013 ResetHitStateAndJump NH 44
0014 Origin 6, 2, 12
0015 Plane -0.2929688, 0, -0.9570313, Dist=0.2497559
0016 PlaneAnd OH 0.2919922, 0, 0.9560547, Dist=0.25
0017 PlaneAnd OH 0, 1, 0, Dist=1
0018 PlaneAnd OH 0, -1, 0, Dist=4
0019 PlaneAnd OH -0.9570313, 0, 0.2919922, Dist=-1
0020 PlaneAnd OH 0.9560547, 0, -0.2929688, Dist=1.499756
0021 RegisterHit 248, 0, 0, Reflectiveness=0

Максимально допустимая частота кадров - 30 FPS. Это связано с ограничением пропускной способности интерфейсов самой консоли. Каждый кадр с трассировкой "весит" 32 килобайта при ограничения интерфейса вывода в 16 килобайт, поэтому полное обновление картинки возможно только каждые два кадра. Автор планирует и дальше развивать свое детище, подробнее можно узнать в его личном блоге.

@grvelvet
16.12.2020 17:03 UTC
Первоисточник

Комментарии

@EvilGenius18
16.12.2020 13:22 UTC
-10
Жаль, что подобные хардкорные разработчики обычно не используют свои знания для улучшения опенсорсных продуктов вроде Blender.

Да это круто, что он смог внедрить ray tracing реального времени (30 FPS) на железе, которое в миллион раз слабее современного, но почему бы не применить эти знания на практике, и не сделать Blender Cycles рендерер настолько же быстрым на современном железе? А то что получается на 150 МГц процессоре мы можем достичь 30 FPS ray tracing, а на современном 16 ядерном 3 ГГц процессоре и 0.1 FPS недостижимо, рендерим 1 кадр по несколько минут / часов.

Такие исследования важны, но если их результаты не применять на практике, это пустая трата времени и потенциала
@LoadRunner
16.12.2020 13:44 UTC
+8
Вы сравните разрешение экрана хотя бы, не говоря уже о количестве объектов в кадре.
@Belarus
16.12.2020 13:51 UTC
0
почему бы не применить эти знания на практике, и не внести вклад в опенсорсные проекты вроде Blender, сделав его Cycles ray tracing рендерер настолько же быстрым

Про него тогда никто не узнает.

@Gordon01
16.12.2020 14:18 UTC
+21
Да это круто, что он смог внедрить ray tracing реального времени (30 FPS) на железе, которое в миллион раз слабее современного

Так он не внедрил. Расчетом занимается внешняя FPGA "с тремя дополнительными вычислительными ядрами с частотой 50 МГц — они обеспечивают поддержку трассировку лучей"


Это почти то же, что и запуск дума на NES — всеми вычислениями занимается дополнительное железо, а от приставки остается только ввод/вывод.


NES здесь только для ретрохайпа.

17.12.2020 07:03 UTC
+1
Но в целом метод расширения аппаратуры вполне себе штатный, аналогичный использовавшемуся в период рыночной жизни консоли.
@
16.12.2020 15:51 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
16.12.2020 16:27 UTC
+1
Это особенность платформы. Разработчики тех лет тоже извращались как могли, добавляя в картридж дополнительные микросхемы.
@
16.12.2020 17:14 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
17.12.2020 08:25 UTC
-2

Люблю когда одни люди высказывают свое мнение о том, как другие люди высказывают свое мнение о том, как третьи люди проводят свое время.


Что является формой проведения свободного времни для меня.

@megahertz
17.12.2020 12:30 UTC
-1
Такие исследования важны, но если их результаты не применять на практике, это пустая трата времени и потенциала

В статье четко указана цель автора:


желание получше изучить Verilog и FPGA

а полученное устройство и заснятое видео — это всего лишь интересный побочный продукт

@LARII
16.12.2020 13:38 UTC
0
Вроде не первое апреля.
В приставке же спрайты и тайловый фон.
@grvelvet
16.12.2020 13:42 UTC
+2
Потому что основную работу по рендерингу полигонов и рейтрейсингу выполняет кастомный картридж.
16.12.2020 14:23 UTC
0

Вот мне и интересно, откуда в спрайтово-тайловой приставке полигоны. SuperFX насколько я понимаю был векторным, а не полигональным. (тем более не шейдерным). Даже если кастомный картридж. Там как минимум все упрется в количество контактов, питание. Может там такой картридж, что ему SNES только как подставка?

19.12.2020 00:06 UTC
0
SuperFX просто обычный быстрый процессор со своей собственной быстрой памятью. Рендер в нём чисто программный, какой напишешь, такой и будет. Уже с ним SNES работает именно только как подставка (забирающая видеопоток и играющая музыку), никакие её тайлово-спрайтовые возможности не задействуются, весь рендер и логика игры идут на SuperFX и кадры выдаются наружу в виде набора готовых тайлов. В случае с обсуждаемым проектом всё то же самое, только внешний процессор ещё мощнее.
@tormozedison
19.12.2020 20:51 UTC
0
В какой приставке тайловый фон? В NES. А это — SNES, совсем другая железка.
20.12.2020 01:57 UTC
+1
В SNES тоже только тайловые фоны, растровых видеорежимов у неё нет.
20.12.2020 05:54 UTC
0
Спасибо, не знал.
@drWhy
16.12.2020 14:37 UTC
0
Автору аплодисменты за проделанную работу и пожелание подарить себе на Новый год экшн-камеру, чтобы, собирая портфолио, не портить ощущение крутизны проделанной работы некачественной платой захвата.

Спасибо за статью.
@
16.12.2020 15:04 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@olegkolupaev
16.12.2020 16:48 UTC
-2

Конечно потрясное соединение проводов и рузультат. Но это как покойника ковырять или франкенштейна собрать. Практического применения ноль.

@p_fox
16.12.2020 20:46 UTC
+2

"Получившийся в итоге франкенштейн"
Опять кто-то не понимает разницу между Франкенштейном и его чудовищем.

@Tabke
17.12.2020 05:44 UTC
+3
Называть чудовище именем профессора — устоявшаяся культурная традиция. Возмущаться по этому поводу, это как возмущаться что грифельную палочку называют карандашом.