Четверг, 21 сентября 2017, 07:56

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Страница 1 из 11
Форум игроделов » Ваши проекты » Разработка движков и сред разработки » Raycasting Game Constructor (Почти RGM, но не он)
Raycasting Game Constructor
VuvkДата: Четверг, 07 сентября 2017, 19:11 | Сообщение # 1
постоянный участник
Сейчас на сайте
Всем привет! Решил создать отдельную тему, т.к. разработка начала активно вестись после обсуждения в этой теме.
Итак, что же это такое?
Raycasting Game Constructor - конструктор олдскульных игр жанра FPS
Жанровая направленность: FPS, Action
GAPI: а нет его. Чистый программный рендеринг!
Язык программирования: C11 для "запускатора", ObjectPascal/FreePascal для редактора карт и ресурсов
Платформы: Linux, Windows, гипотетически MacOS
Лицензия: коммерческая, проприетарная?

Что готово сейчас:
[2017-09-07]
+ рендеринг мира из кубов аля Wolf3D, но с полом/потолком, дырами в потолке/полу, отображение неба;
+ разные плитки для пола/потолка;
+ лютые оптимизации рендеринга, потратил на это несколько дней, выжимая FPS по единичке. Думаю, что всё равно есть над чем поработать;
+ туман;
+ ускорение рендеринга потоками из стандарта C11 (библиотека tinycthread);
+ управление качеством картинки "на лету";
+ текстуры 128х128 (можно и больше, но зачем?);



Тестовые билды:
v007 Win32


v006 Win32
v006 Linux x64 (однако поведение странное. Надо и над этим поработать)


Горячие кнопки:
F - включить/выключить туман
G - включить/выключить "красивое" небо
H - включить/выключить рисование потолка
J - включить/выключить рисование пола
"-" - уменьшить детализацию
"+" - увеличить детализацию

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

Всем спасибо за внимание!


Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!


Сообщение отредактировал Vuvk - Суббота, 09 сентября 2017, 13:26
GWÁLÐДата: Пятница, 08 сентября 2017, 00:01 | Сообщение # 2
был не раз
Сейчас нет на сайте
Цитата
+ текстуры 128х128 (можно и больше, но зачем?);


А почему бы и нет, вдруг найдется художник, который с помощью красивых больших текстур захочет сделать более красивую картинку к примеру.
Если есть возможность, лучше предоставить этот выбор пользователям.

Цитата
Язык программирования: C11 для "запускатора", ObjectPascal/FreePascal для редактора карт и ресурсов

Одного меня беспокоит зачем было делать два языка и почему нельзя было сделать для редактора карт и ресурсов что-то си-подобное раз используется аж новый стандарт чистого Си?

Цитата
после обсуждения в этой теме.

Почитал тему, да в Steam можно продать все что угодно. Так что ориентируйся на продажу. Данный инструмент, если он будет не сложным купят однозначно.

Нечего не скажу определенного. Но меня просто беспокоит, что вы зачем-то решили использовать сразу несколько языков для разработки, подобное тяжело поддерживать. Разве что связка С++ + "Script_Name" (или C + скрипт_нэйм не важно). Т.е. второй язык как бы является служебным. Зачем использовать два "главных" языка для меня загадка, если честно.

Притом судя по теме вы еще хотите ввести lua. Lua сам по себе неплохая идея. Просто у вас получается будет уже 4 языка? :)


Сообщение отредактировал GWÁLÐ - Пятница, 08 сентября 2017, 00:09
VuvkДата: Пятница, 08 сентября 2017, 05:58 | Сообщение # 3
постоянный участник
Сейчас на сайте
Цитата GWÁLÐ ()
Просто у вас получается будет уже 4 языка? :)

Я насчитал только три...
В любом случае пользователи получат готовые исполняемые файлы, так что на чем оно написано - моя головная боль.
Как я вижу процесс использования конструктора :
1. пользователь создает новый проект в редакторе, выбрав целевую папку. В эту папку закидываются среда исполнения, паки со стандартными ресурсами и скрипты на lua (если всё-таки я буду их использовать)
2. пользователь меняет стандартные ресурсы / добавляет новые
3. пользователь при желании правит lua-скрипты, но это не обязательно

По поводу разных языков. Оба языка я активно использую ежедневно, так что для меня ничего нового. Я мог бы всё написать на FreePascal, но FPC выдаёт чуть более медленный код, чем GCC, а для программного рендеринга это непростительная роскошь. Я мог бы написать всё на Си + какой-нибудь GTK, но тогда пользователям Windows нужно будет устанавливать что-то лишнее (среду GTK). Win API? Но для других осей его нет)) Поэтому я решил писать среду исполнения на Си для максимального быстродействия, а для кросс-платформенного "формошлёпства" использовать Lazarus (IDE для FPC + LCL).
Также я использую заведомо кросс-платформенные библиотеки, чтобы это всё работало на разных ОС без плясок с бубном или варганом.

Благодарю за проявленный интерес, комментарии и за ободрение:
Цитата GWÁLÐ ()
в Steam можно продать все что угодно


Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!


Сообщение отредактировал Vuvk - Пятница, 08 сентября 2017, 06:04
ByurrerДата: Пятница, 08 сентября 2017, 08:19 | Сообщение # 4
частый гость
Сейчас нет на сайте
Vuvk, качнул архив (v006 Win32), пытаюсь распаковать WinRarом а он мне:

Заново скачал, то же самое.
Я не силен в кроссплатформенном программировании, но почему бы не сделать все на Си? А то что придется устанавливать что-то лишнее это уже юзеры пусть думают, зато все на одном языке. Но это имхо, возможно ошибочное, однозначно тебе виднее))
Что используешь для программного рендера (как-то библиотека)?


Сообщение отредактировал Byurrer - Пятница, 08 сентября 2017, 08:29
VuvkДата: Пятница, 08 сентября 2017, 08:22 | Сообщение # 5
постоянный участник
Сейчас на сайте
Byurrer, пора обновить винрар)) Или использовать 7-zip.
В будущем буду выкладывать в архивах zip, чтобы не было таких оказий...
Цитата Byurrer ()
Что используешь для программного рендера (как-то библиотека)?

Нет, только свои мозги. Оптимизировал алгоритмы, активно использую битовые операции, заменил все повторяющиеся операции деления на умножение, сократил количество побочных переменных и вызовов функций. Узнал много нового (например, double работает быстрее на 64-битных процессорах даже если приложение 32-битное, инлайновые функции могут тормозить программу и т.д.). Сейчас попробую заменить числа с плавающей точкой на фиксированную - должно дать прирост на слабых/старых процессорах. Далее на повестке многопоточность через thread pool.
Всё-таки главная проблема - быстрый рендеринг. Редактор это уже фигня.


Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!


Сообщение отредактировал Vuvk - Пятница, 08 сентября 2017, 08:47
ByurrerДата: Пятница, 08 сентября 2017, 10:04 | Сообщение # 6
частый гость
Сейчас нет на сайте
Цитата Vuvk ()
Нет, только свои мозги.
само собой)) А какое средство используешь? Какие функции, откуда? В режиме ядра?
VuvkДата: Пятница, 08 сентября 2017, 11:15 | Сообщение # 7
постоянный участник
Сейчас на сайте
Byurrer, попиксельно формирую буффер и его вывожу на экран. На самом деле буфферов несколько будет, они будут склеиваться в один (для минимизации лишних расчетов). Никаких функций ядра...

Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!
ByurrerДата: Пятница, 08 сентября 2017, 12:04 | Сообщение # 8
частый гость
Сейчас нет на сайте
Vuvk, а на экран как/чем выводишь? OpenGL?

Сообщение отредактировал Byurrer - Пятница, 08 сентября 2017, 12:18
VuvkДата: Пятница, 08 сентября 2017, 13:28 | Сообщение # 9
постоянный участник
Сейчас на сайте
Byurrer, по умолчанию блиттинг, в SDL2 создается рендерер с флагом SDL_RENDERER_SOFTWARE. При запуске с ключом "-accelerated" создается SDL2-рендерер с флагом SDL_RENDERER_ACCELERATED ("the renderer uses hardware acceleration"). Подозреваю, что во втором случае рисуется через OpenGL, но в исходники sdl лезть неохота. Да и если это так, то просто рисуется полигон с формируемой на лету текстурой. Профита почти никакого (+ 1-3 FPS).

Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!


