Cheb's Game Engine

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

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

Аватара пользователя
Cheb
энтузиаст
Сообщения: 997
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

sts писал(а):т.е. можно сделать П образное, шести этажное здание с улицей, с возможность стрелять по другим этажам и улице в мультиплеере?
Да. Это будет колоссальная боль - и, скорей всего, пустая бетонная коробка, поскольку вставлять мебель в эти шесть этажей - уже запредельный мазохизм - и скорей всего ты не увидишь лестничного пролёта над лестничным пролётом, поскольку, хотя технически возможно, это уже мазохизм в квадрате - но честное шестиэтажное здание возможно.

В мультиплеере - Зандронум. Поскольку мультиплеер - это к Зандронуму. Который, в отличие от GZDoom, не поддерживает истинных порталов - но полностью поддерживает триде-полы.

Хотя, с практической точки зрения - и сохранения собственного рассудка - в "Дне истреболения" нет зданий с наслоением больше двух этажей. Ну, Марк таких не делал. Я в одном месте наворотил трёхэтажную башню, на этом скриншоте: Изображение
Alex2013
долгожитель
Сообщения: 3269
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Интересно когда появятся ремейки Дума 1-2 на движке Дума 2016 (дум 4)? Лично я пока классик дум и его ремейки временно похоронил . ("типа ну сколько можно!" фоном звук выкидываемого в окно ЭЛТ монитора... Вжух дзынь шмяк ! ) :D
Аватара пользователя
Cheb
энтузиаст
Сообщения: 997
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

Где-то в глубинах геологических слоёв происходит подвижка пород - лёгкий тремор, и потом снова глубокая, извечная тишина.

Функции "упаковать указатель на объект в dword" и "распаковать указатель на объект из dword" преобразованы в тип "ссылка Чеперси" (продвинутая упакованная запись состоящая из тогоже дворда), который все траверсеры, включая сериализаторы, обрабатывают как, вы догадались, указатель на объект. Ответ на вопрос "нафига?" прост: оная остаётся 32-битной на 64-битных платформах, экономя размер инстанса. А дальше возможны такие классы-ускоряторы, как "умная строка", "умный массив", "умный map" и прочая, на малых наборах элементов хранящие всё внутри своего 64-байтного инстанса, *резко* экономя на загрязнении кеша.

Я закончил с думом, в работе по основной работе по уши и что-то могу сделать только осенью - НО. Я проверил свои теории заговора практикой -- включая неудавшуюся попытку оптимизировать Франкен Брутал Дум 21.5 чтобы в нём шёл Okuplok -- и нашёл, что это никакие не теории а сермяжная правда, да ещё и в квадрате. Наивные алгоритмы, на каких построен движок дума (и от которых никуда не денешься ибо обратная совместимость отлита в бронзе) приводят к изнасилованию кеша уже на 5..10 тысячах активных монстров: объём данных, которые наивный алгоритм задрачивает обходом десятки тысяч раз за кадр (для каждого монстра проверяя видимость игроков, например, для чего обходит бсп дерево - или для каждого снаряда столкновение со всеми монстрами в блокмапе) перестаёт умещаться в кеш второго уровня - и всё, фреймрейт умер в муках. Это даже не O*N^2, это O*N^2 упирающийся в стену, касаясь которой взлетает в бесконечность.
Аватара пользователя
Cheb
энтузиаст
Сообщения: 997
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

З.Ы. И только прокачавшись два года на думе и съев витаминку я внезапно осознал, что шёл курсом в пропасть: то, что я наваял, в реальных боевых не могло бы работать без либо
А) сборщика мусора
Б) умных указателей со счётчиком ссылок
.
К счастью, в фпц 3.2 добавилась возможность создавать кастомные менеджед типы. Если бы я доделал на более ранней версии компилятора - я был бы вынужден плясать на граблях сборщика мусора. К счастью, в 3.2 брюки лёгким движением превращаются... Превращаются брюки... В общем, "ссылка Чеперси" и станет тем самым умным указателем со счётчиком ссылок. Причём, счётчик будет храниться в ускоренном поле Чеперси, которым заведует менеджер памяти инстансов! А ссылка Чеперси может жить хоть на стеке (она же менеджед)
Минус - связка толстеет на ещё один дворд (счётчик ссылок). Плюс - толстеет только ссылаемый инстанс, каждая ссылка остаётся 32-битной.
Ускоренные поля *не* сериализуются, поэтому счётчик ссылок будет перезаполняться каждый раз естественным путём в результате десериализации.

З.З.Ы. Памятка себе на осень: привязка расслоябельных игровых объектов к будильникам будет *тоже* в ускоренных полях - и при десериализации эту привязку восстанавливает объект будильника для всех объектов в своём списке.
Alex2013
долгожитель
Сообщения: 3269
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Привет! (традиционный вопрос) :wink:
А не пора ли все-же перебраться на более продвинутый в плане графики движок ?
(Сохранив совместимость данных )
Или все давно решено могучим ураганом ?
Зы
Doom 2 Remake【Unreal Engine 4】
https://youtu.be/mCigiEuRvrA
https://rutube.ru/video/4759f33fb6b526e ... 8d/?r=plwd
Сама игрушка тут .
https://www.moddb.com/games/doom2remake ... e-alpha-01
https://www.moddb.com/downloads/mirror/ ... 04103747b1
sts
энтузиаст
Сообщения: 558
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

