Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Лови знакомую рыбу, открывай новые места и стань мастером рыбалки в сердце России!

Рыбалка по-русски

Казуальные, Симуляторы, На ловкость

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
2
PolarisBear
PolarisBear
Лига Разработчиков Видеоигр

Ответ на пост «Разработчики массово отказываются от собственных движков»⁠⁠1

9 месяцев назад

10% игр? А из оставшихся 90%, которые используют коммерческие движки, какой процент инди помойки, а какой относится к крупным студиям? Я думаю что почти все 90% это лютейший кал из инди игр (ничего не имею против инди игр, но количество уступает качеству). Статистика лишь показывает, что разработка игр стала доступней благодаря коммерческим движкам и теперь не надо думать как бы создать движок, чтобы сделать игру. Ведь теперь игру можно сделать без кода, но это будет дрисня. Не думаю, что rockstar бросят свой движок или какие другие крупные студии. Да, некоторые сказали что какие-то из проектов делаются на ue5, но посмотрим как будет дальше.

Компьютерные игры Игровой движок Unreal Engine Unity Видео YouTube Длиннопост Ответ на пост Текст
3
54
PontiffSulyvahn
PontiffSulyvahn
Лига Разработчиков Видеоигр
Серия Игры

Разработчики массово отказываются от собственных движков⁠⁠1

9 месяцев назад

По данным портала Vginsights, в 2024 году только 10% выпущенных в Steam игр использовала собственные игровые движки. Остальные перешли либо на открытые решения, либо на лицензируемые движки.

На сегодняшний день все используемые движки можно разделить на три большие группы:

  1. «Общие». Их всего два: Unreal Engine и Unity. Это лидеры рынка, доля которых растёт и которые доступны для использования любому;

  2. «Небольшие бесплатные». Сюда входят Godot, Gamemaker и Ren’Py. Используются эти крохотульки в небольших проектах и не предполагают лицензионных отчислений;

  3. «Большие частные». Это большие специализированные решения, не уступающие Unity или Unreal Engine (ну или обладающие сопоставимыми возможностями) основными пользователями которых являются сами разработчики. К ним относятся Source, Frostbite, Creation Engine, ReEngine, Decima.

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

Массовый переход на лицезируемые движки начался примерно в 2012 году и продолжается до сих пор:

Лидером рынка достаточно быстро стал Unity, на котором до сих пор делается практически половина игр. Однако, в последние годы его начал теснить Unreal Engine. Кроме того, путь и небольшой, но стабильный рост показывают GameMaker и Godot.

А вот с точки зрения денег (у нас всё же капитализм, куда без них?) всё не так однозначно:

Тут Unity никогда не был в лидерах, сумев максимально подняться до 27%. Unreal Engine показывал примерно похожие результаты. В общем, игры, которые приносили деньги, большей частью использовали свой собственный движок. Только в 2024 году ситуация изменилась за счёт перехода на Unreal Engine.

Если тенденции продолжатся, то к 2030 году уже 40% проданных копий будет приходиться на игры, сделанные на Unreal Engine. Unity увеличить свою долю если и сможет, то незначительно.

Все на UE5!

Несмотря на постоянно ругаемый Unreal Engine пятой версии, дела у движка идут хорошо. За прошедшие с выхода три года на него пересели уже 72% разработчиков:

Хотя UE5 набирает популярность медленней, чем UE4, он находит применение во всё большем количестве игр. За последний год на UE5 вышли Palworld, Senua's Saga: Hellblade II, Black Myth: Wukong, Tekken 8, Satisfactory и S.T.A.L.K.E.R. 2. В общем, Epic Games железной рукой загоняют всех в счастье.

Больше всего на Unreal Engine делают игры жанров Action RPG, Souls like, FPS, Platformer. Open World Survival Craft и City Builder.

О переходе на решение от Epic Games уже заявил ряд крупных компаний вроде Crystal Dymamics, Respawn Entertainment, CD Projekt Red, Square Enix, Eidos Montreal, Obsidian и ряд других. Причина банальна — развитие своего движка стоит мало того что дорого, так ещё и требует обучения приходящих специалистов.

А бесплатная альтернатива?

Единственный движок, который заметно прибавил популярности за прошедшие годы — Godot:

Остальные остались при своих, не сумев завоевать сердца разработчиков. Подобные движки представляют слишком мало возможностей и подходят только для начинающих. Команды поопытней предпочитают тот же Unity.

А что там с Unity, кстати?

А с ним всё не слишком хорошо. Сверху его поджимает Unreal Engine, снизу — Godot. С ходу захватив огромный кусок рынка, компания так и не сумела конвертировать его в хороший денежный поток.

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

Если, например, у Epic Games есть Fortnite, на котором оттачивается работа Unreal Engine, то тысячи специалистов Unity смогли осилить только невзрачный ролик на движке:

Сравните это с Warhorse Studio, которая за несколько десятков миллионов долларов коллективом в меньше чем 300 человек смогла выпустить две успешные игры на стороннем движке.

Как итог: компанию накрыли волны увольнений, последняя из которых произошла буквально только что. На мороз отправились очередные сотни людей, включая целые отделы. Понять, что будет с компанией дальше, трудно. Есть вариант, что пухнущая от денег, которые приносит Fortnite, Epic Games приобретёт Unity и станет практически монополистом.

P.S. Ещё у меня есть бессмысленные и беспощадные ТГ-каналы (ну а как без них?):

О науке, творчестве и прочей дичи: https://t.me/deeplabscience

Об играх и игровой индустрии: https://t.me/gameprodev

Показать полностью 6 1
[моё] Компьютерные игры Игровой движок Unreal Engine Unity Видео YouTube Длиннопост
103
156
b0mjman
b0mjman
Игровые скидки и раздачи

Раздача RPG Maker VX Ace (steam)⁠⁠

10 месяцев назад

RPG Maker VX (яп. RPG Tsukuru VX) — программа для создания игр в жанре jRPG и ему подобных без необходимости владеть языками программирования. Релиз продукта состоялся в 2008 году компанией KADOKAWA games Принадлежит к серии RPG Maker. Сильно отличается от предыдущих программ из серии, в особенности улучшенным скриптовым языком RGSS2, старой простой системе маппинга с одним слоем, стилем игр, разрешением и размером ресурсов. Для многих разработчиков является прорывом в данной серии. Также на его базе был создан более совершенный движок VX ACE, который на данный момент является самым популярным из серии, несмотря на наличие новейшей версии — MV.

Раздача RPG Maker VX Ace (steam)

Ссылка на раздачу:

https://store.steampowered.com/app/220700/

Также имеются бесплатные DLC:
https://store.steampowered.com/app/476041/

https://store.steampowered.com/app/445450/

https://store.steampowered.com/app/329823/

https://store.steampowered.com/app/1076430/

https://store.steampowered.com/app/1691910/

Показать полностью 1
Steam Раздача Игровой движок Аниме RPG RPG Maker Халява Бесплатно
15
5
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: DevLog 20250118⁠⁠

10 месяцев назад

Краткий список изменений

- Сделан патч под Lua для корректной работы с компиляторами Linux последних поколений (проблема long long из предыдущего поста)
- Отменено изменение с кастомными целочисленными типами. Теперь снова используется std
- Изменен метод передачи аргументов из скрипта с массива на типофункции
- Ограничены через концепт типы аргументов и возвращаемых значений (для решения головной боли со static_cast/any_cast)
- Добавлена возможность вернуть результат работы функции в скрипт (возвращаемый тип так-же ограничен). Побочный эффект - функция не может быть void.
- Добавлен флаг лока стека Lua в случае вызова функции (на случай, если функция получения аргумента или возврата будет вызвана вне тела исполняемой функции).

Так-же начал думать о том, как заставить DefaultObject создаваться автоматически. Пока ничего лучше, чем python кодогенератор с парсом заголовков на вхождение RelictClass в пребилде не придумал. К созданию пока не приступил. Подумаю еще немного (может найду способ в compile time вытащить. Это бы сильно все упростило).

[моё] Разработка Gamedev Инди Игровой движок Текст
2
7
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: Кросплатформа, и такая-то матерь⁠⁠

10 месяцев назад

Был очень не приятно удивлен, что при определенных обстоятельствах gcc и clang могут на лету переопределять свои define на численные типы, что приводит вот к таким вот проблемам:

Подчеркнутое значение по всем условиям должно быть long long или long int, но не как не long

Подчеркнутое значение по всем условиям должно быть long long или long int, но не как не long

Пришлось в срочном порядке вводить свои определения на это дело

В будни надо будет еще раз по документации пробежаться, может быть все-же что-то упустил.

Второй выстрел произошел от typeid, который формирует текстовое отражение имени класса (а следовательно и имя таблицы Lua). Его тоже привел к более-менее одинаковому значению на платформах.

Ну и самое главное. Заработала (частично) интеграция с Lua. Пришлось правда вводить std::any (вообще ни разу не хорошее решение, но пока так). Методы вызываются, аргументы передаются. Единственное, пока-что не возвращается значение из Си функции.

Вот, честно говоря решение вот вообще не нравится. Буду думать еще.

Вот, честно говоря решение вот вообще не нравится. Буду думать еще.

