Просмотр полной версии : Ambal-3D
Ambal-3D (http://asdasd.rpg.fi/~svo/scalar/ware/15/) - единственный известный пример рейкастинга для обычного вектора (т.е. если не считать вольфа в эмуляторе спектрума).
Автор (Роман Кузнецов) сам написал в комментариях и по профайлеру видно, что заливку стен нужно ускорить. Попытался сделать это и попутно ускорил процедуры умножения, но основной эффект именно от оптимизации закраски. В версии для ВМ1 закраска еще чуть быстрее. Затронутые процедуры можно еще ускорить, но уже не так заметно. Неплохо бы еще оптимизировать деление.
Больше всего напрягают видные в некоторых местах при определенных ракурсах "левые" вертикальные линии, но не знаю, можно ли это поправить малой кровью.
Возможно автор найдет исходники, было бы здорово.
Оптимизировал интерполяцию и деление, также вытащил из бинарника текст с комментариями и приложил в виде текстового файла.
Сколько весит в тактах сканирование, интерполяция и вывод?
У меня 1024 угла, 90 градусов обзор, 256 столбцов.
По умолчанию сканируется только каждый 16-й столбец, но если соседние сканы попали на разные стены, то в середине снова сканируется, и так далее, рекурсивно.
В среднем на экран получается 50 сканов.
В среднем один экран обсчитывается 80000 тактов, выводится 160000 тактов.
Сколько весит в тактах сканирование, интерполяция и вывод?
Сейчас не готов ответить, если еще буду копать эту штуку - попробую измерить.
У меня 1024 угла, 90 градусов обзор, 256 столбцов.
По умолчанию сканируется только каждый 16-й столбец, но если соседние сканы попали на разные стены, то в середине снова сканируется, и так далее, рекурсивно.
В Ambal3D.txt есть информация от автора о практически всех этих характеристиках.
Интересно, сколько сожрёт на Векторе текстурирование стенок.
Wolf в векторовском эмуляторе спектрума дает 7-11 fps (в среднем ближе к 8-9, крайние взбрыки 6-12). Думаю при грамотном переводе на ВМ80 можно попытаться проиграть не более чем в 1,5-2 раза.
Это аппаратно-программное решение - Кишиневский адаптер 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 по обращению к ряду "околоспековских" портов и "перепутывание" адресов, чтобы строение векторовского экрана выглядело для процессора как спековское. Т.е. ничего сверхъестественного.
Немного цифр по результатам демонстрационного прогона (указано полное время расчета и отрисовки кадра, составляющие как-нибудь в другой раз):
Оригинал
min 465064 тактов (6.45 FPS)
max 1141092 тактов (2.63 FPS)
p6 - версия для ВМ80 (вариант для ВМ1 быстрее, но количественно не измерял)
min 364596 тактов (8.23 FPS)
max примерно 866000 тактов (3.46 FPS)
Понятное дело, что векторовские тормоза вносят свой вклад, на компе с прозрачным доступом ВМ80 к памяти было бы меньше тактов.
Затронутые процедуры можно еще ускорить, но уже не так заметно.
Надо признать - тут я погорячился, можно и заметно. Но наличие визуальных артефактов сильнее портит впечатление, чем недостаточная скорость
Работа над ошибками. Исправил одну авторскую ошибку и одну свою. Причем автор явно сначала сделал правильно, а потом при оптимизации пропустил одну команду, причем сама команда в бинарнике осталась. С другой стороны, в оригинальной версии при проходе демки неадекватный излом стены заметен только в одном месте. Вертикальные полосы по прежнему портят вид.
Еще одно отличие этой версии - дальнейшая оптимизация заливки стен.
Версии для ВМ1 в данном случае нет, т.к. поленился ее собирать. В readme добавил информацию по быстродействию на примере финального кадра демонстрации.
Забыл заменить деление на чуть более быстрое, теперь в следующий раз.
Слева оригинал, справа p8
Карта лабиринта. Белая стрелка - положение игрока в начале демонстрационного обхода.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot