Перейти к содержимому

Движок Megakostyl

игры программирование трассировка лучей free pascal

Сообщений в теме: 44

#1
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Движок Megakostyl - это наш экспериментальный проект в области игростроения. Именно на нём серьёзных игр делать мы вряд ли будет, главная его задача - получение опыта и наработка базы для дальнейших разработок, в особенности (неспроста он так назван) - избавление от разного рода "костылей".

Для вывода графики используется технология обратной трассировки лучей, реализованная программно, видеокарта используется только для вывода конечного результата на экран. В качестве компилятора используется Free Pascal со средой разработки Lazarus. Вот список библиотек, которые используются или будут использоваться:

SDL2 - создание и управление окном, обработка различных событий типа клавиатуры и мышки, управление потоками;
OpenGL - графический API;
OpenAL - работа со звуком;
libOGG - формат ogg от Xiph.Org Foundation, а также их кодеки для мультимедиа:
Vorbis - музыка;
Theora - видео;
FLAC - звук (сжатие без потерь);
FreeType - для работы со шрифтами;
Bullet(?) - физический движок.

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

Спойлер Старая версия движка - показать

Последняя сборка (29.12.2014)
На данный момент реализовано следующее:
Графика
трассировка
- вывод уровня, состоящего из клеток;
- вывод примитивов (сферы, цилиндры);
- вывод спрайтов;
- декали на стенах, полу и потолке;
- мягкие тени (тут можно увидеть, что это такое);
- многопоточность;
общее
- mipmapping;
- mipmapping для спрайтов и декалей;
- normal mapping;
- detail textures;
- блики по Фонгу;
по движку
- базовая физика (столкновения со стенами и объектами);
- воспроизведение музыки (ogg Vorbis);
- воспроизведение видеороликов (ogg Vorbis+Theora);

Список ToDo
По трассировке:
- адаптивная групповая трассировка первичных лучей;
- оптимизация трассировки теневых лучей;
по графике:
- parallax mapping (normal map + height map);
- небо;
- HDR-освещение, Bloom;
- Depth of field;
- вывод объектов при помощи растеризации (например спрайты для систем частиц);
в целом по движку:
- искусственный идиот;
- пользовательский интерфейс;
- звуковая подсистема (воспроизведение звуков);
- допиливание физики;
- редактор уровней.


История изменений

Спойлер 2012 год - показать
Собственно, первые попытки реализации трассировщика. Была релизована трассировка 3d-моделей и примитивов типа плоскости и сферы. Помимо мягких теней также присутствовала трассировка вторичных лучей - отражённых и преломлённых. В качестве ускоряющих структур для 3d-моделей использованы kd-деревья, а для всей сцены в общем - bvh-дерево. Чуть позже к разработке подключился ещё один мифический персонаж, и мы с ним вместе занимались оптимизацией трассировки и даже размышляли о комбинировании трассировки теневых лучей и растеризации. Но, к сожалению, разработка прекратилась, так как мне надо было отлучиться на год, а мифический персонаж забил на всё.
Прикрепленное изображение: rt-01.jpg Прикрепленное изображение: rt-02.jpg Прикрепленное изображение: rt-03.jpg
Спойлер 2013 год - показать
В виду некоторых обстоятельств реализовано практически ничего не было. Но было решено попытаться реализовать трассировщик, работающий в реальном времени. Для этого следовало сделать различные упрощения в плане задания геометрии уровня. В качестве эталона была принята графика игры Blood, т.е. уровень задается секторами, состоящими из линий. На скриншотах можно лицезреть первые пробы.
Прикрепленное изображение: rt00.jpg Прикрепленное изображение: rt01.jpg Прикрепленное изображение: rt02.jpg
Спойлер 2014 год, январь - апрель - показать
Вернувшись в Тюмень, я понемногу начал пилить движок. Реализовал сектора с линиями, точнее, пока только один сектор, но с линиями.
Прикрепленное изображение: rt03.jpg Прикрепленное изображение: rt04.jpg
Добавил текстурирование, а позже и normal mapping.
Прикрепленное изображение: rt05.jpg Прикрепленное изображение: rt06.jpg
Затем решил расшить наконец-таки систему секторов.
Прикрепленное изображение: rt07.jpg
Однако в виду огромного количества костылей, начали проявляться непонятные глюки и косяки с тенями. Помучившись немного, я решил ещё сильнее упростить движок и сделать уровни на клетках.
Вот пара ранних билдов, я уже не помню чем они отличаются: Swiborg01, Swiborg02.
Спойлер 2014 год, сентябрь-октябрь - показать
Реализовав трассировку по клеткам, я добавил новый вид примитивов - цилиндр и занялся оптимизациями. Новых фич за это время практически не появилось, зато по оптимизации была проделана значительная работа, в том числе ассемблерные вставки с использованием SSE, упрощение вычислений путём замены на приближённые функции и др. Более подробно о проделанных оптимизациях я опишу как-нибудь отдельно.
Вот сборка от 23.10.2014.
Прикрепленное изображение: rt08.jpg Прикрепленное изображение: rt09.jpg Прикрепленное изображение: rt10.jpg Прикрепленное изображение: rt11.jpg
Наконец-то дошёл до спрайтов и декалей. Пришлось написать отдельный модуль для материалов и текстур.
Прикрепленное изображение: rt16.jpg Прикрепленное изображение: rt17.jpg Прикрепленное изображение: rt18.jpg
сборка от 26.10.2014
Добавил карты нормалей для декалей, а также блики.
Прикрепленное изображение: rt20.jpg Прикрепленное изображение: rt19.jpg
Запилил простенькую физику - столкновения со стенами и примитивами. Глючная немного, но пока что потянет.
сборка от 29.10.2014

Спойлер 2014 год, ноябрь-декабрь - показать
Идёт процесс разработки пользователького интерфейса и попутная переработка основы движка. Меню я решил задавать в xml-формате, в котором хранятся все меню, разметка, фон и т.д. На лицо опять сильное влияние движка unreal, всё же для какого-то конкретного проекта лучше пилить конкретное меню со своими ништяками, так как при универсальном подходе сложность реализации каких-либо эффектов многократно возрастает.
Прикрепленное изображение: rt23.jpg Прикрепленное изображение: rt24.jpg
Прикрутил воспроизведение музыки и видеороликов в формате Ogg Vorbis и Theora, переработав старые исходники. Музыка проигрывается потоково (stream) в отдельном потоке (thread). Весьма кстати пришлась новая функция SDL2 SDL_UpdateYUVTexture, которая упрощает вывод декодированного кадра.
сборка от 16.12.2014
Наконец-то слепил вместе меню и сам процесс игры, пока правда не обошлось без пары костылей, но уже весьма ощутимое продвижение.
сборка от 29.12.2014
Спойлер 2015 год - показать

Этот год был годом эксперимента с сервером Фреи. И хотя эксперимент оказался не совсем удачным, мы много чего изучили нового и получили немало опыта, который обязательно пригодится в будущих проектах. Пиление Мегакостыля совсем заглохло...
Но в декабре, обсудив на совещании итоги уходящего года и определившись с дальнейшим вектором развития ViaTeam, мы решили поставить ещё один экперимент, переквалифицировав проект MegaKostyl Engine...
Спойлер 2016 год - показать

2016-й год был весьма трудным. Времени и бодрости духа часто не хватало на масштабную задумку, кою мы решили замутить. Однако процесс медленно, но всё-таки шёл. Приходилось много размышлять об архитектуре движка. Мне постоянно хотелось сделать его максимально универсальным и добавить побольше разных фич, что, видимо, являлось следствием влияния Unreal Engine. Но как-то я вспомнил про одну умную книжку и решил перечитать/дочитать её. Множество вещей, описанных в ней, было просто откровением. И я осознал, что целый год маялся хернёй, вместо того, чтобы пилить действительно то, что нужно. После этого работа над движком пошла веселей.
Но всё же наработки в течении года, в принципе, нельзя назвать пустой тратой времени. Я опробовал кое-какие идеи, отладил некоторые механизмы, в том числе генерацию мипмап бикубическим фильтром.
Прикрепленное изображение: e001.jpg Прикрепленное изображение: e002.jpg Прикрепленное изображение: mked_old.jpg

Собственно, в итоге я решил кардинально изменить структуру движка и начал пилить утилиту для работы с моделями, попутно разбираясь с премудростями работы с вершиными буферами и шейдерами OpenGL.
Прикрепленное изображение: 001.jpg Прикрепленное изображение: 002.jpg Прикрепленное изображение: 003.jpg Прикрепленное изображение: 004.jpg Прикрепленное изображение: 005.jpg


#2
Vitalik

    Тех. специалист

  • Команда ViaTeam
  • 3 864 сообщений
  • ГородНягань mega-sity
  • Статус:&$*@#^&$@?
  • Имя:Виталий
  • Ник:Vitalik
  • Команда:ViaTeam
  • Должность на ViaTeam:
    Основатель ViaTeam
    Технический специалист
Интересная штука в общем-то. Особенно прикольно, когда до 2 уровня доходишь и на тебя Рейд Босс нападает.
Подкинь фотки Рейдбоса Свиборга. :)

Ты говоришь, исправь глюки. Да это все твои кривые руки. (с) PR-MIX - Письмо директору

Мы Вконтакте - http://vk.com/viateam

#3
Vitalik

    Тех. специалист

  • Команда ViaTeam
  • 3 864 сообщений
  • ГородНягань mega-sity
  • Статус:&$*@#^&$@?
  • Имя:Виталий
  • Ник:Vitalik
  • Команда:ViaTeam
  • Должность на ViaTeam:
    Основатель ViaTeam
    Технический специалист

Просмотр сообщенияBloody mess (22 октября 2014 - 19:56) писал:

История изменений
Прикольно :)
Но тема Свиборга раскрыта не полностью. Ну ладно, пусть остается интрига :)

Ты говоришь, исправь глюки. Да это все твои кривые руки. (с) PR-MIX - Письмо директору

Мы Вконтакте - http://vk.com/viateam

#4
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Занялся наконец-таки спрайтами. Замутил для них отдельный модуль для материалов и текстур. Сейчас буду пытаться реализовать пересечение с лучом.
Прикрепленное изображение: rt13.jpg

Лёд тронулся! Мне удалось вывести спрайт. Скорей всего то, как я сделал, не совсем оптимально, но в данный момент главное что оно работает.
Прикрепленное изображение: rt14.jpg

Теперь работает прозрачность
Прикрепленное изображение: rt15.jpg

Добавил тени от спрайтов
Прикрепленное изображение: rt16.jpg

#5
Vitalik

    Тех. специалист

  • Команда ViaTeam
  • 3 864 сообщений
  • ГородНягань mega-sity
  • Статус:&$*@#^&$@?
  • Имя:Виталий
  • Ник:Vitalik
  • Команда:ViaTeam
  • Должность на ViaTeam:
    Основатель ViaTeam
    Технический специалист
Смотрю новые локации и мобы появляются :)

Ты говоришь, исправь глюки. Да это все твои кривые руки. (с) PR-MIX - Письмо директору

Мы Вконтакте - http://vk.com/viateam

#6
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Дело дошло до декалей, на скрине можно видеть декаль на полу.
Прикрепленное изображение: rt17.jpg Прикрепленное изображение: rt18.jpg

#7
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Доработал немного декали, добавил для них карты нормалей и блики.
Прикрепленное изображение: rt19.jpg Прикрепленное изображение: rt20.jpg

#8
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Протестировал движок на ноуте с процессором intel Core i7 3630QM 2.4Ghz, при среднем разрешении (360p) вполне нормальный fps. А вот при разрешении 1280x720 только 4fps выдало... Для оптимизаций простор, в принципе, широкий, но на данный момент стоит сконцентрироваться на добавлении фич.
Прикрепленное изображение: rt21.jpg
С реализацией физики пока напряжённо, так как необходимо лучше продумать архитектуру движка.

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

Кому интересно, вот сборка.

#9
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Потихоньку пилю пользовательский интерфейс, начал с поддержки шрифтов. В следствие того, что для реализации интерфейса пользователя необходимо запилить и перепилить множество элементов движка, процесс идёт весьма не быстро и мучительно.

#10
Vitalik

    Тех. специалист

  • Команда ViaTeam
  • 3 864 сообщений
  • ГородНягань mega-sity
  • Статус:&$*@#^&$@?
  • Имя:Виталий
  • Ник:Vitalik
  • Команда:ViaTeam
  • Должность на ViaTeam:
    Основатель ViaTeam
    Технический специалист

Просмотр сообщенияBloody mess (02 ноября 2014 - 22:07) писал:

Потихоньку пилю пользовательский интерфейс, начал с поддержки шрифтов. В следствие того, что для реализации интерфейса пользователя необходимо запилить и перепилить множество элементов движка, процесс идёт весьма не быстро и мучительно.
Мультиплеер запили :)

Ты говоришь, исправь глюки. Да это все твои кривые руки. (с) PR-MIX - Письмо директору

Мы Вконтакте - http://vk.com/viateam

#11
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий

Просмотр сообщенияVitalik (03 ноября 2014 - 17:44) писал:

Мультиплеер запили :)
Ага, ага, щас)

Сделал генерацию изображений символов из файла шрифта через библиотеку FreeType, а также вывод строк с альфа-смешиванием.
Прикрепленное изображение: rt22.jpg
Дальше думаю заняться реализацией загрузки и вывода меню.

#12
.html

    OWNAGE! :)

  • Верховные модераторы
  • 3 008 сообщений
  • Имя:Александр
  • Ник:.html
Это всё хорошо, но к мультиплееру плюсую :oth_smile:

#13
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий

Просмотр сообщения.html (04 ноября 2014 - 18:30) писал:

Это всё хорошо, но к мультиплееру плюсую :oth_smile:
Вот сначала сингл запилю, а потом посмотрим. Можно будет и мультиплеерный аддон сделать) Только без трассировки...

#14
.html

    OWNAGE! :)

  • Верховные модераторы
  • 3 008 сообщений
  • Имя:Александр
  • Ник:.html
Главное, чтобы интересненько было поглядеть) А там смиримся. :)

#15
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Решился-таки продолжить пилить меню, пока сделал загрузку и вывод. Позже думаю добавить изображения для фона. А после надо будет переписывать основу движка, ибо все элементы движка слеплены воедино одним здоровенным костылём.
Прикрепленное изображение: rt23.jpg
На скрине можно заметить жалкую попытку реализации медианного фильтра, который предполагается использовать при отображении меню во время игры.

#16
Vitalik

    Тех. специалист

  • Команда ViaTeam
  • 3 864 сообщений
  • ГородНягань mega-sity
  • Статус:&$*@#^&$@?
  • Имя:Виталий
  • Ник:Vitalik
  • Команда:ViaTeam
  • Должность на ViaTeam:
    Основатель ViaTeam
    Технический специалист

Просмотр сообщенияBloody mess (07 декабря 2014 - 17:31) писал:

Решился-таки продолжить пилить меню, пока сделал загрузку и вывод. Позже думаю добавить изображения для фона. А после надо будет переписывать основу движка, ибо все элементы движка слеплены воедино одним здоровенным костылём.
Прикрепленный файл rt23.jpg
На скрине можно заметить жалкую попытку реализации медианного фильтра, который предполагается использовать при отображении меню во время игры.
Во, с меню стало еще солиднее :)

Ты говоришь, исправь глюки. Да это все твои кривые руки. (с) PR-MIX - Письмо директору

Мы Вконтакте - http://vk.com/viateam

#17
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий

Просмотр сообщенияVitalik (11 декабря 2014 - 15:21) писал:

Во, с меню стало еще солиднее :)
Ну так а то)
Добавил загрузку и вывод картинок в меню
Прикрепленное изображение: rt24.jpg

#18
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Использовав старые наработки, добавил потоковое воспроизведение музыки в формате ogg Vorbis в отдельном потоке. Послушать моё кривоё исполнение песни Коррозии Металла "Садизм" на электрогитаре Урал можно, скачав эту сборку. Меню в ней пока нет, но, я думаю, его интегрирование и ампутация костылей должны пройти быстро и не очень болезненно.

#19
Bloody mess

    Мега Разработчик

  • Команда ViaTeam
  • 360 сообщений
  • Steam:Bloody_messVIA
  • Имя:Георгий
Поэкспериментировал немного с эффектом реверберации в OpenAL (Effects Extension), а также прикрутил воспроизведение видео ogg (Theora+Vorbis), использовав всё те же старые наработки и попутно заценив новую фишку в SDL2, которая весьма облегчает вывод кадра в формате YUV.

#20
.html

    OWNAGE! :)

  • Верховные модераторы
  • 3 008 сообщений
  • Имя:Александр
  • Ник:.html
Я почти ничего не понял, но звучит круто)!



Количество пользователей, читающих эту тему: 4

0 пользователей, 4 гостей, 0 анонимных