PDA

Просмотр полной версии : Raycasting



ivagor
15.09.2016, 17:55
Недавно доделал рейкастер для i8080. Глюков Ambal3D тут нет (может есть свои, но я их пока не нашел). Первая версия (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=885062&viewfull=1#post885062) была для ориона-про, там же и ссылка на писишный прототип. Теперь переделал для ПК-6128Ц. Если на орионе-про (z80 с тормознутыми 10 МГц и удобный для такого случая экран) приемлемо бегает, то на 6128 все очень грустно (медленно). Но резервы для оптимизации есть и со временем может руки дойдут. Сделал для 6128, а не для ванильного вектора по одной причине - хотел видеть все 11 цветов, которые есть на дефолтной карте. Но версию для 06Ц тоже планирую.
Если вдруг кто хочет посмотреть, то удобнее в VV (хотя отлаживал я в emu и там все тоже прекрасно работает, только загружать не очень удобно):
File->Config->Load->PK-6128c.con
Потом можно просто кинуть rc5.com в окно эмулятора или через диалог открытия файла.
Для бодрости можно еще включить тактовую побольше (F10). На 12 МГц все довольно неплохо.
Управление - курсор.

ivagor
17.09.2016, 17:29
Ускорил почти в 2 раза, теперь можно более-менее походить на стандартных 3 МГц

ivagor
18.09.2016, 17:26
Сделал версию для 06Ц. Не требует никакого дополнительного железа (квазидиск и т.п.), достаточно голого вектора. Темные градации цветов передаются вертикальной штриховкой. Шахматка наверно была бы лучше, но в нее дольше переделывать.
Здесь немного ускорена математика, но замедлена очистка экрана.

svofski
20.09.2016, 20:20
Кому лень, можно дрег и дропнуть прямо зип на http://asdasd.rpg.fi/scalar/vector06js

ivagor, офигенно! Хотя от тебя я ожидал не меньше, чем рей маршер :)

artyr_n
21.09.2016, 00:45
Кому лень, можно дрег и дропнуть прямо зип на http://asdasd.rpg.fi/scalar/vector06js

у меня приводит опять к загрузке этого файла на компьютер

artyr@sklo:~$ uname -a
Linux sklo 4.4.0-36-generic #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
google chroom Версия 51.0.2704.106 (64-bit)

Sayman
21.09.2016, 07:54
а можно какой-нить ютуб запилить, чтобы можно было глянуть тем, у кого нет вектора (и даже понятия не имеют как его запускать в виде эмулятора)?

Black Cat / Era CG
21.09.2016, 12:15
у меня приводит опять к загрузке этого файла на компьютер

artyr@sklo:~$ uname -a
Linux sklo 4.4.0-36-generic #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
google chroom Версия 51.0.2704.106 (64-bit)
Аналогично. Win7. Последняя Лиса.

svofski
21.09.2016, 12:29
Я плохо продумал этот вопрос. Когда страница открывается, она предлала запустить ром из зипа (testtp), а в меню выбора файла D&D не работает. Сейчас поправил на прямую загрузку ROM-a и D&D должен заработать. Если вдруг все же нет, снизу есть большая кнопка "Есть свежий ROM?", которая открывает диалог выбора файла.

artyr_n
21.09.2016, 14:00
Сейчас поправил на прямую загрузку ROM-a и D&D должен заработать.
Да так удалось перенести zip и программа запустилась.

ivagor
21.09.2016, 17:44
Спасибо за отзывы! В связи с появлением некоторого интереса выкладываю оптимизированную версию. Оптимизированы и расчет и рисование и стирание.
Кстати, попробовал шахматную штриховку - оказалось не очень, оставил вертикальную

- - - Добавлено - - -


чтобы можно было глянуть тем, у кого нет вектора (и даже понятия не имеют как его запускать в виде эмулятора)?
svofski дал ссылку (http://asdasd.rpg.fi/scalar/vector06js/) на его онлайн-эмулятор, туда можно дропнуть прямо zip. Программа запустится, управление - курсор

svofski
21.09.2016, 19:50
rc11 вообще летает. Было бы здорово доделать до презентабельного состояния, с какими-нибудь пояснительными и хвастливыми текстами, может быть с автоматической гулялкой, чтобы можно было просто запустить и втыкать.

Sayman
21.09.2016, 20:04
разобрался. побегал малость. медленно очень. если делать по методу от lodev (у которого dda сильно завязан на float и double), то быстрее не факт, что получится. а про текстуры можно забить в этом случае. на msx тоже на dda хотели делать raycasting. что-то там не фонтан получилось как...

ivagor
23.09.2016, 17:27
И еще немного оптимизировал. В большей степени отрисовку, но расчет тоже ускорен.


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

- - - Добавлено - - -

Кстати, средний FPS по результатам прогона ролика примерно 5.25

svofski
23.09.2016, 19:12
Запустил и воткнул, спасибо!

Игры типа Dark Side сильно отличались по графике, там было настоящее 3D, но мне кажется, что тут это не главное. Если иметь богатое воображение, то и вокруг такого можно было бы наплести чего-нибудь фантастическое и загадочное.

yur
23.09.2016, 19:57
Скорость действительно пободрее предыдущих версий

KTSerg
24.09.2016, 08:55
... Если иметь богатое воображение, то и вокруг такого можно было бы наплести чего-нибудь фантастическое и загадочное.
Для поколения игравшего в "Формула-1" на МК61/МК52 ещё и не такое возможно :)

Sayman
24.09.2016, 11:14
ivagor, расчёты реалтайм или табличками?

ivagor
24.09.2016, 17:16
15я версия
1. Ускорил средний (считал по ролику) FPS до 6.
2. Программу разбухшую запаковал, чтобы быстрее грузилась в реал. Кроме того теперь при старте отключается квазидиск, что позволяет корректно стартовать из микродосов/сипиэмов его использующих.


ivagor, расчёты реалтайм или табличками?
Все что смог - переложил в таблицы, остальное, понятное дело, приходится считать.

svofski
26.09.2016, 21:19
KTSerg, я именно об этом ;)

vladtru
28.09.2016, 10:42
Браво! Отличный, правильный 3D-лабиринт без искажений, и скорость хорошая. Теперь-то уж точно нет сомнений, что и на "Векторе" могут быть "настоящие" 3D-игры. Если добавить пару предметов и персонажей, можно получить почти игру (типа Gate Crasher на Tandy CoCo3 - там, кстати, около 10 кадр/с).

ivagor
29.09.2016, 17:05
Думаю взятие планки 7 FPS (сейчас 7.1) стоит отметить релизом.
Немного технических подробностей
1. 80 колонок (160 точек в режиме 256) x 128 строк
2. Интерполяция в 4 или 2 раза
3. Деление: одно процедурой по алгоритму blackmirrorа, другое - по таблице
4. Умножения: оба процедурами
Все же упражнения с пи не прошли даром - деление и умножение перетащил оттуда.
Распаковщик - быстрый mlz b2mа

PPC
30.09.2016, 21:22
ivagor, ты уже задумываешься о текстурировании, или сначала допилишь до 8-10 fps?

ivagor
01.10.2016, 06:20
задумываешься о текстурировании, или сначала допилишь до 8-10 fps?
Сначала я перенес C (lodev)->матлаб (варианты без текстур и текстурированный).
Для 8080 планировал попробовать нетекстурированный и если будет запас по скорости - добавить текстуры. Но теперь я настроен пессимистично, вряд ли для вектора будет вариант с текстурами. Даже без них до 8 FPS вряд ли допрыгну, может 7.5. Но для другого компа может все же попробую

Sayman
01.10.2016, 08:40
ivagor, попробуй wolf48 перетащить. И фпс поднимится и текстурки будут.

Error404
01.10.2016, 16:08
Но для другого компа может все же попробую

Мы - с Орионами-ПРО - ждем. :)
Z80, турборежим, плюшки всякие...
Хоть что-то будет из ПО для чего все это делалось.

А вообще, получается, математические алгоритмы проигрывают тем "псевдо 3D" на которых делались "DOOM-ы" для ZX?

ivagor
01.10.2016, 17:44
ivagor, попробуй wolf48 перетащить. И фпс поднимится и текстурки будут.
приблизительная оценка (http://zx-pk.ru/threads/21073-ambal-3d.html?p=590180&viewfull=1#post590180)


получается, математические алгоритмы проигрывают тем "псевдо 3D" на которых делались "DOOM-ы" для ZX?
Для меня это первый опыт самостоятельной реализации рейкастера для 8080, некоторые решения неоптимальные.
1. Сильно влияет правильный выбор коэффициента масштабирования - пробные прикидки уменьшения диапазона одного из множителей в два раза дали заметную прибавку к скорости, но и побочные эффекты
2. Карта должна содержать поменьше "открытых" пространств, это и пункту 1 поможет
3. z80 лучше годится для таких вещей

- - - Добавлено - - -

Радио интереса, если просто прогнать rc21
на z80 - 7.6 FPS (за счет mov r,r; inr; dcr)
на 8085 (пк-6128) - 7.8 FPS (за счет mov r,r; inr; dcr; условных переходов)
и это без оптимизации под указанные процы

svofski
02.10.2016, 01:21
Внесу свою скромную лепту, вот прямая ссылка для запуска rc21.zip одним кликом:
http://asdasd.rpg.fi/scalar/vector06js/?roms/rc21.zip

ivagor
07.10.2016, 17:20
Финальная (или близкая к ней) версия для 06Ц.
1. Заметил, что в rc21 рисовалось 77 колонок вместо обещанных 80. В качестве компенсации в rc28 85 колонок (поле зрения 60 градусов)
2. Добавил в интерполяцию x2 проверки примерно как в x4 (в одном месте была видна неаккуратность стены)
Оптимизации позволили сохранить FPS на уровне rc21 (и даже чуть быстрее), несмотря на вышеперечисленное.

svofski
07.10.2016, 18:24
http://asdasd.rpg.fi/scalar/vector06js/?roms/rc28.zip

tnt23
07.10.2016, 21:35
А на ютубу кто-нибудь запульнёт?

Black Cat / Era CG
07.10.2016, 21:46
А на ютубу кто-нибудь запульнёт?
По ссылке выше можно побегать, ничего для этого не делая - стартует автоматом!

ivagor
26.10.2016, 15:33
до 8 FPS вряд ли допрыгну
И все же в rc38 допрыгнул до 8 FPS.
Кроме ускорения еще есть мелкие коррекции, из которых можно отметить дорботку опроса клавиатуры для совместимости с большими частотами проца.

ivagor
29.10.2016, 15:06
Пара версий для любителей изощрений (типа меня самого).
rc38vm1 - да, как несложно догадаться по названию, это версия оптимизированная для 580ВМ1. Ускорение на 10% (до 8.8 FPS). Неплохо, но впечатление несколько смазывает то, что просто запустив rc38 на пк-6128ц получим те же 8.8 FPS за счет более быстрого исполнения некоторых команд, а над оптимизацией под ВМ1 пришлось посидеть.
Не исключено, что под 8085 можно оптимизировать и до 9 FPS, но я пошел другим путем.
rc3885 - версия для пк-6128ц. Она качественнее - 11 цветов вместо (6 цветов+штриховка). За качество пришлось немного заплатить быстродействием - выдает 8.3 FPS, но это все же быстрее версии для 06ц.

- - - Добавлено - - -

Кстати, эти варианты еще и чуть компактнее версии для 8080

svofski
29.10.2016, 17:16
rc38 для Вектора-06ц в однокличье (http://sensi.org/scalar/vector06js/?roms/rc38.zip).

ivagor
31.10.2016, 20:14
Мне все же стало интересно, насколько затормозило добавление оттенков rc3885. Оказалось, что если ограничиться 6 цветами + штриховкой (как во всех версиях для 06ц, в т.ч. в rc38 и rc38vm1), то станет (в rc3885fast) аж 9.3 FPS! 6128 рулит, ему бы еще допОЗУ и несколько десятков тысяч экземпляров в свое время.

yur
21.11.2016, 23:01
каким эмулятором запускать rc3885fast и rc3885 ?

Ramiros
22.11.2016, 08:30
каким эмулятором запускать rc3885fast и rc3885 ?

Любым, только это нужно делать в конфигурации ПК-6128Ц.

yur
23.11.2016, 12:01
Любым, только это нужно делать в конфигурации ПК-6128Ц.

это как?

Ramiros
23.11.2016, 15:27
это как?

File->Config->Load... и загрузить файл PK-6128c.con

yur
23.11.2016, 16:58
File->Config->Load... и загрузить файл PK-6128c.con
у меня таких опций нет в эмуляторе

Ramiros
23.11.2016, 22:24
у меня таких опций нет в эмуляторе

Написали бы тогда, что за эмулятор...

yur
24.11.2016, 09:21
Написали бы тогда, что за эмулятор...

Универсальный - EMU

b2m
24.11.2016, 11:45
Ну тогда после запуска просто выбрать PK-6128c. Вот только как там грузить rom - я не знаю.
F11 - бейсик
Shift+F11 - загрузка с кассеты
Ctrl+F11 - загрузка с дискеты

- - - Добавлено - - -

Можно, конечно, грузить через отладчик:
- через меню выходим в отладчик
- в дампе идём на адрес 0100
- нажимаем Ctrl+L Enter
- выбираем rom
- кликаем на регистр PC и вводим 0100
- запускаем клавишей F5

yur
25.11.2016, 01:31
как запустить ром я знаю - он в этом эмуляторе не запускается ни в одной конфигурации вектора.
в меню есть значок для смены рома - выбираешь ром, затем держишь клавишу F2, нажимаешь клавишу F11, отпускаешь клавишу F2 после того как заполнилась жёлтая полоса и нажимаешь F12.
Можно в диалоге открытия файла выбрать расширение и открыть *.rom

b2m
25.11.2016, 10:23
он в этом эмуляторе не запускается ни в одной конфигурации вектора.
Ну так фишка то в том, что надо запускать не в конфигурации Вектора, а в конфигурации ПК-6128ц. Я вчера лично запускал через отладчик, поэтому сверху про него и добавил.


в меню есть значок для смены рома - выбираешь ром, затем держишь клавишу F2, нажимаешь клавишу F11, отпускаешь клавишу F2 после того как заполнилась жёлтая полоса и нажимаешь F12.
В ПК-6128ц такой фичи нет.


Можно в диалоге открытия файла выбрать расширение и открыть *.rom
Можно-то-можно, вот только биос ПК-6128ц вроде не грузит из внешнего ПЗУ.

yur
25.11.2016, 12:16
спасибо за информацию - пробовал через отладчик
результат нулевой - может эмуль битый

ivagor
09.08.2019, 19:40
В рамках плановой эксгумации покопался в потрохах рейкастера, убрал лишнее, добавил нужное и ускорил аж до 8.2 FPS (в rc38 (https://zx-pk.ru/threads/26939-raycasting.html?p=889423&viewfull=1#post889423) было 8.0 FPS). Что особенно приятно, размер при этом не вырос, а даже чуть-чуть уменьшился.
Несложно посчитать, что если каждые три года ускорять на 0.2 FPS, то всего через 209 лет будет достигнут знаковый рубеж в 50 FPS.

svofski
09.08.2019, 20:59
Очень шустро! Добавил rc44 в картотеку.

svofski
10.08.2019, 00:17
Не могла ли в расчеты вкрасться ошибка? Если планировать линейное приращение производительности, то:

(50-8.2)/0.2 = 209 итераций, но одна итерация в три года, значит
209 × 3 = 627 лет

Но не стоит унывать! На самом деле ты ускорил быстродействие на 2.5%. То есть приращение будет x*0.025. Это значительно веселее: последовательность x = x + x*0.025 перевалит за 50 уже через 75 итераций, или 75 × 3 = 225 лет

То есть уже совсем скоро.

ivagor
10.08.2019, 07:22
209 × 3 = 627 лет
Увы, ты прав. Получается, до 50 я все же вряд ли успею разогнать, 209 лет то я как-нибудь протяну, а вот 627 под вопросом.
Что касается увеличения производительности в разы, а не на фиксированную величину, то тут я не соглашусь, мой вариант более реалистичный.

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

ivagor
10.08.2019, 18:57
Для нормального текстурирования у меня не хватает моральных сил, а у вектора - физических. Поэтому сделал экспериментальный вариант с одномерным текстурированием. "Текстуры" две - одна сплошная, как раньше, а другая - с черной полосой посередине. Сплошным оставил только желтый "приз", а все стены сделал с полосой. Выглядит своеобразно, но пожалуй несколько поинтереснее просто сплошных стен. Это не рекордная версия, она немного медленнее rc44, точный FPS не замерял.

svofski
11.08.2019, 22:15
Потерь FPS я не ощущаю, а многообразие текстур сразу делает этот мир более интересным.

А можно чистить верх и низ разными цветами, или паттернами, чтобы пол и потолок отличались друг от друга? Тогда иммерсивность лучеброса станет совсем неумолимой.

ivagor
12.08.2019, 07:05
Залить пол и потолок можно, только fps скорее всего заметно просядет. Быстро залить пол и потолок одноцветным паттерном можно в версии для 6128, если оставить 8 цветов для стен, но это не спортивно, надо думать про 06Ц.

ivagor
20.01.2020, 08:21
Кто хотел ютубу - вот почти что она (https://www.youtube.com/watch?v=pFaxkQbBaKU) (серьезно, лабиринт тот же самый), только на векторе медленно, зато без глюков. Что можно нарисовать при увеличении тактовой на порядок (относительно вектора), использовании улучшенного z80 c аппаратным умножением и удобного видеорежима можно посмотреть в следующих роликах автора. У этого, правда, есть и обратная сторона - это хорошая иллюстрация, какие ресурсы необходимы для быстрого рейкастера с текстурированием и спрайтами. Т.е. на голом векторе так красиво и быстро, как в следующих роликах, никогда не будет.

- - - Добавлено - - -

Оказывается VladTru сделал ролик (https://www.youtube.com/watch?v=QbRUMrDI9pQ) со старой версии моего рейкастера.

ivagor
28.01.2020, 18:11
Пользуясь временным всплеском мозговой активности взял на себя повышенные обязательства и выполнил шестилетний план за полгода. Разогнал средний FPS c 8.2 (в rc44 (https://zx-pk.ru/threads/26939-raycasting.html?p=1023427&viewfull=1#post1023427)) до 8.6.
Код при этом не разбух, а даже немножко подсушился, т.е. уменьшение размера связано не только с более прогрессивным архиватором.
Скорее всего это последняя версия с данным "роликом на движке". Слишком близко можно подходить к стенам, собираюсь это изменить и старый демонстрационный прогон станет непригодным для новых условий.

svofski
29.01.2020, 13:46
Смотрится очень круто, особенно видимо когда FPS поднимается выше среднего. Ты замерял минимум-максимум?

ivagor
29.01.2020, 14:14
Ты замерял минимум-максимум?
Нет, только средний по больнице. По моим ощущениям тормоза заметны только когда "смотришь вдаль" от одного края (или угла) большой комнаты в противоположный. На среднем расстоянии уже нормально, на близком - я бы даже сказал быстро (по 8битным меркам).

- - - Добавлено - - -

Очевидно самые быстрые места - белый коридор и комната, зеленая комната. Между синими кубиками тоже сравнительно быстро бродит.

svofski
29.01.2020, 14:47
Очевидно самые быстрые места - белый коридор и комната, зеленая комната. Между синими кубиками тоже сравнительно быстро бродит.
Прикольно. У меня пока не сформировалась устойчивая терминология в этой области.

ivagor
30.01.2020, 18:24
Семь лет назад писал (https://zx-pk.ru/threads/18798-emulyator-quot-zx-spectrum-48-quot-na-quot-vektore-06ts-quot.html?p=587783&viewfull=1#post587783) о впечатлениях от запуска wolf48 Alone Codera с использованием кишиневского эмулятора спектрума (в emu). Теперь созрел на адаптацию к вектору с z80. Сначала потренировался на орионе-про, поэтому для вектора хака уже побыстрее, но сам про быстрее почти в три раза, поэтому не стоит сравнивать. Для запуска нужен z80 (любой вариант адаптера) и кваз (любой). Работает во всех эмуляторах с поддержкой z80 (emu, emu80, VV). Попутно выяснил, что в emu80 есть проблема с im2, по крайней мере в конфиге вектора. Wolf я переделал на im1, но эмулятор все же хорошо бы тоже поправить.
Что можно улучшить (теоретически, на практике маловероятно):
1. Можно переделать так, чтобы не требовался кваз.
2. Можно ускорить.
Что хотелось бы, но вряд ли будет - переделка на 8080. Появление реалов с z80 более вероятно (тем более прецедент уже был даже на форуме).

- - - Добавлено - - -

Не все читают readme, поэтому напишу тут - повороты на клавишах '1' и '2', курсор влево и вправо - стрейф.

ivagor
14.06.2020, 11:05
Для сравнения БКшный рейкастинг (https://www.youtube.com/watch?v=68zWIiIxgzA) (канал VladTru). Нескромно утверждаю, что у меня для вектора получилось лучше, зато там 1995 год, скорее всего с тех пор и для БК сделали получше.

ivagor
02.03.2021, 20:23
Изыскал внутренние резервы и дожал рейкастер (https://disk.yandex.ru/d/rtctL7g6qTIlKA) до круглой цифры 9 FPS. Тестовый ролик на движке не менялся (DDA так и не трогал), поэтому вполне можно сравнить с предыдущей (https://zx-pk.ru/threads/26939-raycasting.html?p=1043702&viewfull=1#post1043702) выложенной версией - ускорение на 0.4 FPS.

- - - Добавлено - - -

Посмотрел ветку и оценил динамику. Основную оптимизацию до 8 FPS сделал примерно за месяц, а следующий 1 FPS выгрызал 4 с половиной года.

ivagor
08.04.2021, 20:07
Попробовал уменьшить (загрубить) разрешение по горизонтали в 2 раза - по ощущениям стало заметно приятнее, появился некоторый запас быстродействия для каких-нибудь усовершенствований. Или можно портануть на компы с цветовым разрешением <=45 по горизонтали.

ivagor
06.05.2021, 12:05
Дожал (https://disk.yandex.ru/d/wLNjXQljmqKW8A) уменьшение столбцов до упора, их стало 21 вместо 85 (но широкие). Выглядит конечно грубо, зато намного быстрее - 18.8 FPS. Шаг перемещения (и угол вращения) не менял, поэтому по карте не ходит, а бегает. С такой скоростью можно даже какие-то игрушки с рейкастерным движком делать, если не пугает отсутствие текстур.

ivagor
19.11.2021, 17:02
Ответ на вопрос "Что за уродливые картинки?" - это скриншоты из рейкастера с текстурированием для вектора. Есть нюанс - это сишный рейкастер с плавучкой (асма ноль), чудовищно тормозной, зато для 8080.