Cheb писал(а): 18.03.2026 16:57:07 умных указателей со счётчиком ссылок
счетчик ссылок сбрасывает кеш
Аватара пользователя
Cheb
энтузиаст
Сообщения: 997
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Сообщение Cheb »

Alex2013 писал(а): 19.03.2026 11:03:51 А не пора ли все-же перебраться на более продвинутый в плане графики движок ?
БД и День истребления написаны даже не под GZDoom, они написаны под Зандронум - уникальный порт дума с клиент-серверной архитектурой, застрявший навеки в 2012-м году по уровню технологий. Потому что это форк ZDoom 1.5.
Если кто-то решит переписать БД и День Истребления полностью с нуля на новый движок - флаг ему в руки. Я думаю, одному человеку понадобится всего пять или шесть лет, упахиваясь каждый день с перерывами на еду и сон.
sts писал(а): 19.03.2026 13:08:01 счетчик ссылок сбрасывает кеш
ЕСЛИ его имплементировать наивно, как стандартные менеджед типы в ФП.
Но я имплементирую его используя ускоренные поля - фича сродни Entity Component System, заточеннная под дружественность кешу. Их изменение *не* прикасается к инстансу, к которому они привязаны - всё идёт через чёрную магию арифметики с указателями.

З.Ы. Это уже давно имплементировано через хитровывернутый диспетчер памяти для инстансов - всеми премудростями заведует класс TChepersyMemoryManagerChunk , а инстанс чанка для любого инстанса получаем очищая младшие 17 бит, поскольку NewInstance чанка выравнивает его на 128 Кб. Т.е. под инстанс чанка выделяется 128Кб и чанк содержит инстансы одинакового размера (64, 128, 192 байт и т.д - в целых линейках кеша). И память под инстансы игровых объектов выделяет внутри этих 128 Кб, за концом собственных полей. А собственные поля в основном состоят из массивов ускоренных полей - причём, при чтении сначала проверяется битовая маска, которая в 32 раза компактнее чем само ускоренное поле, ещё дальше уменьшая загрязнение кеша).

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

З.З.Ы. И я буду по возможности избегать локальных переменныъ типа "умная ссылка" - это будут 99% поля игровых объектов, т.е. счётчик ссылок будет дёргать только при изменении самих игровых объектов, конкретно - при изменениях связей между ними.
Если же проводится проверка "текущий враг вообще жив и не готов ли укусить меня за жопу" - это делается посредством вызова метода Peek умной ссылки, который возвращает обычный указатель на инстанс, который записывается в локальную переменную - а объектные указатели не менеджед ни разу.

Да, я ностальгирующий дед, я назвал ключевые методы механизма расслаиваемого мира "Peek" и "Poke" :mrgreen:

З.З.З.Ы. А заодно кладбища заворачиваются в простыню и ползут на кладбище:
1. Метод Scrape больше не хоронит на кладбище, он освобождает *немедленно* если счётчик ссылок нулевой - т.е. действует как Free если не использовались умные ссылки.
2. Менеджер памяти шерстит все свои чанки каждый кадр (не каждый тик, а каждый кадр) на предмет Scraped объектов с нулевым счётчиком ссылок и делает им секир-башка. Ооочень дешёвая операция, учитывая, как всё организовано (и это * один* проход).
Alex2013
долгожитель
Сообщения: 3269
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Cheb писал(а): 19.03.2026 17:05:05
Alex2013 писал(а): 19.03.2026 11:03:51 А не пора ли все-же перебраться на более продвинутый в плане графики движок ?
БД и День истребления написаны даже не под GZDoom, они написаны под Зандронум - уникальный порт дума с клиент-серверной архитектурой, застрявший навеки в 2012-м году по уровню технологий. Потому что это форк ZDoom 1.5.
Если кто-то решит переписать БД и День Истребления полностью с нуля на новый движок - флаг ему в руки. Я думаю, одному человеку понадобится всего пять или шесть лет, упахиваясь каждый день с перерывами на еду и сон.
В принципе верно, но есть исключения .. См. игрушку "Hail.to.the.Rainbow" (сюжет если копнуть "гилой клюквой" пованивает (игры в стиле "пни труп СССР побольнее" задолбали - трупу само собой "по барабану" но мне нет!), но если оценивать эту игру чисто технически это ОФИГЕННО! Чувак в одиночку с нуля выдал гаму практически уровня "Атомик херт"!)
https://rutube.ru/video/e08f41d2e0dc335 ... e8/?r=plwd

Зы

Сейчас "одни не совсем один " бо ""ИИ рулит" и плевать настоящий он или нет если реально помогает . :idea:
(Даже "ленивый я" и то сподобился по пользоваться. Говорят что "халява" отстаёт минимум на год но даже так прогресс за крайние полгода просто сказочный... Локальные LLM и SD "печалька " моего железа почти катастрофически не хватает (хотя удивительно что вообще хоть что-то работает ) но "облачная халява" впечатляет + есть хитрые "гибридные установки" )
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 580
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Ого, ты жив! (Не то что НЕКОТОРЫЕ. Не будем показывать пальцем.)

Видал, чего я в транке наделал? (Новый крутой менеджер памяти, новый крутой heaptrc, крутые реализации базовых функций типа Move и CompareByte для x86/x64 (в 3.2 многие из них работают просто отвратительно: CompareByte на x64 была побайтовой; на i386 многие функции использовали жутко медленные REP-инструкции, из-за чего у меня в ряде случаев программы В ЦЕЛОМ замедлялись процентов на 10‒20; вот у него тоже хороший пример)). Похвали пж.

Ты же используешь транк, м?
Ответить