Cheb's Game Engine

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: Cheb's Game Engine

Сообщение Alex2013 » 21.07.2023 02:29:48

"Сферический конь и генеративные модели " :idea:
Генератор скайбоксов
https://skybox.blockadelabs.com/

Добавлено спустя 11 часов 40 минут 59 секунд:
Оцени сказку ! (Разрешение 6144 x 3072 )
Изображение
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 05.01.2024 17:09:40

Ууууугх....
Мосх начинает приходить в себя после марафона: http://i.iddqd.ru/viewtopic.php?t=2474 / https://www.doomworld.com/forum/topic/1 ... -beta-001/
, а я вернулся к своему проекту... Чтобы поначалу медитировать на собственный код, аки баран на новые ворота. Это что?.. А это как?.. А это что за?..
К счастью, своим не до конца проснувшимся посне НГ мозгом я уловил системную яму, в которую маршировал "радостным шагом, с песней весёлой". Намереваясь городить очередной фтагнокод, в лавкрафтианских алгоритмах которого опять затерялся бы и зачах.

Да, система карусели кладбищ по тикам, я на тебя пальцем показываю!

Нафиг, нефиг, вот фиг. У каждого слоя *одно* кладбище, которое живёт до кончины слоя (если есть вышележащие) ИЛИ до конца тика (если слой - верхний). Любой слой просто пользуется кладбищем *вышележащего*, и только если такового нет - своим.

Итак, проблема хранения дохлых объектов, на которые могут быть ссылки из вышележащих слоёв, разрешается сама собой, БЕЗ каких-либо дополнительных усилий и БЕЗ механизмов менеджмента, от одного вида которых Ктулху повесится на собственной бороде: слои могут умереть, только всплывя на верх и став верхним... А таковой вычистит все авгиевы наслоения в конце первого же своего тика.

А механизм будильников я допилю. Не больше одного будильника на объект, ссылки - в ускоренных полях (не транжирство, т.к. будильник будет чуть менее, чем у всех поголовно: ленивая физика на этом стоит!), сбрасывается при поклании на кладбище. + виртуальный метод "в конце тика", просчитывающий следующий момент пробуждения и создающий новый будильник. Да, второй проход за тик. Да, бяка. Но как иначе физику реализовать, гарантировав *одно* подобное вычисление для случае соударения толпой... Ну не бывает чудес. Как я писал в своём крайнем фике - "Увы, эффект массы - это не магия. Или - недостаточно магия".

Alex2013 писал(а):Генератор скайбоксов

Забавная штука, сделаю зарубочку на память. Как и любым инструментом - надо учиться пользоваться. Но даже поверхностное знакомство позволяет "по быстрому набросать задник" когда не нужно что-то вылизанное.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение sts » 05.01.2024 18:51:33

вроде как уж лет десять рендерить скайбокс задача движка, ну если он 3д
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Cheb's Game Engine

Сообщение Alex2013 » 06.01.2024 10:59:54

Cheb писал(а):Забавная штука, сделаю зарубочку на память. Как и любым инструментом - надо учиться пользоваться. Но даже поверхностное знакомство позволяет "по быстрому набросать задник" когда не нужно что-то вылизанное.

С новым годом !
По поводу скай-бокса я уже локально научился их генерировать в AUTOMATIC 1111. (Качество еще оставляет желать лучшего (и железа традиционно не хватает ) но важен сам факт )
Изображение
Изображение
А вообще (де?)генеративное-дело заметно дальше пошло ! Появились первые движки где НС по описанию генерирует 3д-целые локации где можно бродить.
https://youtu.be/Vt7Groga1ko
Зы
В принципе размеры современных моделей для НС уже в полне позволяет добавлять их в 3д-движки (1-2 Гб уже никого не пугают).
Сейчас правда разрабы в основном увлекаются пост-рендерингом .
Получается что-то вроде этого ( 3д рендер или просто "каракс" модели творчески обработан НС )
Стадии обработки .
Просто (но это тоже генерация а не рендер ) "Флин жив !"
Изображение
Добавить фантазии... "Киберпанк 2077 " на минималках.
Изображение
Привет Матрица !
Изображение
Реальность где-то- рядом.
Изображение

Добавлено спустя 56 минут 34 секунды:
Еще есть генерация 3д-моделей по фото.
https://okocrm.com/blog/nejroset-3d-model/
Последний раз редактировалось Alex2013 06.01.2024 14:54:35, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 06.01.2024 14:19:26

sts писал(а):вроде как уж лет десять рендерить скайбокс задача движка, ну если он 3д

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

Изображение

Эти зоны в редакторе:

Изображение

Добавлено спустя 31 минуту 3 секунды:
Alex2013 писал(а): размеры современных моделей для НС уже в полне позволяет добавлять их движки (1-2 Гб уже никого не пугают).

Кря! :shock:
Я не изменил своё мнение: одного гига должно хватать для всего.
Я бы тоже хотел поковырять нейронные сети - но велосипедить их своими руками. Предпочтительно, на основе 16-битных целых.
Для поведения ботов, для анимации и для генератора карт.
Но это если доползу. Пока руки заняты другим.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Alex2013 » 06.01.2024 15:14:45

Cheb писал(а):Я не изменил своё мнение: одного гига должно хватать для всего.


Я считаю что и 0.5Гб уж предел и для интернет клиента и для локальной игры.( Возможно +2гига "кеша и темпов" но это уже "не считается" )
Cheb писал(а):Я бы тоже хотел поковырять нейронные сети - но велосипедить их своими руками. Предпочтительно, на основе 16-битных целых.

ИМХО Имеет смысл использовать готовые модели и средства обучения НС. (по размерам:Есть "большие модели" с размером от 1-6 гб (средний размер 2гб) и есть разные дополнительные типа LORA там с размерами все ок от 30 до 500мб стандарт 144мб)
Зы
Использовать НС " для генератора карт и поведения ботов"(причем вместе со "встроенным чатом" и "внутренними диалогом" (одна НС дает краткое описание ситуации, а другая на нее реагирует) ) реально, а анимация пока не очень (хотя признаю что это от реализации зависит )
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 07.01.2024 12:26:14

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

А обучать на специальной полосе препятствий, по которой пытаяется пройти бот - и на недельку крутиться, обучаясь, на 1000% скорости.

Что-то мне сильно сдаётся, что эта сеть уложится в 64 килобайта и ещё сверху останется.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение sts » 07.01.2024 15:51:06

Cheb писал(а):И я добился огромного прогресса, научившись трёхслойные скайбоксы для думских карт в формате UDMF.

у меня глупый вопрос, а "они" сделали много этажность уровней дума?
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Cheb's Game Engine

Сообщение Alex2013 » 07.01.2024 23:00:35

sts писал(а):меня глупый вопрос, а "они" сделали много этажность уровней дума?

Отсутствие прямого 3Д в классическом Думе "не баг, а фича" но с помощью разных хитростей многоэтажность была и раньше достижима. Однако смысла в ней чуть. Бо это уже "не дум" будет.
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение Cheb » 08.01.2024 02:06:56

Сейчас сколачиваю опалубку под фундамент - т.е. перед фича-фризом навсегда.
Есть вещи, которые абсолютно невозможно добавить *потом*. Надо закладывать прямо в фундамент - как бы тебя самого не раздражали необходимые для этого ахритектурные выверты.
Вот пишешь после битвы что-нибудь остроумное в чат, типа "Какие же вы, синие, лохи нубские! Лол бгг ez". И тут - Хоба! Карта сменилась, всё, что ты писал от всей глубины души - потёрлось нафик, лохи нубские даже прочитать не успели :evil: Такштааа... Игровой мир - не корневая сущность, миров - как минимум два: лобби - отдельно, карта - отдельно. И грузятся они раздельно, и лобби продолжает жить при смене карты, и игрока не выкидывает с сервера при десинке карты, а отправляет на респавн в лобби.
Но. Механизм лагокомпенсации уже продуман для мелочей, поддержка уже внедрена в основы СУБД (включая менеджер памяти инстансов, приученный дропать все объекты протухающего слоя одним тычком, без вызова деструкторов, на чистом CleanupInstance:
Код: Выделить всё
procedure TChepersyMemoryManager.DeallocAllInstancesInLayer(idx: TCpsLayerIndex);
var
  chunk : TChepersyMemoryManagerChunk;
  i: integer;
begin
  if idx = 0 then Die(MI_ERROR_PROGRAMMER_NO_BAKA, ['Trying to deallocate the base layer is something special, all right.']);
  Assert(idx in Cps.LayerIdxUsage, 'Attempt to deallocate layer idx=' + IntToStr(idx) + ' that is not in use');

  i:= High(LayerChunks[idx]);
  repeat
    if i >= High(LayerChunks[idx]) then begin
      chunk:= LayerChunks[idx][i];
      if Assigned(chunk)
        then chunk.DeallocAllInstances;
    end;
    Dec(i);
  until i < 0;
end;

procedure TChepersyMemoryManagerChunk.DeallocAllInstances;
var
  p: pointer;
  i, j, i1, i2, j1, j2, k, amh: integer;
begin
  if f_AllocCount = 0 then Exit;

  i1:= f_IdxLow div (8 * sizeof(pointer));
  j1:= f_IdxLow mod (8 * sizeof(pointer));
  i2:= f_IdxHigh div (8 * sizeof(pointer));
  j2:= (8 * sizeof(pointer)) - 1;
  for i:= i1 to i2 do begin
    if f_AllocMask[i] <> 0 then begin
      if i = i2 then j2:= f_IdxHigh mod (8 * sizeof(pointer));
      for j:= j1 to j2 do begin
        k:= j + (i * sizeof(pointer));
        if k > f_IdxHigh then break;
        if (f_AllocMask[i] or (ptruint(1) shl j)) = 0 then continue;
        p:= pointer(Self) + ptruint(k * f_Size);
        TChepersyObject(p).CleanupInstance; // frees arrays and such
      end;
    end;
    j1:= 0;
  end;

) и места для *ещё* четырёх слоёв лагокомпенсации тупо нет. Ибо пространство ускоренных полей - страшно ограниченное (32), а они и так отъели от него 8. И ещё 3 из 32 флагов.
Как результат - приходится изощряться.
"Текущий тик" базового слоя должен быть независимым - не свойство лагокомпенсатора, а свойство каждого мира в отдельности. Почему? Потому что мир после закачки снапшота должен догнать настоящее - а это, в худшем случае, до минут.
Глубинный всплывающий тоже должен уметь прыгать через горящие кольца: для разных миров он может всплывать с разной глубины (например, мы компенсируем краткий дисконнект, до 15 секунд, передачей инпутов за это время и быстрой прокруткой вперёд). А ещё локальные лаги и фризы должны выравниваться без последствий, даже если заставляют базовый слой просесть, отстав от границы лагокомпенсации.

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

sts писал(а):а "они" сделали много этажность уровней дума?

Дык три-де полы - одна из первых фич, которую привинтили создатели source port'ов. У лайн-спешиала 160 (задать триде-пол сектору) даже есть опции совместимости для поддержки совсем древних первобытных форматов этого, которые изначально работали совсем по другому.
Но нет, тут речь не про них, а про порталы. Которые в Зандронуме, увы, могут быть только визуальными. Вот GZDoom - там да, с лёгкостью можно соединять комнаты порталами, с лёгкостью многоэтажное здание сделав. В Зандронуме - только трюками, хаками и извращениями.

Alex2013 писал(а):Бо это уже "не дум" будет.

Ну, ты ещё на раздвижные двери бочку покати :P

Изображение

Изображение

Добавлено спустя 12 часов 45 минут 18 секунд:
Иронично, сам мир не является расслаиваемым. Расслаиваемыми являются объекты игрового мира, которые он содержит - но не сам мир.
Мир является потомком такой хрени, как список будильников по тикам (узкоспециализированный разрежённый массив). А каждый будильник - это гипердина (массив, сверх-оптимизированный на изменение размера, Push() и Pop()) ссылок на объекты игрового мира, которые надо разбудить.
Рассматриваю заманчивую архитектуру, где мир является полным агностиком своего содержимого и конкретных реализаций - все игровые объекты содержатся в будильниках. А все физические коллайдеры - релятивичны. Т.е. они имеют ссылку на чанк физического пространства, в котором сидят, а тот - в зависимости от конкретной реализации, ссылки на соседние чанки и родительское подпространство. Но в общем случае не существует даже понятия глобальных координат - если объект хочет узнать расстояние и вектор на другой - оба просят родительские чанки искать вверх по структуре (которая может быть какой угодной, в т.ч. пространством, завязанным в неевклидов узел через порталы) пока оба этих поиска не встретятся рукопожатно. То же для проверок видимости (которые, строго говоря, должны быть подпиской на событие поиска, которое может вернуть результат N тиков спустя) и для широковещательных сообщений от игрока "монстры, увидьте меня".

Что-то такое в уме витало, но окончательно вдохновила меня Гиперболика https://store.steampowered.com/app/1256230/Hyperbolica/ - единственная, насколько знаю, игра, где действие происходит в неевклидовом пространстве, где в полный круг укладываются пять прямых углов (а в карманном измерении фермы, где надо глушить кротов - три прямых угла).

Для "огромного открытого мира" (который, по сути, всегда лишь холст для картины геймплея) у меня давно была идея планеты, сгенерированной субдивижном икосаэдра, где чанки - треугольные... Но никаких коррекций по высоте нет, все чанки - столбики равномерной толщины от верха (нелетабельный космос) до низа (некопабельная магма). Иии... По факту, поверхность планеты - неевклидова плоскость, замкнутая ненатуральным образом, а вся физика - нагло пользуется фактом, что ось вверх - всегда строго вверх. И, тем не менее, никто не мешает совершить кругосветку.

Добавлено спустя 11 часов 20 минут 47 секунд:
Мечта была красивой, но нереализуемой. Список будильников по тикам - *разрежённый* массив, элементы могут добавляться по требованию... Например, слоями, отличными от базового... Потом базовый слой полезет в будильник за тот же тик - и... Не выходит у Данилы-мастера каменный цветок.

