Подкинул тестовый билд v007 под Win32. Ссылка в шапке. Туда-сюда перестану выкладывать промежуточные итоги. Сейчас я делаю это в надежде на тестирование желающими, которые отпишутся мне о FPS и их машине. Уже сейчас в голове есть соображения, как я могу сделать быстрое "освещение" секторов. Оно будет "квадратное", но думаю, что в тему. Также есть идейка добавить анимированные текстуры для карты.
bodya_WM,
Сообщение отредактировал Vuvk - Суббота, 09 Сентября 2017, 20:35
Еще интересно почему именно программный рендер? Почему не хочешь сосредоточится именно на игровой составляющей и использовать аппаратные возможности рендера? Это же ускорило бы релиз, не?
Во-первых, желание сделать, как в оригинале, но лучше/быстрее. Во-вторых, потренироваться в оптимизации и научиться чему-то новому. Всё же полезные навыки. Также, возможно, я и сделаю отдельный рендер на 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 слепить... слишком просто ))
Результат проведенных махинаций:
Сообщение отредактировал Vuvk - Суббота, 09 Сентября 2017, 20:53
Byurrer, по умолчанию блиттинг, в SDL2 создается рендерер с флагом SDL_RENDERER_SOFTWARE. При запуске с ключом "-accelerated" создается SDL2-рендерер с флагом SDL_RENDERER_ACCELERATED ("the renderer uses hardware acceleration"). Подозреваю, что во втором случае рисуется через OpenGL, но в исходники sdl лезть неохота. Да и если это так, то просто рисуется полигон с формируемой на лету текстурой. Профита почти никакого (+ 1-3 FPS).
Сообщение отредактировал Vuvk - Пятница, 08 Сентября 2017, 13:28
Byurrer, попиксельно формирую буффер и его вывожу на экран. На самом деле буфферов несколько будет, они будут склеиваться в один (для минимизации лишних расчетов). Никаких функций ядра...
Byurrer, пора обновить винрар)) Или использовать 7-zip. В будущем буду выкладывать в архивах zip, чтобы не было таких оказий...
ЦитатаByurrer ()
Что используешь для программного рендера (как-то библиотека)?
Нет, только свои мозги. Оптимизировал алгоритмы, активно использую битовые операции, заменил все повторяющиеся операции деления на умножение, сократил количество побочных переменных и вызовов функций. Узнал много нового (например, double работает быстрее на 64-битных процессорах даже если приложение 32-битное, инлайновые функции могут тормозить программу и т.д.). Сейчас попробую заменить числа с плавающей точкой на фиксированную - должно дать прирост на слабых/старых процессорах. Далее на повестке многопоточность через thread pool. Всё-таки главная проблема - быстрый рендеринг. Редактор это уже фигня.
Сообщение отредактировал Vuvk - Пятница, 08 Сентября 2017, 08:47
Я насчитал только три... В любом случае пользователи получат готовые исполняемые файлы, так что на чем оно написано - моя головная боль. Как я вижу процесс использования конструктора : 1. пользователь создает новый проект в редакторе, выбрав целевую папку. В эту папку закидываются среда исполнения, паки со стандартными ресурсами и скрипты на lua (если всё-таки я буду их использовать) 2. пользователь меняет стандартные ресурсы / добавляет новые 3. пользователь при желании правит lua-скрипты, но это не обязательно
По поводу разных языков. Оба языка я активно использую ежедневно, так что для меня ничего нового. Я мог бы всё написать на FreePascal, но FPC выдаёт чуть более медленный код, чем GCC, а для программного рендеринга это непростительная роскошь. Я мог бы написать всё на Си + какой-нибудь GTK, но тогда пользователям Windows нужно будет устанавливать что-то лишнее (среду GTK). Win API? Но для других осей его нет)) Поэтому я решил писать среду исполнения на Си для максимального быстродействия, а для кросс-платформенного "формошлёпства" использовать Lazarus (IDE для FPC + LCL). Также я использую заведомо кросс-платформенные библиотеки, чтобы это всё работало на разных ОС без плясок с бубном или варганом.
Благодарю за проявленный интерес, комментарии и за ободрение:
ЦитатаGWÁLÐ ()
в Steam можно продать все что угодно
Сообщение отредактировал Vuvk - Пятница, 08 Сентября 2017, 06:04
Всем привет! Решил создать отдельную тему, т.к. разработка начала активно вестись после обсуждения в этой теме. Итак, что же это такое? Nuke3D - конструктор олдскульных игр жанра FPS Жанровая направленность: FPS, Action GAPI: OpenGL, DirectX, Software Rendering (Burning's Video) Язык программирования: C++ для "запускатора", ObjectPascal/FreePascal для редактора карт и ресурсов, JavaScript для скриптовой части Двигатель: в раннере используется WorldSim3D Платформы: Linux, Windows, гипотетически MacOS Лицензия: коммерческая, проприетарная?
Планируемые (реализованные) отличия от оригинала (RGM?): - три типа рендеринга; - поддержка современных разрешений экрана; - текстуры более высокого разрешения (ограничено искусственно); - гипотетическая возможность добавления бесконечного количества текстур, спрайтов, кадров анимации; - настраиваемые коллизии; - масштабирование спрайтов; - скайбоксы и их предпросмотр прямо в редакторе; - послойное рисование полов, стен, потолков; - поддержка множества форматов текстур: jpg, jp2000, bmp, png, tiff, tga и проч. - автоматическая подгонка редактором загружаемых текстур под размеры и необходимый движку формат; - управление количеством карт и скайбоксов; - удобный редактор, включающий в себя редактор ресурсов, карт, IDE для написания скриптов; - скриптовый язык программирования для управления логикой игры.
За прогрессом разработки вы можете следить здесь (обновляю редко) или в моем дневнике на ВКонтакте - Antoshka's Diary (обновляю довольно часто).
Что готово сейчас: [2017-09-07] + рендеринг мира из кубов аля Wolf3D, но с полом/потолком, дырами в потолке/полу, отображение неба; + разные плитки для пола/потолка; + лютые оптимизации рендеринга, потратил на это несколько дней, выжимая FPS по единичке. Думаю, что всё равно есть над чем поработать; + туман; + ускорение рендеринга потоками из стандарта C11 (библиотека tinycthread); + управление качеством картинки "на лету"; + текстуры 128х128 (можно и больше, но зачем?);
Скриншоты
Тестовые билды: v007 Win32 Описание В архиве несколько раннеров: rgm_one_thread_double - однопоточный рендеринг, плавающая точка rgm_one_thread_fixed - однопоточный рендеринг, фиксированная точка с потоками rgm_c11_threads_double - 4 потока, плав.точка rgm_c11_threads_fixed_4thrd - 4 потока, фикс.точка rgm_c11_threads_fixed_8thrd - 8 потоков, фикс.точка
v006 Win32 v006 Linux x64 (однако поведение странное. Надо и над этим поработать) Описание Более-менее стабильная и быстрая работа рендера. В архиве несколько экспериментальных "раннеров". full_screen.bat - запуск в полноэкранном режиме
Горячие кнопки: F - включить/выключить туман G - включить/выключить "красивое" небо H - включить/выключить рисование потолка J - включить/выключить рисование пола "-" - уменьшить детализацию "+" - увеличить детализацию
Очень интересны результаты тестов пользователями - какой FPS выдает раннер и на каком железе. Можно здесь, можно в личку.
Всем спасибо за внимание!
Сообщение отредактировал Vuvk - Пятница, 09 Ноября 2018, 08:19
Накидал тут тест разных плиток для пола/потолка и дыр, где будет рисоваться открытое небо: видео И ссылка, чтобы пощупать
Цитата
Сможешь ли довести до итога.
Это самое интересное. Но на удивление мне кажется, что эта поделка перспективней, чем мой олдскульный движок аля idTech2.
Цитата
Ещё под широкие разрешения бы.
Это вообще не проблема. Хоть сейчас могу сделать! Вот только рендеринг программный и чем шире полотно, тем быстрее падает фпс в геометрической прогрессии. Сначала нужны лютые оптимизации.
salewa, спасибо за фидбэк и тем более за видео. Вижу, что надо стремиться повышать FPS (хоть 30 это не мало, но чем больше, тем лучше конечно же).
Цитата
один раз лагнула на 2 секунды
Да, лагает в основном, если смотреть впритык в стену или под ноги/в потолок. Ещё буду над этим работать. В будущем.
Цитатаbodya_WM ()
Но если у тебя там 3D кубы то это уже не рейкастинг.
В том и дело, что у меня всё по-честному. Я про то и говорю, что если рендерить кубы в OpenGL, то это всё будет гораздо шустрее.
Сообщение отредактировал Vuvk - Вторник, 05 Сентября 2017, 18:08
Так как тема вызвала некоторый интерес как здесь, так и за пределами форума, то я решил накидать демку с базовым рендерингом стен и пола/потолка. Прикладываю демки для скачивания и аппробации всеми желающими! Скачать В архиве несколько вариантов. Если кто-то будет смотреть, то отпишитесь какой у вас FPS. Это честный программный рендеринг технологией "рейкастинг". Для запуска с аппаратной поддержкой ожидается ключ "-accelerated" (однако скорее всего это особо ничего не даст). Для небольшого смазывания ключ "-HQ". Можете попробовать запускать high_quality.bat.
Базовая версия rgm.exe
Версия со смешным багом, который стал фичей - блестящий пол с отражением. rgm_reflection.exe
Только стены. Самый быстрый рендер rgm_classic.exe
Оптимизировал, как бог мог. В голову приходит только попробовать использовать целочисленную математику (цисла с фиксированной запятой), что может не дать особого прироста к производительности. А также разделить пускание лучей на потоки. Буду ещё экспериментировать.
Сообщение отредактировал Vuvk - Вторник, 05 Сентября 2017, 14:29
Psycho, я очень трепетно отношусь к программному рендерингу, но в этом движке решил акцентировать внимание только на OpenGL. Да и необходимых познаний в АСМ у меня нет. Когда будет готов основной функционал, то буду изучать шейдеры и накручивать графоний, но до этого, как до луны. Амбициозная цель движка - запустить сингл оригинальной игры Quake2
Разрабатываю движок с олдскул-рендером на OpenGL 2.0 и чистом Си, который должен поддерживать все форматы idTech2 + некоторые современные. bodhi Game Engine (дневник разработки). На неделе: самописная загрузка текстур формата wal
загрузка и обработка текстур через библиотеки DevIL ИЛИ SDL2_image (по желанию программиста... меня)
самописный блюр текстур с настраиваемой интенсивностью
и самое главное - обработка BSP дерева и рендеринг карты (пока что без лайтмап и всего сопутствующего)