Тут и лямбда для подвязывания на стек Lua (чтобы статику не городить), тут и массив std::any с any_cast. В общем есть что улучшить. Но как Proof of Concept сойдет.

Показать полностью 3
[моё] Разработка Gamedev Инди Игровой движок
6
8
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: Новый Год, новые задачи⁠⁠

11 месяцев назад

Довел я наконец ядро до состояния "Теперь оно мне даже почти нравится". Избавился вообще от define, вытащил ряд проверок в compile time. Избавился от ряда ненужных сущностей. Добавил несколько новых. Итак: что поменялось.

Добавилось - template контейнер для "правильного" наследования Object. Имеет он такой вид:

template<ClassType, BaseObjectBasedClass, ClassFlags...>

,где ClassType - это собственно класс, который мы собираемся написать, BaseObjectBasedClass, класс, от которого будет происходить наследование, с проверкой, что он имеет базовым классом Object и Флаги. Их не много, хотя возможно потом добавятся еще и они определяют поведение класса,. На данный момент они следующие:
None - класс не имеет никаких особенностей (ставится по умолчанию, поэтому можно сказать что None, это когда для класса не указано вообще флагов). Он должен иметь овнера, и он умрет как только умрет его Owner, или по вызову delete
Abstract - Класс является абстрактным (даже если все методы определены). Инстанцию класса невозможно создать никоем образом, но от него можно наследоваться.
RootObject - Этот класс не может быть удален GC автоматически. Нужно его вручную пометить на удаление. Следовательно, Owner ему не обязателен и может быть null. Хорошо использовать в паре с NoInstantiate.
NoInstantiate - Класс не может иметь инстанций. Это означает, что в памяти будет создан только DefaultObject. Такой вот синглтон на стеройдах. Если не указан RootObject, то удалится, если не будет овнера(!).
FreeDefaultNoInst - а вот этот флаг будет играть важную роль в оптимизации проекта. ПО умолчанию политика GC такова, что если мы удалили последнюю инстанцию класса, то в памяти все равно остается болтаться его DefaultObject. Этот флаг переопределяет эту политику, и DefaultObject будет удален вместе с последней инстанцией класса. Из-за особенностей работы флага его нельзя использовать вместе с NoInstantiate и компилятор ругнется если увидит их вместе.
В результате это теперь выглядит вот так:

class BaseClass

: public RelictClass<BaseClass, Object, Abstract>::Type

, public Atoms::Tickable

{
public:
MyClass(const Initializer& Initializer)

: Type(Initializer)

, Tickable(true)
{}
virtual void Tick(double DeltaSeconds) override
{
std::cout << "Tick();" << std::endl;

}
};


class MyClass

: public RelictClass<MyClass, BaseClass, RootObject, NoInstantiate>::Type
{
public:
MyClass(const Initializer& Initializer)

: Type(Initializer)
{}
virtual void Tick(double DeltaSeconds) override
{
Super::Tick(DeltaSeconds);
SetTickEnable(false); // мы хотим тикнуть только один раз

}
...
дальнейшая имплементация класса
}

также, наконец-то, сделал рабочий delete оператор, который работает с GC как ему и положено. Теперь он не очищает память сразу, но сообщает GC, что программист изволил желание объект грохнуть. И GC уже запускает свой танец PendingKill -> Destroyed.

Работа GC так-же была пересмотрена. Был удален Стейт PendingReg. Теперь объекты сразу считаются зарегистрированными и сразу попадают в общий стек. Но, добавился стейт Destroyed, а само удаление теперь проходит в два дополнительных тика движка. В первый тик удаляется сам объект, его отражение в GC получает State Destroyed, а само отражение удалится на следующий тик. Это нужно для того, чтобы не зависимые напрямую от него объекты, могли узнать, что указатель больше не является валидным.

Также добавилась концепция подсистем (Subsystem). Это особые классы RootObject и NoInstantiate, которые имеют дополнительные методы Startup и Shutdown и не требуют явного создания. Они управляют функциональными расширениями движка. Каждая интеграция будет иметь свою подсистему. Рендер, Звук, Сеть, итд. В общем концепт такой: все что не ядро - то подсистема. Это позволит мне менять части движка, можно сказать, на лету, не особо запариваясь с зависимостями. На данный этап есть только одна подсистема Script (для интеграции с Lua).

Собственно над этой интеграцией и работаю прямо сейчас. Подсистема уже через атом Scriptable умеет прокидывать C++ класс через DefaultObject в стек lua со всеми нужными нам методами (указываются явно). Однако есть проблема с вызовом этих методов из lua, надо придумать как типизировать вызываемые объекты и список аргументов так, чтобы их можно было разбирать в runtime (ибо в compile time это не реально, хотя было бы сильно проще).

На будущее еще нужно будет предусмотреть автоматическое создание DefaultObject для Scriptable объектов, чтобы была возможно с ними работать со стороны скриптов, когда в самом движке не было создано ни одного экземпляра нужного класса. Сейчас же, отражение класса в Lua появится только с созданием первой инстанции класса (которое приводит к созданию DefaultObject).

Показать полностью
[моё] Разработка Gamedev Игровой движок Инди Текст Длиннопост
1
10
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: Модель памяти. Итерация №3⁠⁠

11 месяцев назад

Пришлось сделать шаг назад, и еще несколько переделать модель представления базового класса, т.к. появились трудности при работе с Lua таблицами и настройки взаимодействия Lua с не корневыми Объектами.

Основные изменения:
- Теперь у каждого объекта от Object есть DefaultObject (DO, CDO - привет Unreal).
- оператор new убран в приватную зону базового класса и кидает bad_alloc ошибку, если все-таки как-то умудриться его вызывать. Заместо него теперь статичная функция template<class _ty> Ty_* Object::New(...) (необходима для выделения места для DO и работы с конструкторами).
- Наконец-то в небытие ушел метод __constructor, теперь нормальный конструктор работает корректно.
- Текстовое имя класса для мета объекта теперь не передается через макрос, но использует stdшный "сахар" typeid().name.
- Конструктор вызывается только при создании DO. При создании "нормального" экземпляра класса, он не вызывается, но вызывается событие OnConstruction атома Scriptable (необходимо для взаимодействия со скриптами)

В результате код стал гораздо более приятнее на вид, хотя и получилось так, что теперь для всех наследуемых от Object классов приходится за собой таскать дефолтный конструктор (если оставить generic, то затирается Meta). Есть у меня идея, вытащить Meta в Memory::OS, но это сильно усложнит создание "нормального" объекта. Буду еще по ходу дела думать.

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

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

Штатные операторы new (delete тоже) запрещены для использования всеми наследниками Object

Штатные операторы new (delete тоже) запрещены для использования всеми наследниками Object

Имплементация выделения памяти и инициализации до вызова конструктора объекта. PS: В Allocate Object утечка памяти. Надо будет исправить.

Имплементация выделения памяти и инициализации до вызова конструктора объекта. PS: В Allocate Object утечка памяти. Надо будет исправить.

GC и Owner пока сломаны. Надо перенести функционал из прошлой итерации

GC и Owner пока сломаны. Надо перенести функционал из прошлой итерации

Тестовый кейс инициализации классов через DO

Тестовый кейс инициализации классов через DO

и его вывод на Windows

и его вывод на Windows

и на Linux

и на Linux

Показать полностью 7
[моё] Разработка Gamedev Инди Игровой движок Длиннопост
1
6
TehnoMagEG
TehnoMagEG
Лига Разработчиков Видеоигр
Серия Relict Engine

Relict Engine: Атомы⁠⁠

11 месяцев назад

Знаю, что хотел заняться GameFramework, однако немножко отошел в сторону и решил подумать, как можно упростить себе жизнь. И придумал (подсмотрел, естно) Атомы.

Атом это простой класс, с минимальным функционалом. Он не наследуются от Object и не должен быть использован as-is, а только в качестве родителя для класса, который в свою очередь наследуется от Object на прямую, или через посредника.

Класс атома выглядит примерно так

Класс атома выглядит примерно так

Через атомы, нашему классу объекта можно передать дополнительный функционал (например Атом из примера выше дает возможность объекту "тикать"). Также, для более быстрого и простого управления отдельным функционалом, который передает нашему классу Атом, у него есть контроллер (для каждого типа атома свой). Который знает обо всех объектах с конкретным атомом. И через который можно этими классами управлять.

Пример простого тик контроллера для атома TickableObject

Пример простого тик контроллера для атома TickableObject

Таким образом, мы можем разбить объекты на определенные логические группы, и в нужный момент времени, нам не придется перебирать все созданные объекты в общем листе, но только по группе, атом которой присутствует в объекте. Ну или можно скопом обратится ко всем объектам, как это делает ObjectTickController.

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

И да, это очень похоже на то, как работает ECS, и при необходимости, эту систему можно развить до полноценного ECS, но на данной момент она ей не является и такой функционал я не закладывал.

Ну а конкретно сейчас, я занимаюсь подключением Lua и подключением класса в ее vm (собственно почему мне атомы и понадобились)

Показать полностью 2
[моё] Разработка Gamedev Инди Игровой движок
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии