#1 2021-11-08 08:52:51

Gecko
Админ
Из РФ, Казань
Зарегистрирован: 2018-06-02
Сообщений: 164
Сайт

Dagon и разработка игр на языке D

Где-то приблизительно с 2011 года я пишу на языке D (Dlang). Я уже неоднократно писал о своей мотивации и высказывался обо всех плюсах и минусах языка в журнале FPS и своем блоге, так что не буду тут повторяться - скажу только, что за 10 лет мой энтузиазм ничуть не остыл, разве что времени на хобби-проекты стало поменьше. Язык все так же привлекателен для самых разных задач, особенно для real-time приложений (я его даже использовал на работе пару раз, для создания небольших специализированных утилит). Вторым постом напишу подробнее о моих основных проектах на D - движке Dagon и библиотеке dlib.

sponza10.jpg

В связи с интересом к Dagon на нашем форуме, решил создать эту тему в информационных целях, и чтобы было где обсуждать дальнейшие перспективы разработки кастомных 3D-движков на фоне тотального засилья Unity и аналогов (ну и ради небольшого пиара D big_smile ). Очень может быть, что к Dagon в будущем появится полноценная кросс-языковая обертка, оформленная как DLL.

Offline

#2 2021-11-08 09:20:26

Gecko
Админ
Из РФ, Казань
Зарегистрирован: 2018-06-02
Сообщений: 164
Сайт

Re: Dagon и разработка игр на языке D

Началось все с проекта Phantom3D, над которым я работал в 2009-2010 годах. Это был движок на C++, который я хотел создать по образцу Xtreme3D, но так и не довел до юзабельного состояния, хотя и многому научился в процессе. Особенно на меня повлияли разработки David Henry (библиотека Mathlib, декодеры изображений и т.д.), на основе которых я начал делать собственную библиотеку общего назначения Sparx. Вкоре я открыл для себя D и постепенно портировал на него весь накопленный код - в итоге получилась библиотека dlib, которая сейчас входит в топ-20 по популярности в реестре пакетов Dub. Часть функциональности из Phantom3D кочевала по разным примерам и демкам, пока в итоге не оформилась как движок DGL, который впоследствии перевоплотился в Dagon. Такая вот сложная "связь поколений")

Изначально DGL был на основе OpenGL 2.x, сейчас в Dagon используется 4.0. Есть долгосрочный план перейти на WebGPU или какой-то другой абстрактный API, но это пока из области научной фантастики, т.к. реальной полноценной замены OpenGL в природе не существует. В движке используется отложенный рендеринг (deferred): геометрические объекты запекаются в набор буферов (цвета, глубины, нормалей, PBR-параметров), а затем на основе этих буферов в несколько стадий формируется HDR-изображение сцены (используются отдельные проходы для освещения окружения, источников света и Ambient Occlusion). Оно затем проходит через серию опциональных фильтров постобработки (Glow, Motion Blur, Depth of Field, Lens Distortion), пропускается через тональный компрессор и, наконец, отправляется на вывод. Картинка получается очень близкая к Eevee в новых версиях Blender.

eevee_vs_dagon.jpg

cerberus.jpg

До недавнего времени я работал, в основном, над рендером - сторонними разработчиками были добавлены модули GUI (на основе библиотеки Nuklear), ландшафт на основе шума OpenSimplex, конфигурируемая система ввода и многое другое. Из свежих фич - частичная поддержка формата glTF (вскоре надеюсь сделать поддержку анимированных моделей): https://youtu.be/lJi9lSe-ngE

Также была добавлена интеграция с физ. движком Newton и контроллер персонажа на ее основе: https://youtu.be/gTZ8QT4yOOo

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

Почему я до сих пор считаю, что свой движок - это хорошо? Во-первых, чужая разработка всегда ограничена условиями лицензии. Даже если это Open Source с возможностью использования кода в коммерческих продуктах. Со своим кодом вы можете делать все, что угодно - Open Source вы не сможете перелицензировать как вам хочется. Во-вторых, чужие продукты развиваются не всегда в том направлении, которое вам нужно. Я видел людей, которые с Unity 2020 возвращались на 2018 из-за тормозов, завышенных системных требований и проблем совместимости. А иногда движок может вообще кануть в небытие, как это было с Blender Game Engine.

Offline

#3 2021-12-14 03:47:04

FireRun
Разработчик Xtreme3D
Из Казахстана
Зарегистрирован: 2018-06-11
Сообщений: 132
Сайт

Re: Dagon и разработка игр на языке D

Дааа, мне бы такие шейдерные навыки, все не как не могу привыкнуть к GL 3+.  я кстати когда-то по исходникам Phantom3D пытался свои движок написать big_smile
Решил опробовать язык D, но ничего не понял, в плане где компилировать его вообще, неужели IDE нет? Установил VisuаlD подумав что это и есть IDE, но нет, MVS открывает как обычный текстовой файл, только с подсветкой синтаксиса, а в плане названия самого языка, как мне кажется не очень удобно, гугл вообще не может меня понять что я от него хочу, когда пытаюсь поискать что-то по D.
А синтаксис очень крутой, и не такой инопланетный как с++, надеюсь язык будет активнее развиваться. Там кстати есть WinАPI например? или DX?

Редактировался FireRun (2021-12-14 23:22:38)


Программист,Художник
музыкальный продюсер (FIRERUN): https://soundcloud.com/djfirerun
Xtreme3D Editor (Xtreme3D с графическим интерфейсом): https://vk.com/x3deditor

Offline

#4 2021-12-18 19:58:15

Gecko
Админ
Из РФ, Казань
Зарегистрирован: 2018-06-02
Сообщений: 164
Сайт

Re: Dagon и разработка игр на языке D

Решил опробовать язык D, но ничего не понял, в плане где компилировать его вообще, неужели IDE нет? Установил VisuаlD подумав что это и есть IDE, но нет, MVS открывает как обычный текстовой файл, только с подсветкой синтаксиса, а в плане названия самого языка, как мне кажется не очень удобно, гугл вообще не может меня понять что я от него хочу, когда пытаюсь поискать что-то по D.

Рекомендую лучше VSCode или Atom, у меня есть статья по настройке для Атома. Для VSCode скорее всего есть даже что-то покруче. Сам лично компилирую из консоли, без IDE, благо там команды Dub очень простые (а для сложных можно батники написать). Базовая компиляция: dub build или dub build --build=release для оптимизированной версии. Надо, конечно, путь к компилятору в системные пути PATH сначала добавить - но наверное инсталлер это сейчас уже делает сам, я просто вручную обычно ставлю.

WinAPI есть встроенный в стандартной библиотеке, но изредка бывают отсутствующие функции, в этих случаях обычно несложно самому добавить. DX, OpenGL - все есть. Для OpenGL рекомендую BindBC-OpenGL, DX, если не изменяет память, в последний раз щупал через directx-d, но я пробовал только 11.

Offline

Подвал доски

Под управлением FluxBB