Сообщение отредактировал Vuvk - Пятница, 08 сентября 2017, 13:28
ByurrerДата: Пятница, 08 сентября 2017, 14:20 | Сообщение # 10
частый гость
Сейчас нет на сайте
Vuvk, понял, спасибо за ответ))
Цитата Vuvk ()
Профита почти никакого (+ 1-3 FPS)
если не меньше)
Еще интересно почему именно программный рендер? Почему не хочешь сосредоточится именно на игровой составляющей и использовать аппаратные возможности рендера? Это же ускорило бы релиз, не?
bodya_WMДата: Пятница, 08 сентября 2017, 14:24 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Vuvk не осилил GUI на C, поэтому решил формошлепать его на FPC.

Разработчик игрового движка WaveGameEnvironment2D
VuvkДата: Суббота, 09 сентября 2017, 12:54 | Сообщение # 12
постоянный участник
Сейчас на сайте
Цитата Byurrer ()
Еще интересно почему именно программный рендер? Почему не хочешь сосредоточится именно на игровой составляющей и использовать аппаратные возможности рендера? Это же ускорило бы релиз, не?

Во-первых, желание сделать, как в оригинале, но лучше/быстрее.
Во-вторых, потренироваться в оптимизации и научиться чему-то новому. Всё же полезные навыки.
Также, возможно, я и сделаю отдельный рендер на OpenGL. Но это не точно.

Цитата bodya_WM ()
Vuvk не осилил GUI на C, поэтому решил формошлепать его на FPC.

Йее, шуточки за 300 подъехали. Кто-то вообще даже смысл рейкаста не осилил ;)

По таким мелким вопросам можете в ЛС писать. Не хочется тему засорять.

Добавлено (09 сентября 2017, 12:54)
---------------------------------------------
+ Изменение качества картинки на лету поправлено. Теперь больше похоже на правду.
+ Исправлен тайминг - отныне игра идет с одинаковой скоростью на Win и Lin.
+ Некоторые повторяющиеся расчеты вынесены в таблицу, которая формируется при старте. Прирост ~5%.
+ Частично перенесены расчеты вещественных чисел с плавающей точки на фиксированную с помощью библиотеки libfixmath. В однопоточном рендеринге прирост ~10%. Результат будет разниться от машины.
Почему частично:
1. неизбежны потери из-за погрешностей. В оригинале с разрешением 320х200 это бы прокатило. Но не здесь...
2. в некоторых местах конверсия из одного вида числа в другое медленнее, чем расчет напрямую.

Заметил несколько интересных фактов:
1. антивирус Касперского очень сильно просаживает фпс
2. на Linux FPS примерно вдвое выше (даже в однопоточном режиме), чем на Windows. Одна и та же машина, один и тот же код, а результат разный в зависимости от ОСи.
3. режим "-accelerated" (вывод через OpenGL сформированного буффера) иногда неплохо добавляет производительности - зависит опять же от машины и от ОСи.

Остаётся попробовать thread pool (например, адаптировать этот - A simple C thread pool). Если и это не даст особого прироста, то стоит задуматься... Может схитрить и сделать портальный рендеринг вместо рейкастинга... или вообще отказаться от программного рендеринга и на OpenGL слепить... слишком просто ))

Результат проведенных махинаций:


Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!


Сообщение отредактировал Vuvk - Суббота, 09 сентября 2017, 20:53
bodya_WMДата: Суббота, 09 сентября 2017, 13:12 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
Vuvk,
Цитата
Кто-то вообще даже смысл рейкаста не осилил

Ты что ли? Где портальный рендеринг?
Зачем ты пишешь GUI на FPC если можно на C? Значит не осилил.


Разработчик игрового движка WaveGameEnvironment2D
VuvkДата: Суббота, 09 сентября 2017, 13:30 | Сообщение # 14
постоянный участник
Сейчас на сайте
Подкинул тестовый билд v007 под Win32. Ссылка в шапке. Туда-сюда перестану выкладывать промежуточные итоги. Сейчас я делаю это в надежде на тестирование желающими, которые отпишутся мне о FPS и их машине.
Уже сейчас в голове есть соображения, как я могу сделать быстрое "освещение" секторов. Оно будет "квадратное", но думаю, что в тему. Также есть идейка добавить анимированные текстуры для карты.

bodya_WM, facepalm blahblah


Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!


Сообщение отредактировал Vuvk - Суббота, 09 сентября 2017, 20:35
RealsalewaДата: Суббота, 09 сентября 2017, 15:06 | Сообщение # 15
участник
Сейчас нет на сайте
Тест RGC 007

Notebook. Samsung NP-R560. Mobile DualCore Intel Core 2 Duo P8400, 4096Mb, NVIDIA GeForce 9600M GS (256 MB), Win 10

rgm_one_thread_double - однопоточный рендеринг, плавающая точка - 33-56fps
rgm_one_thread_fixed - однопоточный рендеринг, фиксированная точка с потоками 41-66fps
rgm_c11_threads_double - 4 потока, плав.точка - 63-95 fps
rgm_c11_threads_fixed_4thrd - 4 потока, фикс.точка - 70-114fps
rgm_c11_threads_fixed_8thrd - 8 потоков, фикс.точка - 69-79fps

AMD Phenom II X6 Black Edition 1100T, 4GB, ASUS EN GTX460, Win 10

rgm_one_thread_double - однопоточный рендеринг, плавающая точка - 42-60fps
rgm_one_thread_fixed - однопоточный рендеринг, фиксированная точка с потоками 45-40fps
rgm_c11_threads_double - 4 потока, плав.точка - 90-122 fps
rgm_c11_threads_fixed_4thrd - 4 потока, фикс.точка - 91-127fps
rgm_c11_threads_fixed_8thrd - 8 потоков, фикс.точка - 74-138fps

i7-6700, GTX1060 MSI 6GB, Corsair 16GB RAM, Win 10

rgm_one_thread_double - однопоточный рендеринг, плавающая точка - 96-224fps
rgm_one_thread_fixed - однопоточный рендеринг, фиксированная точка с потоками 83-223fps
rgm_c11_threads_double - 4 потока, плав.точка - 260-460fps
rgm_c11_threads_fixed_4thrd - 4 потока, фикс.точка - 85-474fps
rgm_c11_threads_fixed_8thrd - 8 потоков, фикс.точка - 407-639fps


PC: i7-6700, GTX1060 MSI 6GB, Corsair 16GB RAM, Win 10. CVAX — when you care enough to steal the very best.
"Несчетное количество людей возненавидят Новый мировой порядок и погибнут в протесте против него" - Герберт Уэллс, 1939 год.
VuvkДата: Среда, 13 сентября 2017, 17:26 | Сообщение # 16
постоянный участник
Сейчас на сайте
salewa, огромное спасибо за тестирование на разном железе и подробный отчет! Хоть некоторые результаты и выглядят странно, но я вижу, что целевые 60 FPS уже достигнуты даже на слабых ПК (я про ноут). Посмотрим, что нам даст трэд пул :)

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

Добавлено (10 сентября 2017, 11:51)
---------------------------------------------
+ ускорены функции перевода числа с фиксированной запятой в плавающую в библиотеке libfixmath;
+ исправлен мелкий баг с образованием неверных линий на полу/потолке (из-за погрешностей);
+ адаптирована библиотека A simple C thread pool. В оригинале используется pthread (который, как известно, работает только на системах POSIX), я переписал на С11 threads дабы это всё было кроссплатформенным. Прирост FPS нулевой. Однако рендеринг всё равно стал менее прожорливым, что однозначно плюсик:


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

Добавлено (13 сентября 2017, 17:26)
---------------------------------------------
Сейчас я пробую свою технику рейкастинга, основанную на секторах и сегментах. Плюс техники в том, что можно с легкостью создавать кривые стены, а также перемещающиеся. Просчет точки столкновения быстрый, но луч бьёт насквозь и нужно проверять все элементы карты. Так что нужно теперь быстро сортировать видимые/невидимые сектора и оптимизировать уже новые алгоритмы.
Принцип на видео.
Реализовал что-то типа "фрустум куллинга" (на последнем видео с 0:50 видно, как отсекается вращающийся треугольник). Есть ещё идея проверять на пересечение только повернутые к игроку сегменты (на картинке ниже луч бьет в стены, но проверяются только зеленые сегменты).


В общем, теперь надо пол/потолок и попытаться это всё оптимизировать. ФПС в этой реализации более стабильный, т.к. удаленность сегмента от камеры вообще не играет никакой роли.


Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!


Сообщение отредактировал Vuvk - Воскресенье, 10 сентября 2017, 11:51
Форум игроделов » Ваши проекты » Разработка движков и сред разработки » Raycasting Game Constructor (Почти RGM, но не он)
Страница 1 из 11
Поиск:

Все права сохранены. GcUp.ru © 2008-2017 Рейтинг