Ну, отпочковывание нового слоя - будет более дорогой операцией, чем абсолютно бесплатная, похоже. Ибо список будильников тоже надо клонировать, а у него под капотом - в том числе, специализация TMap.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Alex2013 » 09.01.2024 03:02:19

Cheb писал(а):Что-то такое в уме витало, но окончательно вдохновила меня Гиперболика https://store.steampowered.com/app/1256230/Hyperbolica/ - единственная, насколько знаю, игра, где действие происходит в неевклидовом пространстве, где в полный круг укладываются пять прямых углов (а в карманном измерении фермы, где надо глушить кротов - три прямых угла).

Гиперболика далеко не единственная
Начиная с голимого Madspace 1997 года (ужасный по качеству картинки но тем не менее вполне себе "неевклидовый лабиринт" и чем ближе к финалу тем все более неевклидовый )
https://www.old-games.ru/game/1917.html
https://www.youtube.com/watch?v=cFcAMRlzbD8&t=1140s

и далее..
https://youtu.be/lxWGQFMDwBc
https://habr.com/ru/articles/52771/
Последний раз редактировалось Alex2013 09.01.2024 21:14:15, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение sts » 09.01.2024 11:46:06

Alex2013 писал(а):Отсутствие прямого 3Д в классическом Думе "не баг, а фича"

в 90е, когда делал уровни, это был фатальным недостатком, в то время была мода дизайнить +- реальные помещения для которых многоэтажность это минимум. делать абстрактные уровни просто не имело смысла.

Alex2013 писал(а):но с помощью разных хитростей многоэтажность была и раньше достижима. Однако смысла в ней чуть. Бо это уже "не дум" будет.

Cheb писал(а):Дык три-де полы - одна из первых фич, которую привинтили создатели source port'ов.

это не то, надо было в мультиплее смотреть с одного этажа на другой и видеть других игроков.
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Cheb's Game Engine

Сообщение Cheb » 10.01.2024 13:09:58

sts писал(а):это не то, надо было в мультиплее смотреть с одного этажа на другой и видеть других игроков.

Кто-то неправильно понял понятие "три-де пол". Это по факту способ добавить платформу, делящую сектор (точнее, все сектора с указанным тегом) на два этажа. Причём, верхняя половина имеет родной уровень света, а нижняя - заданный для дамми-сектора триде-пола. Где потолок дамми-сектора задаёт верхнюю поверхность платформы, пол - нижнюю, а одна из стен используется, как задающая (спешиал 160, текстура задаёт текстуру боков платформы, тег целевого сектора, тип: твёрдый/проходимый/плавабельная вода, непрозрачность от 0 до 255, рисовать/не рисовать внутренние поверхности для полупрозрачных).

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

Мост на первом скриншоте, с которого стреляют импы - как раз триде-пол. Но и тот мост, на котором стоит смотрящий - тоже! Под ним - пропасть, у которой дно - "115 мгновенная смерть". Какодемоны могут летать под, над и между.
Во многих картах "дня истребления" есть многоярусные стеллажи с ящиками на разных полках. Хотя ваять такое в редакторе - тот ещё геморрой. Поскольку сектора остаются 2d, надо хитровывернутым образом нарезать теги и наплодить 100500 дамми-секторов: ведь любые ящики на второй и третьей полках - тоже триде-полы! И для ящика с другой текстурой стенок - нужен отдельный дамми-сектор.
А если, например, делаешь разрушенный мост - и надо, чтобы на обломанном конце была текстура обломанного бетона а не гладкого, что на боках - изволь нарезать дополнительный сектор с отдельным тегом, приводимый другой линией дамми-сектора с другой текстурой.
Короче, возможно всё. Но гемор. Но возможно всё.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Alex2013 » 10.01.2024 15:01:44

Cheb писал(а):Короче, возможно всё. Но гемор. Но возможно всё.

Вот и я об этом писал . Но просто "нафига козе боян?" Суть ведь в том что лучше моего любимого "15-го левела" дум 2 особо ничего не сделаешь. 2.5D фича а для полного "3д ретро" есть Кавак1 . ( Там кстати есть шикарные ремейки дума 1-2 где стиль выдержан просто идеально, но возможности совсем другие и главное все работает "без геморроя" . )
Последний раз редактировалось Alex2013 12.01.2024 17:57:52, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44

Re: Cheb's Game Engine

Сообщение sts » 10.01.2024 16:39:52

Cheb писал(а):Кто-то неправильно понял понятие "три-де пол".

ну т.е. можно сделать П образное, шести этажное здание с улицей, с возможность стрелять по другим этажам и улице в мультиплеере?

Alex2013 писал(а):для полного "3д ретро" есть Кавак1

когда докатились редакторы для него уже было неактуально
тогда его еще и не было собственно
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru