PDA

Просмотр полной версии : Ambal-3D



ivagor
06.04.2013, 08:23
Ambal-3D (http://asdasd.rpg.fi/~svo/scalar/ware/15/) - единственный известный пример рейкастинга для обычного вектора (т.е. если не считать вольфа в эмуляторе спектрума).
Автор (Роман Кузнецов) сам написал в комментариях и по профайлеру видно, что заливку стен нужно ускорить. Попытался сделать это и попутно ускорил процедуры умножения, но основной эффект именно от оптимизации закраски. В версии для ВМ1 закраска еще чуть быстрее. Затронутые процедуры можно еще ускорить, но уже не так заметно. Неплохо бы еще оптимизировать деление.
Больше всего напрягают видные в некоторых местах при определенных ракурсах "левые" вертикальные линии, но не знаю, можно ли это поправить малой кровью.
Возможно автор найдет исходники, было бы здорово.

ivagor
07.04.2013, 08:53
Оптимизировал интерполяцию и деление, также вытащил из бинарника текст с комментариями и приложил в виде текстового файла.

alone
07.04.2013, 12:27
Сколько весит в тактах сканирование, интерполяция и вывод?
У меня 1024 угла, 90 градусов обзор, 256 столбцов.
По умолчанию сканируется только каждый 16-й столбец, но если соседние сканы попали на разные стены, то в середине снова сканируется, и так далее, рекурсивно.
В среднем на экран получается 50 сканов.
В среднем один экран обсчитывается 80000 тактов, выводится 160000 тактов.

ivagor
07.04.2013, 16:14
Сколько весит в тактах сканирование, интерполяция и вывод?
Сейчас не готов ответить, если еще буду копать эту штуку - попробую измерить.


У меня 1024 угла, 90 градусов обзор, 256 столбцов.
По умолчанию сканируется только каждый 16-й столбец, но если соседние сканы попали на разные стены, то в середине снова сканируется, и так далее, рекурсивно.
В Ambal3D.txt есть информация от автора о практически всех этих характеристиках.

PPC
07.04.2013, 17:06
Интересно, сколько сожрёт на Векторе текстурирование стенок.

ivagor
07.04.2013, 17:45
Wolf в векторовском эмуляторе спектрума дает 7-11 fps (в среднем ближе к 8-9, крайние взбрыки 6-12). Думаю при грамотном переводе на ВМ80 можно попытаться проиграть не более чем в 1,5-2 раза.

alone
07.04.2013, 18:44
А как работает эмулятор?

ivagor
07.04.2013, 20:04
Это аппаратно-программное решение - Кишиневский адаптер z80 (http://asdasd.rpg.fi/~svo/scalar/ware/571/) + Эмулятор спека (http://asdasd.rpg.fi/~svo/scalar/ware/605/) (последний вариант тут (http://zx-pk.ru/showpost.php?p=569030&postcount=14)). В адаптере несколько программно активируемых заточек под спек, главные две из которых - NMI по обращению к ряду "околоспековских" портов и "перепутывание" адресов, чтобы строение векторовского экрана выглядело для процессора как спековское. Т.е. ничего сверхъестественного.

ivagor
08.04.2013, 18:39
Немного цифр по результатам демонстрационного прогона (указано полное время расчета и отрисовки кадра, составляющие как-нибудь в другой раз):

Оригинал
min 465064 тактов (6.45 FPS)
max 1141092 тактов (2.63 FPS)

p6 - версия для ВМ80 (вариант для ВМ1 быстрее, но количественно не измерял)
min 364596 тактов (8.23 FPS)
max примерно 866000 тактов (3.46 FPS)

Понятное дело, что векторовские тормоза вносят свой вклад, на компе с прозрачным доступом ВМ80 к памяти было бы меньше тактов.

ivagor
10.04.2013, 19:34
Затронутые процедуры можно еще ускорить, но уже не так заметно.
Надо признать - тут я погорячился, можно и заметно. Но наличие визуальных артефактов сильнее портит впечатление, чем недостаточная скорость

ivagor
13.04.2013, 15:28
Работа над ошибками. Исправил одну авторскую ошибку и одну свою. Причем автор явно сначала сделал правильно, а потом при оптимизации пропустил одну команду, причем сама команда в бинарнике осталась. С другой стороны, в оригинальной версии при проходе демки неадекватный излом стены заметен только в одном месте. Вертикальные полосы по прежнему портят вид.
Еще одно отличие этой версии - дальнейшая оптимизация заливки стен.
Версии для ВМ1 в данном случае нет, т.к. поленился ее собирать. В readme добавил информацию по быстродействию на примере финального кадра демонстрации.
Забыл заменить деление на чуть более быстрое, теперь в следующий раз.

ivagor
13.04.2013, 15:54
Слева оригинал, справа p8

ivagor
14.04.2013, 07:18
Карта лабиринта. Белая стрелка - положение игрока в начале демонстрационного обхода.